[问题] 如何让C尽量有组合语言的形式

楼主: wei115 (ㄎㄎ)   2019-05-06 23:49:47
问题(Question):
我想试试看实作一个C编译器
之前没有学过编译器,看了几个星期的资料后,还是不太懂编译器
不过土法炼钢,还是炼出了一些东西
因为不知道写一个编译器的难度,所以简化一下目标,只做编译器的前端
使用C作为中间语言,希望可以去除语法糖,和格式尽量和组合语言相近,以便后端实做
使用递回下降方法,没有多少检查(int str = "aabbcc"; 是可以的)
语法3成参考K&R,7成用猜的,程式码写的不够合理,常常加一个功能就要动到整个专案
之后收集更多资料后会全部打掉重练
目前有做出int、char的宣告if、while
之后想做阵列&指标的功能,但不知道指标的宣告和使用该如何简化
想请各位大大提供一些方向
谢谢
p.s
以一个1+...+100的循环程式为例
输入:
int main()
{
int a = 101;
int out = 0;
while(a = a - 1)
out = out + a;
}
输出:
int r0;int r1;int r2;int r3;int r4;int r5;int r6;int r7;int r8;int r9;int
r10;int r11;int r12;int r13;int r14;int r15;int r16;int r17;int r18;int r19;
int main()
{
r0 = 101;
int a = r0;
r0 = 0;
int out = r0;
L0:
r0 = a;
r1 = a;
r2 = 1;
r3 = r1 - r2;
r0 = r3;
a = r3;
if(!r0) goto L1;
r4 = out;
r5 = out;
r6 = a;
r7 = r5 + r6;
r4 = r7;
out = r7;
goto L0;
L1:
}
希望输入的程式码可以转成这种最简形式
作者: Lipraxde (Lipraxde)   2019-05-07 07:41:00
你知道 SSA form 是什么东西吗?你好像是想在产生中间表示法的时后做暂存器分配?暂存器分配是后端该做的事那你有 AST 吗?
楼主: wei115 (ㄎㄎ)   2019-05-07 11:53:00
没有,词汇分析后用递回下降,直接输出中间码中间基本上全部写成一陀.....
作者: Lipraxde (Lipraxde)   2019-05-07 12:10:00
先建立 AST,之后再从 AST 产生中间码会比较容易写
楼主: wei115 (ㄎㄎ)   2019-05-07 12:26:00
目前对ast不够了解,之后收集足够的资料后打算全部重写,但是现在对要产生怎样形式的中间码还没有什么头绪
作者: Lipraxde (Lipraxde)   2019-05-07 13:22:00
用你原本的方法就好了啊,不然 java bytecode、llvm IR之类的,还是你是打算后端也自己写?
作者: Killercat (杀人猫™)   2019-05-07 13:47:00
可惜不是C++ 不然板上一堆CPPGM的心得 XD
作者: eye5002003 (下一夜)   2019-05-07 18:17:00
作者: RishYang (Rish)   2019-05-09 03:16:00
小弟我最近写了简单的Lexer与Parser参考了http://rosettacode.org/wiki/Compiler写了网志https://reurl.cc/Qmr2O 希望有帮助

Links booklink

Contact Us: admin [ a t ] ucptt.com