- 这个实验项目包括了词法分析器、语法分析器、语义分析器、代码生成器的Java语言实现。
- 项目主要是以老师提供的C++版本编译器进行参考。同时也略微参考了python版本和C版本的编译器。
- 可以在Windows(16位)和Linux环境下运行输出的汇编代码。
- 要求有Java才能运行实验的编译器。
- 若想要运行汇编代码则还额外需要gcc工具。
- 本实验的main函数提供了冒泡排序的例子代码,可以更改成其他的代码。
- 运行Main.java中的main函数即可运行实验编译器(包括词法分析器、语法分析器、语义分析器、代码生成器)。输出的汇编代码被存在项目根目录下bubble_sort.s中。
- 在Linux下若还想运行汇编代码,运行
./bubble_sort.sh
即可启用脚本。 - 在Windows下若想运行汇编代码,运行
.\bubble_sort.bat
即可启用批处理程序。注意!Windows生成的是16位应用程序,请用合适的Windows版本运行!如果用Windows10或其他不支持16位的Windows操作系统,会显示不兼容!
- 支持int、float、bool、char等字面常量和普通标识符。还支持很多常见的关键字,还支持比较运算符、间隔符。也能识别用于标识字符流结尾的EOF的token。
- 在能够识别C++参考代码中的所有token的基础上又加了老师给的c语言和python语言参考代码中支持的token。所以三个参考代码里的token在我的实验里都能识别。
- 在改写的基础上对参考代码的块注释的词法分析代码进行了重写,因为觉得参考代码不太正确。
- 因为调整了块注释的代码,所以对应地整合了除法的词法分析代码。
- 参考代码只有整个编译器的测试程序,我新编写了专门用于词法分析器的测试程序。
- 因为Java程序不支持'\a'和'\v'转义符,所以虽然参考程序能识别这两个转义符,我没有实现这两个转义符的识别。
- 已支持C++版本的AST,缺乏对const的判别,未来加入。
- 添加测试程序。
- 已支持C++版本的语义分析。
- 由于Java不支持C++中的一些语言特性,故部分代码采用python版本的逻辑。
- 添加测试程序。
- 已支持C++版本代码生成。
- 添加测试程序。