編譯原理->詞法分析器的分析

今天要說的是詞法分析器。
首先讓我們對詞法分析器有個基本的瞭解:
  一、 
  詞法分析程序的主要任務 從左到右掃描每行源程序,拼成單詞,換成統一的內部表示(token)輸出,送給語法分析器進行分析。
  二、詞法分析器功能:輸入源程序,輸出單詞符號,其中詞法分析器的單詞符號常常表示成二元組的形式(單詞種別碼,單詞符號的屬性值)。

三、下來就部分單詞的BNF表示羅列如下:

<標識符>  -><字母><字母數字串>
<字母數字串>  -><字母><字母數字串>|<數字><字母數字串>|<下劃線><字母數字串>|ε
<無符號整數> -><數字><數字串>
<數字串> -><數字><數字串>|ε
<加法運算符>  ->+
<減法運算符> -> -
<大於關係運算符> -> >
<大於等於關係運算符
> -> >=
四、然後對於詞法分析器來說,我們就是要將對象語言的語法全部描述出來,下面就以C語言爲例來說明問題:
(1)關鍵字:
main if else int return void while ...所有的關鍵字都是小寫。
(2)專用符號
= + - * / <= >= >  == != ; : , { } [ ] ( )
(3)空白和空格、製表符和換行符
空格一般用來分隔ID、NUM、專用符號和關鍵字,在詞法分析階段通常被忽略。
五、“超前搜索”方法
 詞法分析時,常常會遇到超前搜索方法。如當前待運算分析的字符串爲“a>+”當前字符爲“>”,此時,分析器到底是將其分析爲大於關係運算符還是大於等於關係運算符呢?顯然,只有知道下一個字符是什麼才能夠給出特定的結論。於是分析器讀入下一個字符’+‘,這時可知應將’>‘解釋爲大於運算符。但此時,超前讀了一個字符’+‘,所以要回退一個字符,詞法分析器才能夠運行。

接下來,面對一個問題就是,既然已經知道了具體的細節,下面要做的就是如何用代碼實現呢?
請看下面這圖:

這是我在實現詞法分析器過程中的主要流程圖,根據讀出的字符是何種類型進行操作,然後具體問題具體分析。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章