1. 文法 g(s):
(1)s -> ab
(2)a ->da|ε
(3)b -> cc
(4)c -> aadc |ε
(5)d -> b|ε
驗證文法 g(s)是不是 ll(1)文法?
select(a -> da) = first(da) =
select(a -> ε) = (follow(ε)-)∪follow(a) =
select(c -> aadc) = first(aadc) =
select(c -> ε) = (follow(ε)-)∪follow(c) =
select(d -> b) = first(b) =
select(d -> ε) = (follow(ε)-)∪follow(d) =
∵select(a -> da) ∩ select(a -> ε) ≠ ∅
select(c -> aadc) ∩ select(c -> ε) = ∅
select(d -> b) ∩ select(d -> ε) = ∅
∴文法g(s)不是ll(1)文法。
2.文法消除左遞迴之後的表示式文法是否是ll(1)文法?
g(s)消除左遞迴後文法g『(s):
e -> te'
e' -> +te'|ε
t -> ft'
t' -> *ft'|ε
f -> (e) | i
select(e' -> +te') = first(+te') =
select(e' -> ε) = (first(ε)-)∪follow(e') =
select(t' -> *ft') = first(*ft') =
select(t' -> ε) = (first(ε)-)∪follow(t') =
select(f -> (e)) = first((e)) =
select(f -> i ) = first(i) =
∵select(e' -> +te') ∩ select(e' -> ε) = ∅
select(t' -> *ft') ∩ select(t' -> ε) = ∅
select(f -> (e)) ∩ select(f -> i ) = ∅
∴ 文法g『(s)是ll(1)文法。
3.接2,如果是ll(1)文法,寫出它的遞迴下降語法分析程式**。
void parsee()
void paresee'()
}void parset()
}void parset'()
}void parsef()
}
4.加上實驗一的詞法分析程式,形成可執行的語法分析程式,分析任意輸入的符號串是不是合法的表示式。
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...
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 da follow a select a da first follow c select a first aadc follow d select c a...
LL 1 文法判斷
ll 1 文法判斷 題型 1.判斷該文法是否是ll 1 文法?2.若是,給出它的ll 1 分析表,否則說明理由。概念 對於產生式 a 1.如果 均不能推導出 空語句 則 first first 2.和 至多有乙個能推導出 3.如果 經過0步或多步可以推導出 則 first follow a 關鍵 求...