語法分析
---自上而下分析
面臨的問題:
左遞迴性問題
例如: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次冪 ...