本项目实现了一个简单编译器,可以将简化过的c语言(c--)编译为MIPS32指令,并在SPIM Simulator上进行测试 c--相比普通c语言,假设任何函数参数都只能是简单变量,函数只能返回简单变量且函数只会进行一次定义(没有函数声明)
- ubuntu 22.04
- x86_64 Linux 6.5.0-26-generic
- bison 3.8.2
- flex 2.6.4
- GUN Make 4.3
- gcc 13.2.0
- 进入Code目录
- 使用make生成编译器程序parser
- 使用make clean清除生成的程序
- 使用parser src.c dest 编译src.c中的程序,并将目标代码写入dest中
- 编译器分为词法分析,语法分析,语意分析,中间代码生成,目标代码生成
- 词法分析使用flex工具,使用正则表达式捕获源程序中的tokens。
- 语法分析使用bison工具,使用CFG,在语法制导翻译过程中调用语法分析树构造函数,构造语法分析树并记录节点属性(终结符,非终结符)。
- 语意分析对语法分析树进行上下文相关分析,使用语法制导翻译构建符号表,同时进行静态类型检查,如参数类型,返回值类型,重复定义检查。
- 中间代码生成使用三地址代码链表记录中间代码,将语法分析树翻译为中间代码。
- 目标代码生成完成指令选择和寄存器分配过程,将中间代码翻译为MIPS32代码