# 编译所有测试用例(默认 O0)
make compile-tests
# 使用指定优化级别编译测试用例
make compile-tests OPT_LEVEL=1
make compile-tests OPT_LEVEL=2
make compile-tests OPT_LEVEL=3
# 查看编译日志
cat errorlog.txt
编译结果会保存在 test_res/ 目录中,错误日志保存在 errorlog.txt。
示例代码
// 简单的 main 函数
int main(){
return 42;
}
// 带变量和表达式的程序
int main() {
int a = 10;
int b = 20;
int c = a + b * 2;
return c;
}
// 带数组的程序
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int sum = 0;
int i = 0;
while (i < 5) {
sum = sum + arr[i];
i = i + 1;
}
return sum;
}
// 使用运行时库函数
int main() {
int n = getint();
putint(n);
return 0;
}
// 带循环优化的程序
int main() {
int sum = 0;
int i = 0;
while (i < 100) {
sum = sum + i;
i = i + 1;
}
return sum;
}
SysY Compiler - RISC-V 64 Backend
这是一个完整的 SysY 语言编译器实现,可以将 SysY 源代码编译为 RISC-V 64 汇编代码。编译器采用多阶段设计,包含词法分析、语法分析、AST 构建、AST 优化、LLVM IR 生成和最终的 RISC-V 汇编代码生成。
当前项目结构(updated:2025/12/26)
目前实现的功能特性
完整的 SysY 语言支持
AST 优化
运行时库支持
基于 ANTLR4 的词法和语法分析
完整的 AST 结构设计
LLVM IR 中间代码生成
RISC-V 64 目标汇编代码生成
调试输出支持
--dump-ast:输出抽象语法树到文件--dump-ir:输出 LLVM IR 到文件-v, --verbose:详细输出编译过程编译要求
构建方法
使用方法
基本用法
命令行选项
-o <file>: 指定输出汇编文件(默认:output.s)-O <level>: 优化级别(0-3,默认:O0)--dump-ast:输出抽象语法树到 <input>.ast 文件--dump-ir:输出 LLVM IR 到 <input>.ll 文件-v, --verbose:启用详细输出-h, --help:显示帮助信息编译流程
词法分析和语法分析
AST 构建
AST 优化
LLVM IR 生成
RISC-V 代码生成
测试用例
项目包含了测试用例,位于
test/目录下:examples/:性能测试用例examples_final/:决赛性能测试用例test_ast_generator.cpp:AST 生成测试test_ir.cpp:IR 生成测试批量编译测试
编译结果会保存在
test_res/目录中,错误日志保存在errorlog.txt。示例代码
注意事项
.sy为扩展名.s扩展名SysYruntime/目录