一个基于 LL(1) 文法构建的 C 语言编译器,支持基本的 C 语言语法特性。
- Windows 操作系统
- GCC 编译器
- PowerShell 或命令行界面
# 快速编译
.\build.bat
# 完整编译和测试
.\build_and_test.bat# 编译C源文件
.\compiler.exe <源文件名.c>
# 示例
.\compiler.exe simple_test.c- 变量声明:
int a;,int b = 5; - 数据类型:
int,char,void - 赋值操作:
a = b + 1;
- 算术运算:
+,-,*,/,%- 支持基本四则运算和取模运算
- 正确处理运算符优先级(乘除优先于加减)
- 支持负数运算
- 比较运算:
<,<=,>,>=,==,!=- 支持所有关系比较运算符
- 返回布尔值(0 或 1)
- 条件语句:
if-else - 循环语句:
while,for - 函数调用: 自定义函数和递归调用
- 返回语句:
return
- 函数定义: 支持参数和返回值
- 函数调用: 支持多层函数调用
- 参数传递: 按值传递
快速编译脚本,只编译编译器本身:
.\build.bat完整的构建和测试脚本,编译编译器并运行所有测试:
.\build_and_test.bat清理临时文件和编译产物:
.\clean.bat- 词法分析 (
lexer.c) - 将源代码转换为 token 流 - 语法分析 (
parser.c) - 生成抽象语法树(AST) - 中间代码生成 (
ir_gen.c) - 生成中间表示(IR) - 目标代码生成 (
code_gen.c) - 生成 x86 汇编代码 - 链接 - 使用 GCC 生成最终可执行文件
CCompiler/
├── src/ # 源代码
│ ├── lexer.c # 词法分析器
│ ├── parser.c # 语法分析器
│ ├── ir_gen.c # 中间代码生成器
│ ├── code_gen.c # 目标代码生成器
│ └── main.c # 主程序
├── include/ # 头文件
├── obj/ # 目标文件
├── *.c # 测试文件
├── build.bat # 快速构建脚本
├── build_and_test.bat # 完整构建测试脚本
└── clean.bat # 清理脚本
.\compiler.exe <输入文件> [选项]
选项:
-o <文件> 指定输出文件名 (默认: a.s)
--tokens 打印词法分析结果
--ast 打印抽象语法树
--ir 打印中间代码
--help 显示帮助信息# 编译并显示中间过程
.\compiler.exe simple_test.c --tokens --ast --ir
# 指定输出文件
.\compiler.exe simple_test.c -o output.s运行所有测试用例:
.\build_and_test.batsimple_test.c- 基本语法和条件语句测试function_test.c- 函数定义和调用测试loop_test.c- while 和 for 循环综合测试for_test.c- for 循环专项测试simple_operator_test.c- 运算符测试