该项目是一个基于C++语言实现的C语言子集(C--)的编译器前端部分. 它包括词法分析器和语法分析器, 用于对C--语言源代码进行词法分析和语法分析.
C--语言是C语言的一个简化版本, 去除了一些复杂的特性. 项目的主要任务包括编写词法分析器和语法分析器, 其中词法分析器基于自动机理论实现, 而语法分析器采用自顶向下LL(1)分析法. 该项目接受待分析的C--语言代码和文法作为输入, 完成编译器前端的工作, 并输出规约序列, 同时可以输出符号表, Token序列, FIRST/FOLLOW集, 预测分析表等中间结果.
- 词法分析器: 根据C--语言的词法规则, 将输入的源代码转化为单词符号序列, 并生成符号表和Token序列.
- 语法分析器: 基于LL(1)语法分析方法, 接受词法分析器生成的Token序列作为输入, 根据给定的C--语言文法生成FIRST集, FOLLOW集和预测分析表, 并生成规约序列.
- 错误处理: 具备完善的错误处理机制, 能够处理词法分析和语法分析中的错误情况.
- 中间输出: 可以输出符号表, Token序列, FIRST/FOLLOW集, 预测分析表等中间结果, 用于调试和分析.
- 编译: 使用C++编译器(如g++)编译项目源代码.
- 运行: 执行编译后生成的可执行文件, 提供C--语言代码文件作为输入.
- 查看结果: 根据需要, 查看输出的规约序列以及其他中间结果文件.
include/
: 项目头文件src/
: 包含项目的源代码文件.src-in/
: 包含所需编译的C--源代码文件.bin/
: 编译后生成的可执行文件存放目录.out/
: 项目输出目录.grammar.txt
: C--语言的文法规则文件.Makefile
: 项目MakefileREADME
: 本文件
- 使用Linux系统
- C++编译器(如g++): 用于编译项目源代码. 具体编译器更改可以在
Makefile
中更改.
以下是使用示例:
$ make clean #清除全部bin及txt输出文件
$ make #编译
$ ./Compiler_front_end > out/gra.txt #输出
项目默认输出各个中间值及结果, 包括token序列, FIRST/FOLLOW, LL(1)分析表等.
程子姝, 余宇驰, 陈中皓