西西河

主题:【原创】语言编译器等请教 -- 中国农民

共:💬62 🌺30
全看分页树展 · 主题 跟帖
家园 自己定义的一个语言

文法类似于C,但是没有C那么灵活,不然我的编译器就太复杂了,那不是拿起石头砸自己的脚嘛!但是也没有PASCAL 那么严格,最基本的功能都有了,IF..THEN..ELSE判断语句,WHILE, DO...WHILE, FOR 循环,调用子程序包括了CALL BY REFERENCE和 CALL BY VALUE等等,反正,对于学习编译是足够了。

其实我自己觉得最有意思的是语义分析部分,最后发现最简单的堆栈就蛮好用的。最简单的,如果没有括号这样的比较复杂一点的优先级的话,比如

X=A+B;

根据第一轮的扫描,我们知道有X,=, A,+,B,;这样几个TOKEN, 发现第一个算符,比如=,就先压进算符堆栈,再后面扫描到了加法,先把+号压进堆栈,等到发现B后面没有更高级别的计算了(比如乘除法运算),就弹出这个+算符,然后从另外一个算子堆栈里弹出两个算子A和B,这样就生成了一句类似汇编的中间语言,就像这样

ADD A,B

MOV AX,X

把变量A和B相加,结果在寄存器AX里面,然后把这个值移到变量X里面。

当然,真正的算法远比这个复杂多了,十多年了,细节记得不是太清楚,不过大概的意思就是这样的。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河