詞法分析器的設計
狀態裝換圖的實現
編譯程式首先是在單詞級別上來分析和翻譯源程式的。詞法分析的任務是:從左至右逐個字元地對源程式進行掃瞄,產生乙個個單詞符號,把作為字串的源程式改造成為單詞符號串的中間程式。
因此,詞法分析是編譯的基礎。執行詞法分析的程式稱為詞法分析器。
詞法分析器的功能
輸入源程式,輸出單詞符號。
這裡的單詞符號指的是乙個程式語言的基本語法符號可分為以下五種:
詞法分析器輸出的單詞符號常常表示為二元式:
( 單詞
種別,單
詞符號的
屬性值)
(單詞種別,單詞符號的屬性值)
(單詞種別,
單詞符號
的屬性值
)詞類編碼原則:
作為例子考慮下述c++**段:
while (i>=j) i- -;
經詞法分析器處理後,它將轉換的單詞符號串行:
< while, - >
< ( , - >
< id ,指向i的符號表項的指標 〉
< >= , - >
< id ,指向j的符號表項的指標》
< ) , - >
< id ,指向i的符號表項的指標 >
< - - , - >
< ; , - >
詞法分析器於語法分析器的協作
詞法分析器的結構大致如下
輸入、預處理
單詞符號的識別:超前搜尋
超前搜尋:超前掃瞄許多個字元,超前到能夠肯定詞性為止。
狀態轉換圖
狀態轉換圖是一張有限方向圖
乙個狀態轉換圖可用於識別(或接受)一定的字串
終態結上打星號表示多讀進乙個不屬於識別符號的字元,應退回給輸入串。幾點重要限制——不必使用超前搜尋
即do99k=1,10要寫成思想:每個狀態結對應一小段程式do 99 k=1,10
做法:
對不含迴路的分叉結,可用乙個case語句或一組if-then-else語句實現
乙個例子
getchar( );
if (isletter( ))
else if (isdigit( ))
else if (ch=『/』)
else
對含迴路的狀態結,可對應一段由while結構和if語句構成的程式
…狀態j的對應程式段…
終態結表示識別出某種單詞符號,因此,對應語句為
return (c,val)
其中,c為單詞種別,val為單詞自身值. 編譯原理 詞法分析器
1 從源程式檔案中讀入字元。2 統計行數和列數用於錯誤單詞的定位。3 刪除空格類字元,包括回車 製表符空格。4 按拼寫單詞,並用 內碼,屬性 二元式表示。屬性值 token 的機內表示 5 如果發現錯誤則報告出錯 6 根據需要是否填寫識別符號表供以後各階段使用 int tag 0 設立標誌 一開始本...
編譯原理,例 詞法分析器
編譯原理課作業要求自己寫乙個詞法分析器,我嘗試寫了一下。詞法分析 電腦科學中將字串行轉換為單詞 token 序列的過程。進行詞法分析的程式或者函式叫作詞法分析器 lexical analyzer 也叫掃瞄器 scanner 詞法分析器一般以函式的形式存在,供語法分析器呼叫。完成詞法分析任務的程式稱為...
編譯原理(一)詞法分析器
詞法分析器的功能是輸入源程式,輸出單詞符號。單詞符號是乙個程式語言的基本語法符號。程式語言的符號一般可以定義為以下幾種 關鍵字 是由程式語言定義的具有固定意義的識別符號,也稱這些識別符號為保留字或基本字。例如 c 語言中的define do for while if else等 識別符號用來表示各種...