- 編譯系統透視:圖解編譯原理
- 新設計團隊
- 430字
- 2019-01-04 03:30:37
2.4 GCC實現詞法分析的源代碼
2.4.1 詞法分析源代碼總覽
狀態轉換圖體現出來的規則最終要落實在GCC源代碼中。我們先來總覽GCC源代碼中詞法分析的部分程序調用架構圖,如圖2-41所示。

圖2-41 詞法分析函數調用圖
狀態轉換圖的指導思想主要體現在架構圖中_cpp_lex_direct函數和cpp_classify_number函數部分,其中_cpp_lex_direct函數完成了所有符號的識別,從初始狀態到終態都是在這里完成的;數字的識別相對比較復雜,_cpp_lex_direct函數在識別到數字后,先將其存下來,然后在cpp_classify_number函數中詳細甄別數字的具體類型和屬性。除了這兩個函數外,其他的部分,有些用來做預處理(我們會在第8章詳細介紹預處理),另外一些則偏重于工程處理,比如符號識別出來后存儲在哪里等。下面我們著重看這兩個核心函數的處理過程。
_cpp_lex_direct函數對源代碼進行遍歷分析,我們先來總體了解此函數。
進入起始狀態的代碼如下所示:
//代碼路徑:libcpp/lex.c: cpp_token * _cpp_lex_direct (cpp_reader *pfile) { …… fresh_line: // 跳轉到下一行繼續分析字符串 …… buffer = pfile->buffer; // 字符串都存儲在buffer中,這里是準備獲取字符 …… skipped_white: // 跳過空白繼續分析字符 …… c = *buffer->cur++; // cur指向的是當前正在分析的字符,cur指向下一個字符 …… }
之后開始分析符號。
推薦閱讀
- Advanced Machine Learning with Python
- Bootstrap Site Blueprints Volume II
- Mastering Python High Performance
- 深入淺出DPDK
- The Complete Coding Interview Guide in Java
- Spring快速入門
- Node.js全程實例
- Angular開發入門與實戰
- SSH框架企業級應用實戰
- DevOps 精要:業務視角
- Flask開發Web搜索引擎入門與實戰
- Tkinter GUI Application Development Blueprints
- VMware vRealize Orchestrator Essentials
- PyTorch生成對抗網絡編程
- Learning Ext JS(Fourth Edition)