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

2021-08-19 09:26:58 字數 1839 閱讀 4973

語法分析是編譯過程的核心部分,

主要任務

是在詞法分析識別出單詞符號串的基礎上,分析並判定程式的語法結構是否符合語法規則。

本質是按文法的產生式,識別輸入符號串是否為乙個句子,即判斷能否從文法開始符號出發推導出這個輸入字串。語法分析的過結果是

構造語法樹

,按照語法樹的構造過程可分為

自上而下推導,自下而上規約

。本章主要討論自上而下的推導。 

語法分析器的功能:語法分析是編譯過程的核心部分。它的任務是在詞法分析識別出單詞符號串的基礎上,分析並判定程式的語法結構是否符合語法規則。

ll(1) 分析法:ll:l:left->right掃瞄;l:最左推導。

消除直接左遞迴:

設有產生式   p→pα|β        (1)

其中β不以p開頭,α不為ε。那麼,我們可以把p的規則改為如下的非直接左遞迴形式:

p→βp』

p』→αp』|ε       (2)

(1)式和(2)式是等價的

消除直接左遞迴方法:

設有產生式    p→pα1|pα2|…|pαm|β1|β2|…|βn      其中每個βi不以p開頭,每個αi不為ε

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

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

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

按任意順序對非終結符排序,p1,p2,p3……,然後作如下工作

for i=1 to  n

消除pi的直接左遞迴;

}

最後,刪除無用(從起始符永遠不能到達)的非終結符的產生式。

消除間接左遞迴方法:

(1) 將間接左遞迴改造為直接左遞迴

將文法中所有如下形式的產生式:

pi →pjγ|β1|β2|…|βn

pj→δ1|δ2|δ3|…|δk

改寫成:

pi →δ1γ|δ2γ|δ3γ|…|δkγ|β1|β2|…|βn

(2)消除直接左遞迴

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

消除p的左遞迴

p→ β1p'| β2p'|...| βnp'

p'→ α1 p'| α2 p'|...|αm p'| ε

(3)化簡改寫後的文法,即去除那些從開始符號出發卻永遠無法到達的非終結符的產生規則。

最終得到無左遞迴的文法。

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)中。

下面是這一章的習題:

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

語法分析是編譯過程的核心部分,它的主要作用是根據單詞找出符合語法規則的句子。語法分析通常分為兩類 自上而下分析和自下而上分析。本章介紹前者。自上而下分析的主旨是,對任何乙個輸入串,試圖用一切可能的辦法,從文法的開始符號 根節點 出發,根據文法自上而下地為輸入串建立一棵語法樹,即為輸入串尋找乙個最左推...

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

一 學習內容 本章我們主要學習了語法分析的過程,ll 1 分析法和 分析程式等內容。語法分析是編譯過程的核心部分,它的任務是在詞法分析識別出單詞符號串的基礎上,分析並判定程式的語法結構是否符合語法規則。此處引入是否符合語法規則的判斷方法 從文法的起始符出發進行句子的推導,或者從概念上講,就是要建立一...

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

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