編譯器的結構 詞法分析

2021-08-13 08:30:18 字數 848 閱讀 7592

編譯器的第乙個步驟成為詞法分析或掃瞄。詞法分析器讀入組成源程式的字元流,並且把他們組織成為有意義的詞素的序列。對於每個詞素,詞法分析器產生如下形式的詞法單元(token)作為輸出:

《名稱,值》

這個詞法單元被傳送給下乙個步驟,即語法分析。在這個詞法單元中,第乙個分量token-name是乙個由語法分析步驟使用的抽象符號,第二個分量attribute-value指向符號表中關於這個詞法單元的條目。符號表條目的資訊會被語義分析和**生成步驟使用。

比如,假設乙個源程式包含如下的賦值語句

position = initial + rate * 60;

這個賦值語句中的字元可以組成如下詞素,並對映成詞法單元。這些詞法單元將被傳遞給語法分析階段。

position是乙個詞素,被對映成詞法單元,id是表示識別符號的抽象符號,1指向符號表中position對應的條目。乙個識別符號對應的符號表條目存放該識別符號有關的資訊,比如它的名字和型別。

賦值符號=是乙個詞素,被對映成詞法單元<=>。因為這個詞法單元不需要屬性值,所以我們省略第二個分量。

initial被對映為。

+被對映為。

rate被對映為。

*被對映為。

60被對映為<60>。(技術上講,應該對映為,後續討論)

;被對映為

分隔詞素的空格會被詞法分析器忽略掉。

詞法分析後,上述賦值語句被表示為如下詞法單元序列:

<=> <60>

=,+,*分別是表示賦值,加法運算,乘法運算的抽象符號。

編譯器 詞法分析

總結 詞法分析 字串流 mov sum,x 執行加法運算 單詞流 mov sum,x 屬性字流 token type instr token type ident token type comma token type ident語法分析token currtoken getnexttoken 從屬...

編譯器設計 詞法分析

通過python實現了乙個能夠識別單詞的程式,單詞定義為 以字母開頭的任意數字和字母的組合 1.re模組 定義字母和數字pattern,通過match對字元進行匹配 2.enum模組 用來定義識別單詞過程中的狀態,這裡定義了 初始態過程態 完成態錯誤態 開始識別單詞 已經識別單詞的一部分 識別到乙個...

編譯器之詞法分析

最近我們在做乙個有關snl語言的編譯器,下面寫了一下大概流程 詞法分析器是編譯過程的第一階段,功能是 1.對以字串形式輸入的源程式 這裡是把源程式從檔案讀出,也可以在控制台輸入 按順序進行掃瞄,根據snl語言的詞法規則識別具有獨立意義的單詞 符號 序列,如保留字 由語言系統自身定義的,通常是由字母組...