第四章 語法分析 自上而下分析

2021-08-19 07:39:50 字數 3255 閱讀 1998

上一章學習的是詞法分析,用正規式描述了單詞符號的結構,用有限自動機構造詞法分析器。但正規式描述能力是有限的,上下文無關文法適用範圍更廣一些,是語法分析的基礎。語法分析辦法分為兩類,一類是自上而下分析法,另一類是自下而上分析法。這一章學習的是自上而下分析法,主要內容是如何消除左遞迴(直接左遞迴和非直接左遞迴)、尋找產生式的first和follow集,學會判斷所給出的文法是不是ll(1)文法,以及構造相應的語法分析表等問題。

主要知識點概括:

自上而下分析面臨的問題1、文法的

左遞迴問題

2、

回溯的不確定性,要求我們將已經完成工作推倒從來,

3、虛假匹配的問題

4、不能準確地確定輸入串中出錯的位置

5、效率低

左遞迴問題的解決

假設原式為

p→pα|β

可以將p的規則改寫為如下非直接左遞迴形式:

p→βp'

p'→αp'|ε

first集:

令文法g是不含左遞迴的文法,對g的非終結符的候選α,定義它的開始符號(終結首符)集合:

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

具體做法:

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

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

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

不帶回溯的自上而下分析的文法條件(ll(1)文法)

(1)文法不含

左遞迴(2)對於文法中每乙個非終結符a的各個產生式的候選式的first集

兩兩不相交

。即,若

a→α1|α2|…|αn

first(αi)∩first(αj)=φ (i≠j)

(3)對於文法中的每個非終結符a,若它的某個候選首符集包含ε,則

first(a)∩follow(a)=φ

如果乙個文法

g滿足以上條件,則稱該文法為ll(1)文法。

這裡,ll(1)中的第1個l代表從左到右掃瞄輸入串,第2個l代表最左推導,1表示分析時每一步只看1個符號。

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

1、

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

2、

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

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

3、

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

課後習題分析

習題一

這道題比較簡單,但是包含本章學習的主要內容的應用。第一小題消除左遞迴,直接套公式。

第二小題先找出first集和follow集。first集的定義比較好理解,直接按照定義可以很輕鬆的找出,主要是follow集的定義比較難理解,具體做法如下:

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

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

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

看起來還是比較抽象,需要借助例題去理解和掌握,記住b後邊有沒有內容分別使用不同的方法。

然後根據ll(1)文法條件判斷是否為ll(1)文法,對於這道題可以直接看出是ll(1)文法,複雜的就需要比較first集和follow集去判斷了。

first集和follow集找出來,只要理解了定義,**分析表就比較容易寫出來了。

習題二

這道題雖然看起來比較複雜,但步驟和例題一是一樣的。需要注意的是在求first集的時候需要先求後邊的first集,並不一定會按順序求。

第四章 語法分析 自上而下分析

為了判斷乙個輸入串是否符合語法規則,有自上而下的的分析,即從文法的起始符出發進行句子的推導。也有自下而上的規約,即從句子本身出發,進行歸約,看能否把句子規約為到起始符。這一章主要講述的是自上而下的推導。但是乙個文法可能會存在左遞迴,回溯,虛假匹配等等的問題,就會影響推導的效率,浪費大量的精力與時間,...

第四章 語法分析 自上而下的分析

一.本章重點 分析的程式。二.1 如何判斷乙個輸入串是否符合語法規則?1.從文法的起始符出發進行句子的推導,即自上而下的分析 2.從句子本身出發,進行歸約,看能否把句子規約為到起始符,即自下而上的規約 2 基本思想 對任何乙個輸入串,試圖用一切可能的辦法,從文法的開始符號 根節點 出發,根據文法自上...

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

一 感受及總結 語法分析是編譯過程的核心部分,語言的語法結構是用上下文無關描述的。因為自上而下分析可能會存在兩大問題,左遞迴和回溯,所以產生了消除左遞迴和克服回溯的方法 ll 1 分析法。使用ll 1 分析法要涉及first集和follow集,這是重點。當乙個文法滿足ll 1 條件時,就可以構造遞迴...