編譯原理學習筆記3 1 詞法分析器

2021-10-03 09:24:08 字數 1824 閱讀 7123

詞法分析器的設計

狀態裝換圖的實現

編譯程式首先是在單詞級別上來分析和翻譯源程式的。詞法分析的任務是:從左至右逐個字元地對源程式進行掃瞄,產生乙個個單詞符號,把作為字串的源程式改造成為單詞符號串的中間程式。

因此,詞法分析是編譯的基礎。執行詞法分析的程式稱為詞法分析器

詞法分析器的功能

輸入源程式,輸出單詞符號

這裡的單詞符號指的是乙個程式語言的基本語法符號

可分為以下五種:

詞法分析器輸出的單詞符號常常表示為二元式:

( 單詞

種別,單

詞符號的

屬性值)

(單詞種別,單詞符號的屬性值)

(單詞種別,

單詞符號

的屬性值

)詞類編碼原則:

作為例子考慮下述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等 識別符號用來表示各種...