PCC——python实现编译器
编译原理课设,实现源码到汇编代码的翻译,链接部分使用gcc的功能。目前支持数组,四则运算,赋值,判断,输出,循环语句等。
项目地址:
flymysql/Py-Compilergithub.com源码说明
- lexer.py 词法分析器
- get_predict_table.py 生成预测分析表
- LR.py 非递归的语法分析器
- generate.py 中间代码生成
- to_asm.py 汇编代码生成
- pcc.py 入口函数
使用
$ python pcc.py
命令说明
pcc -o (filename) 直接编译生成可执行程序
pcc -s (filename) 生成汇编源码
pcc -t (filename) 查看语法树生成过程
pcc -l (filename) 查看词法分析
pcc -h 查看帮助
pcc -p 查看本编译器的预测分析表
pcc -g 查看本编译器的语法推导
exit 退出
编译代码
pcc -o ./test/test.c
声明语句和赋值语句
int
数组
int
数组下标,即[]中内容也可以用表达式嵌套
int
输出语句
目前printf语句的参数最多可以带三个参数
printf
printf语句的参数也可以是表达式
例子
printf("%d", d + 2*(3+4));
控制语句
目前仅支持if判断,可嵌套使用
if
while控制语句
这个不多说,也是可嵌套
int
举个栗子(打印99乘法表)
源demo
int
举个栗子(打印斐波那契数列)
生成的中间代码(四元式)
(=,0,0,index)
(=,1,0,arr[]0)
(=,2,0,arr[]1)
(=,3,0,arr[]2)
(code_block,0,0,W4)
(j<,index,20,code6)
(j,0,0,block6)
(code_block,0,0,code6)
(=,arr[]index,0,b)
(+,index,1,T0)
(+,arr[]T0,b,T1)
(+,index,2,T2)
(=,T1,0,arr[]T2)
(print,index,b,-1)
(+,index,1,T3)
(=,T3,0,index)
(j,0,0,W4)
(code_block,0,0,block6)
(print,-1,-1,-1)
其他命令自行发觉hhh