Phase 1 Accomplished!
偶的小小编译器计划的第一阶段终于在2006年6月19日22点37分完成了!!
从上周日的凌晨这个小小的计划令我不能入眠开始,经过了整整一周都一点的时间,我亲自见证了这个编译器的设计、反思、孕育、诞生的过程。
之前这10篇blog纪录了完整地记录了这项计划的演化,有文法的初步设计、反复修改,有符号表结构的构建、功能增加,有源代码的录入、精简……
使用Easy Code Count 1.0.0.3统计的结果是共计代码2,242行。可以说,每一行代码都是精心雕作的结果,每一个类都是心血浇注的结晶。
虽然现在功能还不太齐全,相对于完整的C语言有太多不支持的要素,但是作为一个大三学生的业余爱好,基本的语言特性已经得到很好的实现——多函数定义、函数调用、多维数组支持、变量检查、变量类型检测;并且还有不断扩充的空间。
阶段1告一段落之后,下一步是计划第2阶段的任务——由于现在输出的都是原始的四元式,而且有很多冗余部分,所以下一步工作的主要任务就是对四元式进行优化;并且参考一些汇编语言的资料,争取做到汇编代码级的输出。
在符号表、四元式输出的设计上我参考了很多GNU的gcc、微软的cl编译器输出的中间汇编代码的格式。在第二阶段中,我的打算是把我做的编译器插入到gcc的编译过程中——先用gcc的预处理器处理源文件中的宏定义,然后是我的编译器将代码翻译成gcc的汇编格式,再调用gcc的汇编器和连接器。这样,可以充分利用现有的资源,同时达到了创新的目的——为C语言加入函数嵌套定义的功能——这也是我最引以为豪的地方。
Labels: Pallyc Project

1 Comments:
gcc的C Extensions中已经支持Nested Functions。具体从哪个版本开始支持的还未经查证,不过你现在用的gcc应该是有这功能的。
info gcc "C Extensions" "Nested Functions"
8:41 AM
Post a Comment
<< Home