編譯原理第四章學習總結

2021-08-19 08:01:07 字數 2315 閱讀 1248

通過第三章對於正規式及有限自動機等知識內容的學習,我們初步了解了詞法分析器。從而進入第四章——語法分析的學習。在第四章中我們可以了解到語法分析是編譯過程的核心部分,它的任務是在詞法分析識別出單詞符號串的基礎上,分析並判定程式的語法結構是否符合語法規則。地位極高。

一 學習內容

對於語法分析器而言,它的主要工作在本質上就是按文法的產生式識別輸入符號串是否為乙個句子,若按語法分析樹的建立方法來分類的話,我們便可將語法分析辦法粗略的分為兩類,分別是「自上而下分析法」與「自下而上分析法」。

ⅰ在自上而下分析法中,它的主旨其實是為輸入串尋找乙個最左推導。面臨的主要問題如下所示:文法的左遞迴問題 / 回溯的不確定性 / 虛假匹配問題 / 未能準確確定輸入串中出錯位置,同時效率低下。

在此我們簡單引入消除直接左遞迴例題

由於回溯的不確定性,消除回溯的條件中需定義first集

(消除回溯的條件為定義first集合與follow集合 二者分開講述)

ⅱ 定義follow集

對文法g的任何非終結符a,定義它的後繼符號集合

ⅲ ll(1)分析條件

(1)文法不含左遞迴

ⅳ 遞迴下降分析程式構造

/遞迴下降分析器(簡述)

當乙個文法滿足ll(1)條件時,我們就可以為他構造乙個不帶回溯的自上而下分析程式,這個分析程式是由一組遞迴過程而組成的,每個過程對應文法的乙個非終結符。這樣的乙個分析程式稱為遞迴下降分析器。

ⅴ **分析程式

在實現ll(1)中另一種有效方法是使用一張分析表和乙個棧進行聯合控制,在此需掌握的便是對給定文法構造出每個非終結符的first和follow集合。

ll分析程式構造及分析過程:

/組成分為

①分析表

②執行程式(總控程式)

1.把#和文法起始符號e推進棧,並讀入輸入串的第乙個符a,重複下述過程直到正常結束或出錯.

2.測定棧頂符號x和當前輸入符號a,執行如下操作:

(1)若x=a=#,分析成功,停止。e匹配輸入串成功.

(2)若x=a##,把x推出棧,再讀入下乙個符號。

(3)若xev,查分析表m

a) m[x,a]= x-uvw則將x彈出棧,將uvw壓入注  b) m[x,a]= error 轉出錯處理 c)m[x,a]= x-> 8--a為x的後繼符號

則將x彈出棧(不讀下一符號) 繼續分析。

③符號棧(分析棧) 有四種情況

ⅵ ll(1)分析中的錯誤處理

在**分析過程中若出現以下兩種情況,則說明遇到語法錯誤。

①棧頂的終結符與當前的輸入符號不匹配。

②非終結符a處於棧頂,面臨的輸入符號為a,但分析表m中的m{a,a]為空。

二 習題整理及感悟

在本章習題的練習有以下感悟。對於左遞迴的消除,直接左遞迴消除有固定的規則變化,間接左遞迴的消除,需要將每個表示式代入上個表示式,整理出最終表示式之後,再進行直接左遞迴的消除。後面對於ll1文法的學習,其中first和follow集的處理一開始理解起來有難度,尤其是follow集的處理,需要對於每個表示式和follow定義規則進行結合,第二條規則和第三條規則以及first集的靈活運用,才能求出follow集。求出first和follow集之後,構造語法ll1分析表就比較容易了,後面的**分析只要把握好輸入串和棧還有對應規則的結合就能很容易寫出。

三 學習感悟

在第四章的學習中,我們能夠充分感受到這一章節的核心重要性,對於語法分析有了逐漸清晰的了解,我們應該學會怎樣尋找產生式的first集合與follow集合(個人感覺後者有些吃力總是不對)同時還要注意文法的左遞迴、回溯等。進行這章內容學習的時候覺得很難,而且必須要做到提前預習,否則就會一頭霧水並且忘的很快,自己對課程的按時預習和及時複習程度還是差很多,導致做課後習題很慢,需要多加練習

編譯原理第四章課程總結

語法分析的方法主要有 1.自上而下分析方法 a 遞迴下降子程式 b 非遞迴 分析,如ll 1 2.自下向上分析方法 a 算符優先分析b lr分析方法 lr 0 slr 1 lr 1 lalr 一 自上而下分析方法 1 遞迴下降子程式分析方法 a 為每乙個非終結符寫乙個分析過程 b 這些過程可能是遞迴...

讀《編譯原理》第四章

語法分析,121頁 此文是讀書筆記,大部分讀書筆記是不適合他人讀的。語法分析分三種 錯誤恢復策略 恐慌模式的恢復 短語層次的恢復 錯誤產生式 全域性糾正 上下文無關方法 由終結符號,非終結符號,乙個開始符號和一組產生式組成。推導語法分析樹和推導 語法分析樹,是二義性的 ambiguous 大部分語法...

第四章總結

1.對貪心演算法的認識 貪心演算法在求解問題時,不從整體上考慮,而是得到某種意義上的區域性最優解,做出當前看來是最好的選擇。每次的選擇都會依賴之前作出的選擇,而對後面的選擇不會產生影響。它具有最優子結構的性質,即問題的最優解包含其子問題的最優解。但貪心演算法不是對於所有的問題都能得到整體最優解,最重...