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( a) =
select( c -> aadc) = first( aadc) =
select( c -> ε) = follow(c) =
select( d -> b) = first(b) =
select( d -> ε ) =follow(d) =
因為select( a -> da) ∩ select( a -> ε) = ≠ ∅
所以,文法g(s)不是 ll(1)文法
2.(上次作業)消除左遞迴之後的表示式文法是否是ll(1)文法?
select(e' -> +te') =
select(e' -> ɛ) =
select(t' -> *ft' ) =
select(t' -> ɛ) =
select(f -> (e) ) =
select(f -> i ) =
因為 select(e' -> +te') ∩ select(e' -> ɛ) = ∅
select(t' -> *ft' ) ∩ select(t' -> ɛ) = ∅
select(f -> (e) ) ∩ select(f -> i ) = ∅
所以 消除左遞迴後的文法是 ll(1)文法
3.接2,如果是ll(1)文法,寫出它的遞迴下降語法分析程式**。
void parsee()else else{
printf(「syntax error \n」);
exit(0);
void parset』(){
switch(lookahead){
case 』*』:
matchtoken(』*』);
parsef();
parset』();
break;
case 』+』,』)』,』#』:
break;
default:
printf(「syntax
error \n」);
exit(0);
void parsef(){
switch(lookahead){
case 』(』:
matchtoken(
』(』);
parsee();
matchtoken(』)』 );
break;
case 』i』:
matchtoken(』i』);
break;
default:
printf(「syntax
error \n」);
exit(0);
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...
11 LL 1 文法的判斷,遞迴下降分析程式
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 foll...