閱讀635 返回首頁    go 阿裏雲 go 技術社區[雲棲]


編譯原理學習.

有時候感覺很無助,迷茫的時候,沒有精神支柱的時候。【自暴自棄】
進入人生低穀的時候,找不到方向的時候, 總會出現一些讓我興奮和受到鼓舞的東西。
在一次次的脫變中,發現自己需要學習的東西還很多,很多... ..

我感覺不經曆一些事情,就不會學會一些事情,不怕你做錯事情,就怕你不肯改錯。

我又接觸詞法分析的另一種詞法分析算法[轉換表],書中如此描述“理解了此算法思想,也就理解了詞法分析器的核心”.

仔細看了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

  上一篇:go “寬帶中國”戰略下的駐地網建設
  下一篇:go 再說Oracle Listener動靜態注冊