編譯原理學習筆記之自上而下分析Ⅰ
阿新 • • 發佈:2018-12-13
一、自上而下分析法
從根部開始構造語法樹
自上而下分析法不能因為左遞迴存在而陷入死迴圈,不能產生回溯,即每一步推導的產生式必須是唯一的
1.消除左遞迴
左遞迴
形如A->Aa |b ,這種在建立分析樹時一直在左子樹死迴圈,因為推導的結果中最左還是A
或者多個推到式共同作用的間接左遞迴
消除直接左遞迴
如上式最終結果是以b開頭的無數個a的串,因此改寫成
A ->bA‘
A'-> a A’ | e
再比如
A -> A+B | B
B -> int | (A)
產生的語言是B開頭的,無數個+B的串
因此改寫成
A -> BA’
A’-> +BA’|e
B -> int | (A)
對於不涉及的部分直接抄下來就好
消除間接左遞迴
S -> Aa | b
A -> Sd | e
類似於這種,雖然直觀上不存在左遞迴,但是將推導式中的A代入,則出現明顯的左遞迴
對於這種間接左遞迴我們需要先代入推導式轉化為直接左遞迴,然後再消除左遞迴即可
S -> Aa | b
A -> Aad | bd | e
S -> Aa | b
A -> bdA' | A'
A'-> adA' | e
2.提取左因子
有左因子的文法
A ->a b1 | ab2
可以看出產生式中有共同的部分
提取左因子
A -> a A'
A' -> b1 | b2
3.自上而下分析法
基本思想
- 尋找輸入符號串的最左推導
- 試圖根據當前輸入單詞確定使用哪個產生式
基本過程
- 從起始符號S出發,構造輸入串TOKEN的最左推導
- 從根節點開始,根據最左推導相對應的順序,構造輸入符號串的語法分析樹
二、語言和文法
0型文法
0型文法也稱短語文法
0型文法都是遞迴可列舉的,反之,遞迴可列舉集也必定是一個0型文法
1型文法
1型文法也稱上下文有關文法
這種文法對非終結符的替換必須考慮上下文,並且一般不允許換成空串
2型文法
2型文法就是上下文無關文法
非終結符的替換不必考慮上下文
3型文法
3型文法就是正規式