- lex 文件夹
此文件夹有 3 个 Java类 ,这三个类的终极目标是实现:自动生成任意语言的 词法分析器 。就像 lex/flex。水平有限只粗糙实现了核心算法以作练习。
Thompson.java实现:Re(正则表达式) --> NFA,使用的是Thompson算法;SubsetConstruction.java实现: NFA --> DFA,使用的是子集构造算法;Hopcroft.java实现:优化DFA,使用的是Hopcroft算法;- 最后的一个 表驱动算法 ,由于对于输入、输出没有确定,没有写完,故没有粘贴。
- flexTool/TinyC 文件夹
此文件夹记录了使用
flex工具。用此,实现了对 TinyC 语言的词法分析,这种语言是 C语言 的一个子集。
lexTinyC.lflex文件token.h上述包含的头文件lex.yy.cflex产生的文件,注意 yylex() 函数lexTinyC编译上述文件生成的目标程序tinyc.c测试代码result.txt测试结果
- SyntaxAnalysis 文件夹
此文件夹记录了一些关于 语法分析 的东西。
rdp子文件中实现了简单文法的 递归下降 分析方法。ll子文件夹中实现了 LL(1) 语法分析方法。lr子文件夹中部分实现了 LR(0) 语法分析方法,做到可以生成 自动机 ,剩下的是生成 分析表 以及 驱动代码 了。
- yacc 文件夹
此文件夹记录了一些关于
YACC/Bison的使用。
test1实现一个简单的name & age分析test2经典案例 ---- 计算器test3实现tinyC语言部分语法分析