【編譯原理】第4章 LL(1)文法及其分析程序

4 LL(1)文法及其分析程序


在這裏插入圖片描述
語法分析任務:在詞法分析識別出單詞符號串的基礎上,分析並判定程序的語法結構是否符合語法規則

分析算法分類(語法分析方法)

  • 自上而下分析法:從文法的開始符號出發,反覆使用各種產生式,尋找與輸入符號匹配的最左推導。
  • 自下而上分析法:從輸入符號串開始,逐步進行歸約(最右推導的逆過程),直至歸約到文法的開始符號。

一、自頂向下分析的問題

自上而下分析過程本質上是一種試探過程,是反覆使用不同產生式謀求匹配輸入串的過程

自上而下語法分析的問題
出現一些產生式左部相同的問題,什麼文法可用確定的自頂向下分析(左遞歸、回溯)
在這裏插入圖片描述

二、LL(1)文法

LL(1):L從左至右掃描 L最左推導 1向右看一個符號

1、FIRST集、FOLLOW集和SELECT集

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

2、LL(1)文法定義

LL(1)文法:所有產生式(左部相同)SELECT集的交集爲空集,則爲LL(1)文法
在這裏插入圖片描述
判斷LL(1)文法步驟
在這裏插入圖片描述
判斷LL(1)文法——例題2
文法G[S]爲:
S → AB | bC
A → ε\varepsilon | b
B → ε\varepsilon | aD
C → AD |b
D → aS | c

1)判斷能否推出 ε\varepsilon

2)求FIRST集
在這裏插入圖片描述
3)求FOLLOW集
在這裏插入圖片描述
4)求SELECT集(凡是左部有相同的)
在這裏插入圖片描述

LL(1)分析程序實現:遞歸子程序、預測分析器

三、非LL(1)文法的改造

對於某些非LL(1)文法→LL(1)文法之間的等價變換
提取左公共因子;消除左遞歸

提取左公共因子
在這裏插入圖片描述
在這裏插入圖片描述
消除左遞歸
在這裏插入圖片描述
在這裏插入圖片描述

四、判斷LL(1)文法的充要條件

LL(1)文法不確定的因素有3個:①存在左公共因子 ②存在左遞歸 ③A→ε\varepsilon
當無左公共因子、左遞歸和A→ε\varepsilon 時,則爲LL(1)文法,即LL(1)文法的充要條件是:
①無左公共因子 ②無左遞歸 ③無A→ε\varepsilon

bingo~   ✨ 每個人的心中都應該是整個世界

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章