編譯原理學習.
有時候感覺很無助,迷茫的時候,沒有精神支柱的時候。【自暴自棄】
進入人生低穀的時候,找不到方向的時候, 總會出現一些讓我興奮和受到鼓舞的東西。
在一次次的脫變中,發現自己需要學習的東西還很多,很多... ..
我感覺不經曆一些事情,就不會學會一些事情,不怕你做錯事情,就怕你不肯改錯。
我又接觸詞法分析的另一種詞法分析算法[轉換表],書中如此描述“理解了此算法思想,也就理解了詞法分析器的核心”.
仔細看了30分鍾,反複琢磨,終於理解了此算法的真諦,讓我狠高興,很興奮,在編程的學習道路又燃起了一點星星之火.
下麵是我學習一本編譯原理書籍做的筆記,我感覺這本書籍比龍書和編譯原理及實踐要通俗很多,適合我這樣智商不高的人看。
單詞存儲三元組【單詞ID,單詞備注,單詞行號】
單詞行號:單詞所在的源程序文件名,單詞在源程序文件中得行號。
單詞可分為三類:標識符,常量,係統單詞。
標識符(標識符的ID,用戶標識符名,單詞行號):所有用戶標識符使用同一ID,
而在“單詞備注”域中存儲用戶標識符的實際名字。
常量(常量的ID,在常量表中的位置,單詞行號):常量ID是根據常量類型確定的,
即相同數據類型的常量的ID是相同的。在詞法分析階段,隻將常量分為整型,實型,字符串
等類型,無須詳細區別是哪種詳細類型(例如:integer, shortint等)。常量ID可用於指示常量數據類
型。在詞法分析時,對識別所得到的常量還必須登錄入常量表,便於語法分析使用。在常量
的三元組中必須記錄該常量在常量表的位置。
係統單詞“即關鍵字,運算符,界符”(ID,不使用,單詞行號):每一個係統單詞都
擁有一個唯一的ID編號。語法分析器隻需根據ID就可以區別是哪個係統單詞了。而係統單詞的
單詞存儲三元組中“單詞備注”域是不使用的。不難發現,詞法分析器對於關鍵字,運算符,
界符單詞的處理是完全相同的。因此,這三類合並為係統單詞類。
詞法分析【一個獨立階段,獨立的一遍】:
一個獨立階段:就是指將詞法分析器作為一個函數,由語法分析器調用。
每次調用語法分析器隻識別一個單詞,然後將單詞直接傳遞給語法給語法
分析器。整個過程由語法分析器控製,在語法分析過程中,進行單詞識別。
獨立的一遍:詞法分析器將整個源程序文件掃描一次,識別出所有的單詞,然後將源程序
以單詞流的方式傳遞給語法分析器處理。
詞法分析器主要包括:構造轉換圖與轉換表,設計詞法分析器算法,
詞法分析器的核心就是依據轉換圖識別單詞。
數據結構: 轉換表,關鍵字表,常量表及其單詞流。
1.轉換表:是詞法分析器的核心。通常用二維數組表示,數組元素可以
根據實際情況而定。
2.關鍵字表:詞法定義識別單詞。完成標識符後再查找關鍵字表,確定該標識符是否為關鍵字。
關鍵字表一般包含兩個字段:關鍵字名,ID。由於每次都要查找關鍵字表,所以查找的效率至關重要,
常用的查找算法比較多【順序,折半,哈希表,B-樹,B+樹等】,MAP是內核中得一種紅黑樹結構,
查找效率近似於哈希表,屬於比較高校的。
3.單詞流:
struct Token
{
int ... //單詞類型,ID。
string .... //單詞備注
LineInfo ... //單詞行號信息
}
struct LineInfo
{
int .... //單詞所在行號
string ... //單詞所在的源程序文件名
}
最後更新:2017-04-02 15:14:53