**:文法:
e→te'文法g的任意兩個具有相同左部的產生式 a --> α|β 滿足下列條件:e'→+te'|ε
t→ft '
t'→*ft'|ε
f→id| (e)
1、如果α和β不能同時推導出ε,則first(α)∩first(β) = 空2、 α和β 至多有乙個能推導出 ε對於 e'→+te'|ε ,顯然ε --> ε, first(+te') = ,follow(e') = 顯然二者交集為空滿足。3、如果 β --*--> ε ,則first(α)∩ follow(a)= 空
對於 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 = # 則分析成功並停機根據上表,對輸入串 「id + id * id」 進行**分析過程如下:2、如果 x = a != # 則彈出棧頂符號x, 並將輸入指標移到下乙個符號上
3、如果 x != a,查詢分析表m[x,a] , 如果 m[x,a] = ,則用uvw (u在棧頂) 替換棧頂符號 x。
如果 m[x,a] = error或空,則分析器呼叫錯誤處理程式。
(只有在第2種條件下才將輸入指標移動!!!)
最開始在棧裡壓入 # 和 開始符號 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...