學(xué)習(xí)編譯原理Time01 ~ 詞法分析
為了將一個程序從一種語言翻譯成另一種語言,編譯器必須首先把程序的各種成分拆開,并搞清其結(jié)構(gòu)和含義,然后再用另一種方式把這些成分組合起來。編譯器的前端執(zhí)行分析,后端進(jìn)行合成。
分析一般分為以下3種:
詞法分析:將輸入分解成一個個獨立的詞法符號,即“單詞符號” ( token),簡稱單詞。
語法分析:分析程序的短語結(jié)構(gòu)。
語義分析:推算程序的含義。
詞法分析器以字符流作為輸入,生成一系列的名字、關(guān)鍵字和標(biāo)點符號,同時拋棄單詞之間的空白符和注釋。程序中每一點都有可能出現(xiàn)空白符和注釋;如果讓語法分析器來處理它們就會使得語法分析過于復(fù)雜,這便是將詞法分析從語法分析中分離出去的主要原因。
詞法分析并不很復(fù)雜,但是我們卻使用能力強(qiáng)大的形式化方法和工具來實現(xiàn)它,因為類似的形式化方法對語法分析研究很有幫助,并且類似的工具還可以應(yīng)用于編譯器以外的其他領(lǐng)域。

詞法分析器是編譯器中與源程序直接接觸的部分,因此詞法分析器可以做諸如
1). 去掉注釋,自動生成文檔(c語音中的//注釋)
2). 提供錯誤位置(可以通過記錄行號來提供),當(dāng)字符流變成詞法記號流以后,就沒有了行的概念
3). 完成預(yù)處理,比如宏定義

詞法分析的主要任務(wù)
從左向右逐行掃描源程序的字符,識別出各個單詞,確定單詞的類型。將識別出的單詞轉(zhuǎn)換成統(tǒng)一的機(jī)內(nèi)表示——單詞符號(token)形式:
token:<種別碼,屬性值>
| 單詞類型 | 種別 | 種別碼 | |
| 1 | 關(guān)鍵詞 | if、else、while、... | 一詞一碼 |
| 2 | 標(biāo)識符 | 變量名、數(shù)組名、函數(shù)名、... | 多次一碼 |
| 3 | 常量 | 整型、浮點型、字符型、.... | 一型一碼 |
4 | 運算符 | 算術(shù)(+ - / * ++ --) 關(guān)系(> < == != >= <=) 邏輯(& | ~) | 一詞一碼 或 一型一碼 |
| 5 | 界限符 | ; ( ) = { } ... | 一詞一碼 |
示例:詞法分析后得到的token序列
輸入:
while(value != 100){num++;}
輸出(藍(lán)字部分):
while <WHILE, - >
( <SLP , - >
value < IDN , value >
!= < NE , - >
100 < CONST , 100>
) < SRP , - >
{ < LP , - >
num < IDN, num >
++ < INC , - >
; < SEMI , - >
} < RP , - >

小浩筆記

