遞迴下降子程式
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 ...