c语言99乘法表代码_【PCC】一个用python写的c语言编译器

89739422287df724ed4d0c926157ca40.png

PCC——python实现编译器

编译原理课设,实现源码到汇编代码的翻译,链接部分使用gcc的功能。目前支持数组,四则运算,赋值,判断,输出,循环语句等。

项目地址:

flymysql/Py-Compiler​github.com
ae04c6e142d0a7827381ec3c6ceab3f6.png

源码说明

  1. lexer.py 词法分析器
  2. get_predict_table.py 生成预测分析表
  3. LR.py 非递归的语法分析器
  4. generate.py 中间代码生成
  5. to_asm.py 汇编代码生成
  6. pcc.py 入口函数

使用

$ python pcc.py

命令说明

pcc -o (filename)       直接编译生成可执行程序
pcc -s (filename)       生成汇编源码
pcc -t (filename)       查看语法树生成过程
pcc -l (filename)       查看词法分析
pcc -h                  查看帮助
pcc -p                  查看本编译器的预测分析表
pcc -g                  查看本编译器的语法推导
exit                    退出

37575c6c2de35c262ac1ec905bd3a0d9.png

编译代码

pcc -o ./test/test.c

声明语句和赋值语句

int 


数组

int 

数组下标,即[]中内容也可以用表达式嵌套

int 


输出语句
目前printf语句的参数最多可以带三个参数

printf

printf语句的参数也可以是表达式

例子

printf("%d", d + 2*(3+4));

控制语句

目前仅支持if判断,可嵌套使用

if


while控制语句

这个不多说,也是可嵌套

int 

举个栗子(打印99乘法表)

4e775588eac3defc7a6c9ec69c38bdd7.png

源demo

int 

举个栗子(打印斐波那契数列)

be7430b719db8c55470b5d52d0dfd28f.png

生成的中间代码(四元式)

(=,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值