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

2021-08-19 02:57:59 字數 3053 閱讀 7521

語法分析是編譯過程的核心部分,這一章我們主要學習了自上而下的分析方法進行語法分析,上一章已經對句法有了一定的了解,下一步就是要學好語法分析,這樣才能夠在後面的學習中部吃力,語法分析也是編譯原理最基礎的部分。我覺得學完這一章我們應該學會如何直接消除左遞迴,尋找產生式的first和follow集,學會判斷所給出的文法是不是ll(1)文法,以及構造相應的語法分析表等問題。我的總結主要分為三部分:概念內容的總結,典型例題分析(給出例題的解決方法,體現對知識的運用),一點感悟。

一.概念內容總結:

1.語法分析的過程:自上而下推導,自下而上規約。

2.語法分析的工作:

1. 從文法的起始符出發進行句子的

推導,即自上而下的分析

2. 從句子本身出發,進行

歸約,看能否把句子規約為到起始符,即自下而上的

規約分析的結果:構造一棵語法樹。

3.自上而下的分析面臨的問題:

1.文法的左遞迴問題

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

3.虛假匹配的問題

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

5.效率低。

4.消除左遞迴的公式:

設有產生式

p→pα

1|pα

2|…|pαm|β

1|β2|…|βn

其中每個βi

不以p開頭,每個αi

不為ε 消除

p的直接左遞迴性就是把這些規則改寫成:

p→β1p』|β

2p』|…|βnp』

p』→α

1p』| α

2p』|…|α

mp』| ε

5.first集:

令文法g是不含左遞迴的文法,對

g的非終結符的候選α

,定義它的開始符號(終結首符)集合:

6.follow集

對文法g

的任何非終結符

a,定義它的後繼符號集合:

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

(1)文法不含左遞迴

(2)對於文法中每乙個非終結符

a的各個產生式的候選式的

first

集兩兩不相交。即,若

a→α1|α2

|…|α

n則 

first(α

i)∩first(αj)=

φ(i≠j

)(3)

對於文法中的每個非終結符

a,若它的某個候選首符集包含ε,則

first(a)∩follow(a)=

φ如果乙個文法

g滿足以上條件,則稱該文法g為

ll(1)文法(

第1個l

代表從左到右掃瞄輸入串,第2個

l代表最左推導,

1表示分析時每一步只看

1個符號

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

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

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

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

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

二.典型例題的分析

題型一:消除文法的左遞迴

思路:1.觀察文法的格式,構造出非終結符直接左遞迴的文法。

2.根據上文中提到的公式對文法進行左遞迴的消除。

3.當非終結符的順尋不一樣時,構造的文法會不同。

題型二:尋找first和follow集

思路:1.first集指的是該非終結符可以推出的第乙個終結符,follow集指的是乙個非終結符可以推出他本身後面有乙個終結符,緊跟的那個終結符,就是它的follow集的元素。

2.查詢的時候一定要仔細,不要漏下。

題型三:判斷文法是否為ll(1)文法:

思路:1.先找出文法的first和follow集。

2.根據不帶回溯的自上而下分析的文法條件,逐一進行驗證即可。

題型四:構造**分析表:

思路:1.找出非終結符的first和follow集。

2.若該非終結符能夠推出對應的終結符,就把該非終結符的表示式寫到對應的終結符下邊。

3.若first集沒有對應的終結符,而這個非終結符能夠推出空字元,那麼如果該非終結符的follow集含有該終結符,則寫在**上。

三.學習感悟

編譯原理的學習難度在逐漸的加大,現在還能跟上老師的進度,但是課後不複習的話,感覺比較容易忘,最好當天學完了就要複習一下,在這一章中,我在找follow集時遇到了一點難度,對定義的理解不是很透徹,所以理解起來比較的困難,後來在同學的幫助下掌握了一定的方法,找起來也就方便多了。文法的分析是乙個比較重要的過程,一定要打好基礎,後面的學習才能夠順利的進行。在以後的學習中一定要加強預習複習,編譯原理是一門比較重要的學科,好多的學校都對編譯原理有一定的要求,所以我覺得學好編譯原理是十分重要的。

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

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

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

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

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

語法分析分為兩部分 自上而下的推導,和自下而上的規約。第四章講述的是自上而下的推導,主要內容包括文法的改造,ll分析和lr分析。語法分析是編譯過程的核心部分,它的任務是在詞法分析識別出單詞符號串的基礎上,分析並判定程式的語法結構是否符合語法規範。它的基本思想是為輸入串尋找乙個最左推導,是乙個反覆使用...