
2008年11月9日
作者(不是我)信息:
华南理工大学软件学院本科07级(现大二)
进入大学前玩过几个星期pascal,高考后的暑假重新学编程
程序信息:(下载请移步这里)
学习C++一年后的作品。
内含所有代码,以及VC++工程文件。
一个程序,输入只有匹配没有捕获的正则表达式,输入被匹配的字符串,输出字符串中符合正则表达式要求的部分。
支持括号改变优先级,[字符集]和[^字符集],少量转义(\d等),循环(+*?),没有捕获
输入输出(红色部分为用户输入的内容):
请输入正则表达式 : /\*([^\*]|\*+[^\*/])*\*+/
请输入所要匹配的字符串 : a//a///*\\nab**abc**//*
a//a//【/*\\nab**abc**/】/*
算法简要:
正则表达式->语法树->ε-NFA->NFA->DFA->连通矩阵。
使用递归向下法判断输入的正则表达式的合法性并转换为树结构,其后转成状态机。
posted @
2008-11-09 21:36 陈梓瀚(vczh) 阅读(749) |
评论 (3) |
编辑

2008年9月6日
摘要: 我们知道Yacc和Bison都是产生C++的代码作为编译器的前端的。但是有时候我们需要动态地产生一个编译器前端,极端一点讲,譬如“文法调试器”。调试器总不能动态生成.y文件,让yacc编译,让gcc再度编译,然后execute,最后将程序的输出结果读进来。这样就太麻烦了,于是我们需要重新写一个生成编译器前端的程序。
阅读全文
posted @
2008-09-06 18:56 陈梓瀚(vczh) 阅读(941) |
评论 (2) |
编辑

2008年8月27日
摘要: 大概一年前曾经用C++开发了一个可以在C++中直接写上下文无关文法的上下文无关文法分析器。这玩意儿叫Syngram。Syngram曾经做了两次,第一次做成了用一个类去读文法文件,后来不爽就改成了直接在C++里面写的。我弄了一个叫Term的类,重载了一些操作符,于是你可以搞分支、可选、错误处理等复杂的文法推导式。现在打算做一个周边工具。
阅读全文
posted @
2008-08-27 21:07 陈梓瀚(vczh) 阅读(1700) |
评论 (18) |
编辑

2008年8月15日
原本在C++博客申请了个东西,后来发现虽然我写的代码基本都是C++,不过贴上博客的东西却跟C++没什么关系,所以以后打算在这里也写些啥。不过因为这里没啥东西,
原来的博客也才50多篇文章。还是要慢慢积累起来的……
posted @
2008-08-15 22:39 陈梓瀚(vczh) 阅读(550) |
评论 (7) |
编辑