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

2022-08-21 03:30:13 字數 1718 閱讀 4972

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...