LL 1 文法分析表的構造和分析過程示例

2021-09-24 13:57:54 字數 1370 閱讀 2519

**:

文法:

e→te'

e'→+te'|ε

t→ft '

t'→*ft'|ε

f→id| (e)

文法g的任意兩個具有相同左部的產生式 a --> α|β 滿足下列條件:

1、如果α和β不能同時推導出ε,則first(α)∩first(β) = 空2、 α和β 至多有乙個能推導出 ε

3、如果 β --*--> ε ,則first(α)∩ follow(a)= 空

對於 e'→+te'|ε  ,顯然ε --> ε, first(+te') =  ,follow(e') =  顯然二者交集為空滿足。

對於 f→id|(e)   ,first(id) =   first((e)) =    顯然二者交集為空滿足。

所以該文法是ll(1)文法。

參考:輸入:文法g

輸出:分析表m

步驟:

1、對g中任意乙個產生式 a --> α 執行第2步和第3步

2、for  任意a ∈ first(α),將 a --> α 填入m[a,a]

3、if ε ∈ first(α)  then 任意a ∈ follow(a),將 a --> α 填入m[a,a]

if ε ∈ first(α) &  # ∈follow(a), then 將 a --> α 填入m[a,#]         (覺得這步沒用)

4、將所有沒有定義的m[a,b] 標上出錯標誌   (留空也可以)

過程就不贅述了,結果:

步驟:

1、如果 x = a = #     則分析成功並停機

2、如果 x = a != #      則彈出棧頂符號x, 並將輸入指標移到下乙個符號上

3、如果 x != a,查詢分析表m[x,a] , 如果 m[x,a] = ,則用uvw (u在棧頂) 替換棧頂符號 x。

如果 m[x,a] = error或空,則分析器呼叫錯誤處理程式。

(只有在第2種條件下才將輸入指標移動!!!)

根據上表,對輸入串 「id + id * id」 進行**分析過程如下:

最開始在棧裡壓入 # 和 開始符號 e

LL 1 文法判斷

ll 1 文法判斷 題型 1.判斷該文法是否是ll 1 文法?2.若是,給出它的ll 1 分析表,否則說明理由。概念 對於產生式 a 1.如果 均不能推導出 空語句 則 first first 2.和 至多有乙個能推導出 3.如果 經過0步或多步可以推導出 則 first follow a 關鍵 求...

LL(1)文法解析

一 問題描述 給定上下文無關文法,對其進行解析,得出first集和follow集。在有能力的情況下,可以求出ll 1 分析表。二 演算法設計 本程式主要分成三塊內容,第一是文法的讀入解析,第二是first集的求解,第三為follow集的求解。文法的解析需要根據整行讀入的文法,生成rulelist 表...

LL 1 文法的判斷,遞迴下降分析程式

1.文法 g s 1 s ab 2 a da 3 b cc 4 c aadc 5 d b 驗證文法 g s 是不是 ll 1 文法?first a first b first c first d first follow a follow b follow c follow d select a d...