问题(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:
}
希望输入的程式码可以转成这种最简形式