遞迴下降子程式

2021-08-20 09:54:17 字數 1853 閱讀 1168

遞迴下降子程式

1、實驗目的

實現遞迴下降子程式的功能。

2、語言描述

利用函式相互遞迴實現遞迴下降子程式的基礎功能。

3、具體實現

#include

#include

#include

#include

#include

using namespace std;

char str[50];//輸入要判斷的字串

int len;//字串長度

int look=0;//記錄下標

bool flag=false;//判斷是否合法

void intput();

void next();

void output();

void e();

void e1();

void t();

void t1();

void f();

int main()

intput();

e();

output();

return 0;

void intput()

printf("文法如下:

\n");

printf("g'[e]:(1) e->te'\n      (2) e'->+te'|ε

\n");

printf("      (3) t->ft'\n      (4) t'->*ft'|ε

\n      (5) f->(e)|i\n");

printf("請輸入要分析的字串(以『

#』號結束):

\n");

for(int i=0;i<50;i++)

scanf("%c",&str[i]);

if(str[i]=='#')

len=i;

break;

printf("\n");

void next()

if(look==len)

exit(0);

else

look++;

void e()

t();

e1();

void e1()

if(str[look]=='+')

next();

t();

e1();

void t()

f();

t1();

void t1()

if(str[look]=='*')

next();

f();

t1();

void f()

if(str[look]=='(')

next();

e();

if(str[look]==')')

next();

else

flag=true;

else if(str[look]=='i')

next();

else

flag=true;

void output()

printf("分析結果:字串

");for(int i=0;iprintf("%c",str[i]);

if(flag==false)

printf("是合法的字串

\n");

else

printf("是非法的字串

\n");

4、實驗截圖

遞迴下降子程式法

1 編寫文法 消除二義性 2 消除左遞迴和提取左因子 改寫文法 3 求非終結符的 first 集和 follow 集 4 檢查是不是 ll 1 文法 若不是 ll 1 說明文法的複雜性超過自頂向下方法的分析能力 5 將 ll 1 文法改寫為 ebnf,並化簡 e t e e t e t f t t ...

編譯原理實驗(三) 遞迴下降子程式

對文法中的每個非終結符 語法成分 編寫乙個子程式,而子程式的 結構由相應非終結符的產生式右部所決定 文法 g e e e t t t t f f f e i 消除左遞迴 g e e te e te t ft t ft f e i 可以通過g e 文法構造遞迴下降分析器 文法g e 無左遞迴,e t ...

遞迴下降分析程式

編譯原理 include include include file fp char sym char buff 100 int left p 0,right p 0 void proc e void proc e1 void proc t void proc t1 void proc f void ...