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

2022-07-09 19:15:10 字數 1588 閱讀 3368

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 關鍵 求...