在学习了编译原理的相关知识后,逐渐的掌握一个编译器的结构、作用和实现方法。同时,希望自己在不断的努力下写出一个简单的C语言编译器。
实现步骤
- 词法分析器:将C语言测试代码分解成一个一个的词法单元;
- 语法分析器:利用LR(1)文法分析算法对词法单元进行归约;
- 语义制导翻译:即语义分析,集成在语法分析器中,在每次归约后执行相应的语义动作,产生三地址码;
- 代码优化:对三地码进行优化,提高效率;
- 汇编代码生成:分配寄存器、由三地址码转化为汇编代码,再由汇编器编译成可执行代码
由于时间关系和实现难度较大的原因,我只是做到编译器的前端部分,即实现了1-3部,剩下了只好以后努力了。
主要功能
- 支持
一元运算符
(++,--,!,-),其中++和--有前缀和后缀两种功能 - 支持
逻辑运算符
:||和&& - 支持
算术运算符
:+,-,*,/,% - 支持
关系运算符
:>,>=,<,<=,==,!= - 控制流:
for
循环,while
循环 - 支持
判断语句
if 赋值
操作及一维数组
的部分操作- 只有
bool
和int
类型,其中的int为无符号整数