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

2022-08-31 20:36:13 字數 2605 閱讀 9844

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 ->da)=first(da)=

select(a ->ε)=first(ε)- u follow(a)=

select(a ->da) ∩ select(a ->ε)=≠∅

g(s)不是 ll(1)文法

2.(上次作業)消除左遞迴之後的表示式文法是否是ll(1)文法?

first(te』)=first(t)=

first(t』)=

first(e』)=

first(+te』)=

first(ε)=

first(ft』)=first(f)=

first(*ft』)=

first((e))=

first(i)=

follow(e)=

follow(e』)=follow(e)=

follow(t)=(first(e』)-) u follow(e』)=

follow(t』)=follow(t)=

follow(f)=(first(t』)-) u follow(t』)=

select(e->te') =first(te』)=first(t)=

select(e'->+te') =first(+te』)= 

select(e'->ε) = (first(ε) -) u follow(e') =

select(t->ft') = first(ft』)=first(f)=

select(t'->*ft') = first(*ft')=

select(t'->ε) = first(ε) - u 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 ) = ø

是ll(1)文法

3.接2,如果是ll(1)文法,寫出它的遞迴下降語法分析程式**。

e(){t();

e'();

e'()

t()t'()

f()void parsee(){

switch(lookahead){

case '(','i':

parset();

parsee'();

break;

default:

print("syntax error \n");

exit(0);

void parsee'(){

switch(lookahead){

case '+':

matchtoken('+');

parset();

parsee'();

break;

case ')','#':

break;

default:

print("syntax error \n");

exit(0);

void parset(){ 

switch(lookahead){

case '(','i':

parsef();

parset'();

break;

default:

print("syntax error \n");

exit(0);

void parset'(){

switch(lookahead){

case '*':

matchtoken('*');

parsef();

parset'();

break;

case '+',')','#':

break;

default:

print("syntax error \n");

exit(0);

void parsef(){

switch(lookahead){

case '(':

matchtoken('(');

parsee();

matchtoken(')');

break;

case 'i':

matchtoken('i');

break;

default:

print("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 da follow a select a da first follow c select a first aadc follow d select c a...

編譯原理之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 first first aadc first b follow a first b first d first c follow c follow...

LL 1 文法判斷

ll 1 文法判斷 題型 1.判斷該文法是否是ll 1 文法?2.若是,給出它的ll 1 分析表,否則說明理由。概念 對於產生式 a 1.如果 均不能推導出 空語句 則 first first 2.和 至多有乙個能推導出 3.如果 經過0步或多步可以推導出 則 first follow a 關鍵 求...