編譯原理第四章語法分析內容總結

2021-08-19 02:17:35 字數 2397 閱讀 4255

一、學習內容

本章我們主要學習了語法分析的過程,ll(1)分析法和**分析程式等內容。語法分析是編譯過程的核心部分,它的任務是在詞法分析識別出單詞符號串的基礎上,分析並判定程式的語法結構是否符合語法規則。此處引入是否符合語法規則的判斷方法:從文法的起始符出發進行句子的推導,或者從概念上講,就是要建立一顆與輸入串相匹配的語法分析樹,即自上而下的分析;從句子本身出發,進行歸約,看能否把句子規約為到起始符,即自下而上的規約。第四章主要介紹的是自上而下分析法。自上而下分析存在文法的左遞迴問題;回溯的不確定性,要求我們將已經完成工作推倒從來;虛假匹配的問題;不能準確地確定輸入串中出錯的位置;效率低等問題,因此引入ll(1)分析法。

由於自上而下分析方法不允許文法含有任何左遞迴,所以首先要消除文法的左遞迴性,假定關於非終結符p的規則為p→pα|β,可以把p的規則改寫為p→βp』;p』→αp』|ε的非直接左遞迴形式,二者等價。消除回溯需定義first集,令文法g是不含左遞迴的文法,對g的非終結符的候選α,定義它的開始符號(終結首符)集合first(α)=,特別地,如果α→ε,則ε∈first(α)。對文法g的任何非終結符a,定義它的後繼符號集合:follow(a)=,特別地,如果s→…a,則#∈follow(a),當非終結符a面臨輸入符號a,且a不屬於a的任意候選式的first集但a的某個候選式的first集包含ε時,只有當a ∈follow(a),才可能允許a自動匹配。

實現ll(1)分析的另一種有效方式是使用一張分析表和乙個棧進行聯合控制,**分析程式就是屬於這種型別的ll(1)分析器。ll分析程式分析過程有三部分組成:分析表、執行程式 (總控程式)、符號棧 (分析棧),具體的**分析表構造過程步驟在知識運用中具體講解。

二、知識運用

1.執行程式主要實現如下操作:

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

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

①若x=a=#,分析成功,停止。e匹配輸入串成功;

②若x=a≠#,把x推出棧,再讀入下乙個符號;

③若x∈vn,查分析表m

a) m[x,a]= x→uvw 則將x彈出棧,將uvw壓入,u在棧頂(最左推導) ;

b) m[x, a] = error  轉出錯處理;

c)m[x, a] = x-〉ε,a為x的後繼符號,則將x彈出棧(不讀下一符號),繼續分析。

2.**分析表的構造——first(x)

(1)若x終結符,則first(x)=;

(2)若x為非終結符,且有x->a …的產生式,則把a加入到first(x)中;

(3)若x->y…是乙個產生式,且y為非終結符,則把first (y)-ε加入到first(x)中;

(4)若x->y1y2y3….yk,是產生式,y1y2y3….yi-1是非終結符,而且ε屬於first (yj)(1<=j<=i-1),則把first (yj)-ε加入到first(x)中;如果ε屬於所有的first (yj),則ε加入到first(x)中。

3.**分析表的構造——follow(x)

(1)對於文法的開始符,置#於follow(s)中;

(2)若a->αbβ, 則把first (β)-ε加入到follow(b)中;

(3)若a->αb 是乙個產生式,或 a->αbβ是乙個產生式,而β-> ε,則把follow(a)加入到follow(b)中。

4. 對文法g的每個產生式, a->α,進行下面的處理:

(1)對每個終結符a,如果a屬於first(α),則把該產生式寫入到m[a,a];

(2)若ε屬於first(α),則對任何b屬於follow(a), 把該產生式加入到m[a,b];

(3)所有無定義的m[a,a]標上出錯標誌。

三、我的感受

第四章總體感覺難度很大,尤其是**分析程式,**分析表構造中first集相對好寫,follow集很難分析的完全正確,這方面的內容上課老師也進行了重點的講解,但仍有部分不懂的知識靠自己看書理解頗費力,還需加強邏輯思維分析能力。本章的知識運用形式較為固定,題型思想基本一致,通過習題的鍛鍊,我的解題思路逐漸明朗,掌握了基本的解題技巧,解題速度有了較大進步但仍需加強。課程難度的增加提醒我要注意課前預習的重要性,提前對難點有個了解,上課過程中具有針對性的突破難題才是學好課程的核心。

編譯原理第四章總結 語法分析

語法分析是編譯過程的核心部分,主要任務 是在詞法分析識別出單詞符號串的基礎上,分析並判定程式的語法結構是否符合語法規則。本質是按文法的產生式,識別輸入符號串是否為乙個句子,即判斷能否從文法開始符號出發推導出這個輸入字串。語法分析的過結果是 構造語法樹 按照語法樹的構造過程可分為 自上而下推導,自下而...

編譯原理第四章 語法分析(自上而下)

語法分析是編譯過程的核心部分,它的主要作用是根據單詞找出符合語法規則的句子。自上而下分析的主旨是,對任何乙個輸入串,試圖用一切可能的辦法,從文法的開始符號 根節點 出發,根據文法自上而下地為輸入串建立一棵語法樹,即為輸入串尋找乙個最左推導。本質上是一種試探過程,是反覆使用不同產生式謀求匹配輸入串的過...

編譯原理第四章語法分析 自上而下分析內容總結

語法分析是編譯過程的核心部分,這一章我們主要學習了自上而下的分析方法進行語法分析,上一章已經對句法有了一定的了解,下一步就是要學好語法分析,這樣才能夠在後面的學習中部吃力,語法分析也是編譯原理最基礎的部分。我覺得學完這一章我們應該學會如何直接消除左遞迴,尋找產生式的first和follow集,學會判...