編譯原理總結

2021-07-05 08:03:17 字數 2122 閱讀 1596

從左至右掃瞄字串行,識別出單詞(關鍵字、標示符、常數、特殊符號)。

按照語言語法的規則,將詞法分析所得的單詞分解為各個語法成分。(分析單詞串是否構成短語和句子)

源程式進行上下文有關性質的檢查,看源程式有無語義錯誤。例如:變數是否定義、型別是否正確

含義明確、便於處理的記號系統。這種記號系統於源程式和機器語言之間,容易將它翻譯成目標**。如三元式、四元式、逆波蘭式等

有區域性優化、迴圈優化和全域性優化。主要方法有**外提、強度削弱、刪除歸納變數等。

針對具體裝置進行彙編優化等。

文法 ①.文法的定義:對語言結構的定義和描述。例如,「the cat ate a house」。

②.文法的組成:

⑴.終結符:用小寫字母表示,記為vt。

⑵.非終結符:用大寫字母表示,記為vn。

⑶.文法規則集合:規則一般表示為:a->a。

乙個形式文法是四元有序組g = (vn, vt, s, p)。其中,s為文法的開始符號,p是規則集。很顯然,見下圖:

舉個例子,設vn=,vt=,s=a,p=。這樣就構成了文法g = (, , a, p)。

③.文法的分類:0型文法,1型文法,2型文法,3型文法。

0型文法:也叫短語結構文法。辨別依據:當有α->β時,左邊α中必須含有非終結符,形如a->β等。

1型文法:也叫上下文有關文法。辨別依據:在0型文法的基礎上,當有α->β時,定有

|α| <= |β|,其中|α| 和|β|分別表示其長度。如有a->ba,則|α|=1,|β|=2符合1型文法要求。反之,如aa->a,則不符合1型文法。

附註:雖然要求|α| <= |β|,但有一特例:α->ε也滿足1型文法。

2型文法:也叫上下文無關文法。辨別依據:在1型文法的基礎上,當有α->β時,α必是非終結符。如a->ba,符合2型文法要求。 如果是aa->ba這樣的形式,那麼就不滿足了,因為aa不是乙個非終結符。

3型文法:也叫正則文法。辨別依據:在2型文法的基礎上需滿足:a->a|ab(右線性)或a->a|ba(左線性)。

由此便可得出四類文法的關係:見下圖

文法的二義性:對於某文法的同乙個句子存在兩種不同的語法樹。如下圖:

由語法樹我們得出句子「i+i*i」是二義性的。

既然文法會出現二義性,那麼怎麼解決二義性呢?辦法有二:修改編譯演算法;修改文法。

1.直接左遞迴的消除

消除產生式中的直接左遞迴是比較容易的。例如假設非終結符p的規則為

p→pα / β

其中,β是不以p開頭的符號串。那麼,我們可以把p的規則改寫為如下的非直接左遞迴形式: p→βp』

p』→αp』 / ε
這兩條規則和原來的規則是等價的,即兩種形式從p推出的符號串是相同的。

2.間接左遞迴的消除

直接左遞迴見諸於表面,利用以上的方法可以很容易將其消除,即把直接左遞迴改寫成直接右遞迴。然而文法表面上不存在左遞迴並不意味著該文法就不存在左遞迴了。有些文法雖然表面上不存在左遞迴,但卻隱藏著左遞迴。例如,設有文法g[s]:

s→qc/ c

q→rb/ b

r→sa/ a

雖不具有左遞迴,但s、q、r都是左遞迴的,因為經過若干次推導有

sqcrbcsabc

qrbsabqcab

rsaqcarbca

就顯現出其左遞迴性了,這就是間接左遞迴文法。

消除間接左遞迴的方法是,把間接左遞迴文法改寫為直接左遞迴文法,然後用消除直接左遞迴的方法改寫文法。

如果乙個文法不含有迴路,即形如pp的推導,也不含有以ε為右部的產生式,那麼就可以採用下述演算法消除文法的所有左遞迴。

編譯原理 總結

一 編譯程式 1 編譯器是一種翻譯程式,它用於將源語言 即用某種程式語言寫成的 程式翻譯為目標語言 即用二進位制數表示的偽機器 寫成的 程式。後者在windows作業系統平台下,其檔案的副檔名通常為.obj。該檔案通常還要經過進一步的連線,生成可執行檔案 機器 寫成的程式,擴充套件名為.exe 通常...

編譯原理 總結

一 編譯程式 1 編譯器是一種翻譯程式,它用於將源語言 即用某種程式語言寫成的 程式翻譯為目標語言 即用二進位制數表示的偽機器 寫成的 程式。後者在windows作業系統平台下,其檔案的副檔名通常為.obj。該檔案通常還要經過進一步的連線,生成可執行檔案 機器 寫成的程式,擴充套件名為.exe 通常...

編譯原理總結

學了一學期的編譯原理,一開始上課的時候,感覺老師嘴裡的概念明明說的那麼順溜,可是到自己這就卡殼了,讓我想起了乙個梗 要考試了,在複習的時候,開啟書,馬冬梅,恩記住了,合上書,什麼冬梅?開啟書,馬冬梅,合上書,馬什麼梅?歸結起來就是書看的少。複習的時候課件認認真真的看了兩遍,現在來梳理一下這門課。上邊...