編譯原理學習筆記 自上而下分析

2021-07-31 17:23:17 字數 1701 閱讀 4809

語法分析

---自上而下分析

面臨的問題:

左遞迴性問題

例如:p→pa

如果存在非終結符p含有左遞迴的文法將上述自上而下的分析過程陷入無限迴圈

回溯???

ll(0)

分析法

左遞迴的消除p→

pα|β

改寫為p

→β p』 p』

→ αp』 | ε

消除左遞迴的做法:

把文法g的所有非終結符按人一種順序排列成p1,p2……pn,按此順序執行;

for  i:=1  to  n  do

begin

for   j:=1   to  i-1  do

把形如pi→pjγ的規則改寫成

pi→δ1γ|δ2γ|………|δkγ。其中pj→δ1|δ2|…….| δk是關於pj的所有規則;

消除關於pj規則的直接左遞迴性

end化簡由(2)所得的文法。即去除那些從開始符號出發永遠無法到達的非終結符的產生規則。

(其實就是先展開再消除左遞迴)

消除回溯,提左因子

消除回溯的實質就是為了減少回溯所造成的不必要的資源浪費

方法有 提取公共左因子.

a→δβ

1|δβ

2|…………|

δβn|γ1|

γ2|………|γm

改寫為:a→δ

a』|γ1|γ

2|………|γm

a』→ β1|

β2|……|βn

ll(1)

文法的判斷:

文法不含有左遞迴

對於文法中的每乙個非終結符a的各個產生式的候選首符集兩兩不相交。即,若

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

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

對於文法中的每乙個非終結符a,若它存在某個候選首符集包含ε,則first(a) ∩ follow(a) = φ

遞迴下降分析程式

**分析程式:

**分析表的構建:

首先求出各個非終結符的

first

和follow。

對文法g的每個產生式a→α執行第二步和第三步;

對每個終結符a∈first(α),把a→α加至m[a,a]中;

若ε∈first(α),則對任何b∈follow(a)把a→α加至m[a,b]中;

把所有無定義的m[a,a]標上」出錯標誌「。

理解:先求出各個非終結符號的

first

和follow;

然後畫陣列,行為終結符,列為非終結符;

對應上下圖可以看出:

先根據各個非終結符的

first

填寫陣列 然後

first

中含有ε的,根據其

follow填寫

然後利用分析表進行**分析:

編譯原理筆記8 自上而下語法分析

1.自上而下分析法的一般問題。1 自上而下語法分析定義 從文法的開始符號開始,反覆使用不同產生式進行推導以謀求與輸入符號串相匹配。注 此處的輸入符號串是指詞法分析結果的一串二元式。2 一般方法 a 基本構成 設下推棧的初始狀態包括兩個符號 s 其中 為棧底,s 為文法開始符號。整個分析過程在語法分析...

編譯原理學習筆記 語法

高階程式語言可分為 1.強制性語言 2.作用時語言 3.基於規則的語言 4.物件導向的語言 程式語言主要由語法,語義,語用 語用 有關程式設計和語言成分的使用方法,它使語言的基本概念與外界的語言 如數學概念或計算機的物件和操作 聯絡起來。語法 語法是指這樣的一組規則,用它可以形成和產生乙個合式的程式...

編譯原理學習筆記(二)

1 字母表 字母表 符號 字母 數字 標點符號 例 二進位制字母表,ascii字元表 unicode字符集 2 字母表上的運算 1 字母表的乘積 sigma1 sigma2的乘積 sigma1 sigma2 例 2 字母表的冪運算 字母表的n次冪運算是常速為n的符號串構成的集合 sigma的0次冪 ...