- Notifications
You must be signed in to change notification settings - Fork1
a toy compiler that compiles SysY (a subset of C) to RISC-V
License
CuWO4/SysY-Compiler
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
将C
的子集SysY
编译为RISC-V
的玩具编译器.
参考文档:北大编译实践在线文档.
实现SysY
向Koopa IR
或RISC-V
的编译.
SysY
是C
的子集. 详见SysY 标准概述.
Koopa IR
是北大编译实践课模仿LLVM IR
设计的中间表示. 详见Koopa IR 标准概述.
RISC-V
是由加州大学伯克利分校设计并推广的第五代 RISC 指令系统体系结构. 详见RISC-V手册.
项目支持了部分原版SysY
不支持的C
语法. 此外, 项目未使用北大编译实践课程提供的Koopa IR
框架.
make
或
make release
Windows 平台若因为sysy.lex.cpp
缺少unistd.h
头文件导致编译失败, 可尝试下载MinGW
提供的flex
依赖后, 将makefile
中的CXX := clang++
替换为CXX := g++
.
sysyc [MODE] -o [TARGET] [DBG-FLAGS]
[MODE]
指定编译模式, 可选值:-koopa
: 生成Koopa IR
;-riscv
: 生成RISC-V
;-test
: 向控制台打印AST
.
[TARGET]
指定目标文件.[DBG-FLAGS]
指定DEBUG
模式, 可选值(可同时启用):-dbg-k
: 生成的Koopa IR
代码中会包含类型信息;-dbg-r
: 生成的RISC-V
代码中会包含Koopa IR
原句.
本节内容依赖Docker
镜像maxxing/compiler-dev
, 须在相应容器中运行.
test.py [STAGE] [TARGET-LANG]
STAGE
: 指定测试样例阶段; 当未指定时, 测试所有阶段. 可选值:lv1
,lv2
, ... ,lv9
,perf
.TARGET-LANG
: 指定测试语言; 当未指定时, 测试所有语言. 可选值:koopa
,riscv
.
test.py hello [MODE] [DBG-FLAGS]
以指定的MODE
和DBG-FLAGS
编译testcases/hello/hello.c
, 详见运行.
主题 | C | Koopa IR | RISC-V |
---|---|---|---|
斐波那契数列 | fib.c | fib.koopa | fib.S |
归并排序 | msort.c | msort.koopa | msort.S |
快速傅里叶变换 | fft.c | fft.koopa | fft.S |
v1.0
2024-5-5. 实现无优化的编译.
CuWO4,邮箱.
Unbuntu 20.04.6 LTS;
Ubuntu clang version 13.0.1;
flex 2.6.4;
bison (GNU Bison) 3.5.1;
GNU Make 4.2.1.
寄存器分配.
支持更多语法.
函数声明;
自增, 自减, 算术赋值, 位运算, 三目运算符;
指针运算;
字符串常量;
结构体;
预处理命令;
更多类型;
do-while
语句,switch
语句,goto
语句.
编译优化.
DCE
;常量传播;
控制流化简;
窥孔优化;
强度削弱.
支持的全局语句: 不隐去形参名的函数声明, 函数定义, 全局变量定义.
支持的子句: 变量定义, 表达式语句,return
,if
,else
,while
,for
,break
,continue
.
支持的类型:int
,void
, 数组, 形如T[]
的指针.
支持的运算符:
运行时库:无需包含头文件, 自动声明以下八个函数:
intgetint();intgetch();intgetarray(int[]);voidputint(int);voidputch(int);voidputarray(int,int[]);voidstarttime();voidstoptime();
规范详见SysY 运行时库.
Footnotes
About
a toy compiler that compiles SysY (a subset of C) to RISC-V