首先聲明,該系列博文是我學習編譯原理的過程中的記錄,其中主要參考的書籍是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