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

2021-08-19 09:53:39 字數 1675 閱讀 9146

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

一.知識點

1.語法分析器的功能

語法分析器任務:分析並判定程式的語法結構是否符合語法規則。

語法分析辦法:自上而下分析法,自下而上分析法。

2.自上而下面臨的問題

①文法的左遞迴問題

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

③虛假匹配的問題

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

⑤效率低

3.消除左遞迴的公式:

設有產生式

p→pα1|pα2|…|pαm|β1|β2|…|βn

其中每個βi不以p開頭,每個αi不為ε

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

p→β1p』|β2p』|…|βnp』

p』→α1p』| α2p』|…|αmp』| ε

4.first集:

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

特別地,如果α   ε,則ε∈first(α)如果非終結符a的任意兩個候選式αi和αj的開始符號集滿足first(αi)∩first(αj)=φ,則a可以根據所面臨的第乙個輸入符號,準確地指派乙個候選式α去執行任務,α是那個first集含a的候選式,即  a ∈first(α)

5.follow集

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

特別地,如果s   …a,則#∈follow(a),follow(a)集合是所有句型中出現在緊接a之後的終結符號或#所組成的集合,當非終結符a面臨輸入符號a,且a不屬於a的任意候選式的first集但a的某個候選式的first集包含ε時,只有當a ∈follow(a),才可能允許a自動匹配

6.不帶回溯的自上而下分析的文法條件(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個符號)

7.**分析程式

二.典型例題

first,follow集

三.總結

現在學習編譯原理的難度越來越大,難懂而且比較容易忘,如果課下不預習,不複習就趕不上老師的進度。這一章中,我感覺學習follow集的時候遇到了一點困難,所以我把first,follow集寫下來。文法的分析很重要,一定得打好基礎。

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

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

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

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

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

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