【Yui编译器的故事1——在零之前】
这个学期开始了自己期待已久的一门课程,编译原理,时间像回到了大二操作系统课程的时候一样,充满了期待却又感叹自己的实力不足,几个头文件,就可以把自己弄晕的日子。
昨天第一次实验已经结束了,实现一个简单的词法分析器。看到很多同学上传了自己的程序,龙哥的相册名字很有意思,从零开始,那我觉得自己甚至连零都还没有达到,起码现在是吧,所以这个标题干脆就叫做了在零之前。
我是一个技术控,想做自己的webFace想做自己的LBS也想做自己的编译器,权当作是爱好吧,我想通过自己的这些日志记录一下这个编译器的成长过程。我把它叫做了Yui,是为了纪念自己的大学日子。我在自己的每一个阶段都有一个代号,这个Yui最初来自新垣结衣的英文名,也是yahoo一个js框架的名字,但其实这些都不重要,它表示一种状态。Yui也许会成功,当然更可能会失败,如果我将来没有疯掉的话,那么99%的可能,它还是会失败的。
我希望有一天Yui也会广大的开源爱好者给壮大,就是这么一个周六早上的梦,好了
-----------------------技术的分割线-----------------------------------------------------
学习的话,王宏志老师主要是,把课程分成了几个模块,词法分析,语法分析,语义分析,优化。我最近看的更多的是词法分析。昨天交了第一个实验,意外的受到了TA的表扬,被当成了范例,这个还是比较意外加欣喜的。好的方面就是词法分析的程序结构比较的清晰,其实这个也比较容易,就是以DFA的一个流程来作为程序结构,那么选择面向过程的C语言就是个不错的想法,但是面向对象也有它的优势在里面。不好的一面,也是程序的结构,其实自己还是觉得很乱的,我一直在想原因,今天吃早饭的路上,明白了,因为词法分析没有在做他的本职工作。比如因为在词法分析阶段引入了括号等匹配的判断,原来的结构就得到了破坏,而括号的匹配是语法分析器根据文法要完成的事情。想起了linux的KISS原则,keep it simple and stupid.专注一个任务就做这个任务。所以下一个阶段,语法分析的时候一定要注意了
----------------------Yui -0.11 update-----------------------------------------------------
开发语言:C89
环境:UNIX cygwin
编译器:gcc
////////
功能:报错
获取token序列
符号表可维护
报错:非法定义词素(标准C89)
{[(/*括号匹配问题(这个功能准备简化掉)
关键字支持:9个
操作符 :30个
常量:字符,整型,浮点
bug:中文,转义字符处理