語法分析的方法主要有:
1. 自上而下分析方法:
a、遞迴下降子程式
b、非遞迴**分析,如ll(
1)2. 自下向上分析方法:
a、算符優先分析b、
lr分析方法(
lr(0),slr(1),lr(1),lalr)一、
自上而下分析方法
1、遞迴下降子程式分析方法
a) 為每乙個非終結符寫乙個分析過程
b) 這些過程可能是遞迴的
2、非遞迴**分析方法
x是棧頂符號,
a是當前輸入符號
**分析總控程式如下:a、
若x=a=$,
宣告分析成功,並終止。b、
若x=a!=$,
彈出棧頂符號
x,並將輸入指標移至下乙個c、
若x是非終結符,則訪問分析表m的
m[x,a]
項,m[x,a]
項是文法的乙個
x產生式或者出錯資訊。例如,若
m[x,a]=,
則語法分析器用
wvu來代替x(
u在棧頂)。若
m[x,a]=error
,則語法分析器呼叫錯誤處理程式。
由此看來,非遞迴**的方法主要的工作在構造**分析表上。
下面介紹文法
g的**分析表的方法:
• 基礎知識:
first(α)=,
若α=>e(e
表示空),則
e∈first(α)
follow(a)= ,若a
是某句型的最右符號,那麼
$∈follow(a)
演算法:(
1)對文法的每個產生式
a ® a
,執行(2)
和(3)。(
2)對first(a)
的每個終結符a,把
a ® a
加入m[a, a]。(
3)如果e在
first(a)
中,對follow(a)
的每個終結符
b(包括$)
, 把a ® a
加入m[a, b]。(
4)m的其它沒有定義的條目都是
error
。ll(1)
文法---構造出的分析表中沒有多重出口項。ll(1)沒有二義性,也不含左遞迴。
消除間接左遞迴:
(1)將間接左遞迴改造為直接左遞迴
(2)消除直接左遞迴
p→pα1|pα2|...|pαm|β1| β2|...| βn
消除p的左遞迴
p→ β1p'| β2p'|...| βnp'
p'→α1 p'| α2 p'|...|αm p'| ε
(3)化簡改寫後的文法,即去除那些從開始符號出發卻永遠無法到達的非終結符的產生規則。
最終得到無左遞迴的文法。
當乙個文法滿足
ll(1)
條件時,我們就可以構造乙個不帶回溯的自上而下分析程式,這個分析程式由一組(可能的)遞迴程式組成,每個過程對應文法的乙個非終結符。這樣乙個分析程式稱為遞迴下降分析器。
具體做法:
對文法的每乙個非終結符都編乙個分析程式,當根據文法和當時的輸入符號**到要用某個非終結符去匹配輸入串時,就呼叫該非終結符的分析程式。
ll-自左向右掃瞄、自左向右的分析和匹配輸入串。分析過程表現為最左推導的性質。該過程由分析表、總控程式、符號棧三部分組成。由於最左推導,進棧過程是逆序的。
習題:總結:語法分析感覺是最難的一章,first集和follow集總是求錯,還是要多練習多看一下其他的資料。
編譯原理第四章學習總結
通過第三章對於正規式及有限自動機等知識內容的學習,我們初步了解了詞法分析器。從而進入第四章 語法分析的學習。在第四章中我們可以了解到語法分析是編譯過程的核心部分,它的任務是在詞法分析識別出單詞符號串的基礎上,分析並判定程式的語法結構是否符合語法規則。地位極高。一 學習內容 對於語法分析器而言,它的主...
讀《編譯原理》第四章
語法分析,121頁 此文是讀書筆記,大部分讀書筆記是不適合他人讀的。語法分析分三種 錯誤恢復策略 恐慌模式的恢復 短語層次的恢復 錯誤產生式 全域性糾正 上下文無關方法 由終結符號,非終結符號,乙個開始符號和一組產生式組成。推導語法分析樹和推導 語法分析樹,是二義性的 ambiguous 大部分語法...
第四章總結
1.對貪心演算法的認識 貪心演算法在求解問題時,不從整體上考慮,而是得到某種意義上的區域性最優解,做出當前看來是最好的選擇。每次的選擇都會依賴之前作出的選擇,而對後面的選擇不會產生影響。它具有最優子結構的性質,即問題的最優解包含其子問題的最優解。但貪心演算法不是對於所有的問題都能得到整體最優解,最重...