(原創)自頂向下分析法 遞迴下降分析程式構造

2022-05-04 02:39:11 字數 1579 閱讀 6038

/*題目:自頂向下分析法(遞迴下降分析程式構造)
*開發環境:vc6.0

*/#include#include//全域性變數

char exp[30],gra[30],prod[30]="",chexp='#';

int expsize=0,grasize=0,step=0;

//函式宣告

/*(1)e->tg

(2)g->+tg|-tg|ε

(3)t->fs

(4)s->*fs|/fs|ε

(5)f->(e)|i

*/int e();

int t();

int g();

int s();

int f();

//功能函式實現

/*列印文法*/

void printgrammar()

void getexp()

void printhead()

void printstep()

}//語法棧入棧,匹配的語法產生式順序入棧

void pushgrastack(char* ch)

/*(1)e->tg

(2)g->+tg|-tg|ε

(3)t->fs

(4)s->*fs|/fs|ε

(5)f->(e)|i

*/int t()

/*(1)e->tg

(2)g->+tg|-tg|ε

(3)t->fs

(4)s->*fs|/fs|ε

(5)f->(e)|i

*/int g()

; pushgrastack(grag);

strcpy(prod,"g-->");

strcat(prod,grag);

printstep();

popgrastack();

nextchar();

strcpy(prod,"匹配");

printstep();

t();

g();

return 1;

} else }

/*(1)e->tg

(2)g->+tg|-tg|ε

(3)t->fs

(4)s->*fs|/fs|ε

(5)f->(e)|i

*/int f()

else

}else if(chexp=='i')

else }

/*(1)e->tg

(2)g->+tg|-tg|ε

(3)t->fs

(4)s->*fs|/fs|ε

(5)f->(e)|i

*/int s()

; pushgrastack(gras);

strcpy(prod,"s-->");

strcat(prod,gras);

printstep();

popgrastack();

nextchar();

strcpy(prod,"匹配");

printstep();

f();

s();

return 1;

} else }

遞迴下降分析法

4 遞迴下降分析法 遞迴下降分析法是確定的自上而下分析法,這種分析法要求文法是 ll 1 文法。它的基本思想是,對文法中的每個非終結符編寫乙個函式 或子程式 每個函式 或子程式 的功能是識別由該非終結符所表示的語法成分。由於描述語言的文法常常是遞迴定義的,因此相應的這組函式 或子程式 必然以相互遞迴...

語法分析 自頂向下分析

確定的自頂向下分析方法,首先要解決從某文法的開始符號出發,對給定的輸入符號串如何根據當前的輸入符號 單詞符號 唯一地確定選用哪個產生式替換相應非終結符往下推導,或構造一棵相應的語法樹,若能夠推導出給定的輸入符號串,或能構造出語法樹其末端結點以從左向右的順序連線正好為給定的輸入符號串,則所給的輸入符號...

語法分析 自頂向下分析

確定的自頂向下分析方法,首先要解決從某文法的開始符號出發,對給定的輸入符號串如何根據當前的輸入符號 單詞符號 唯一地確定選用哪個產生式替換相應非終結符往下推導,或構造一棵相應的語法樹,若能夠推導出給定的輸入符號串,或能構造出語法樹其末端結點以從左向右的順序連線正好為給定的輸入符號串,則所給的輸入符號...