首先声明,该系列博文是我学习编译原理的过程中的记录,其中主要参考的书籍是Allen I Holub的Compiler design in C.
首先对该书作者表示感谢,像龙书,虎书,鲸书这基本书太过高深,阅读理解核心思想还可以,但离自己动手编写实际的代码还是有距离的,我觉得代码这种东西还是自己写出来才算是真正有意义的,于是动手改写随书代码(原书是C版本,自己尝试改为Java版本)并对编译器整体结构进行了拆分,以求梳理出清晰的线路,以便自己真正理解并在以后可以回想起来,以上就是我学习的初衷。
按原书籍的组织结构,也是分为词法分析器生成器(LEX)、语法分析器生成器(YACC)来完成,先放一张最近梳理的词法分析器的结构图吧,后续还会继续深入。
图是用思维导图freeplane画出来的,实在太大,分成几块来看吧。
图一 词法分析器整体图
图二 输入缓冲区结构图
图三 词法分析器生成器结构图
图四 不确定有限自动机结构图
图五确定有限自动机结构图
图六 分析器生成图
图七 模板文件图
附上目前项目的代码:
编译器生成程序Compiler:https://github.com/9527hello/Compiler
C的编译器CCompiler:https://github.com/9527hello/CCompiler