编译原理实验4递归下降分析法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验4《递归下降分析法设计与实现》实验学时: 2 实验地点:实验日期:

一、实验目的

根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。

二、实验内容

程序输入/输出示例(以下仅供参考):

对下列文法,用递归下降分析法对任意输入的符号串进行分析:

(1)E-TG

(2)G-+TG|—TG

(3)G-ε

(4)T-FS

(5)S-*FS|/FS

(6)S-ε

(7)F-(E)

(8)F-i

输出的格式如下:

(3)

备注:输入一符号串如i+i*#,要求输出为“非法的符号串”。

注意:

1.表达式中允许使用运算符(+-*/)、分割符(括号)、字符I,结束符#;

2.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好)。

三、实验方法

用C语言,根据递归下降分析法的规则编写代码,并测试。

四、实验步骤

1.对语法规则有明确的定义;

2.编写的分析程序能够对实验一的结果进行正确的语法分析;

3.对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成

语法分析过程;

五、实验结果

六、实验结论

#include

#include

#include

#include

char a[50],b[50],d[200],e[10];

char ch;

int numOfEq,i1=0,flag=1,n=6;

int E();

int E1();

int T();

int G();

int S();

int F();

void input();

void input1();

void output();

//================================================ void main()/*递归分析*/

{ int foe1,i=0;

char x;

d[0]='E';

d[1]='=';

d[2]='>';

d[3]='?';

d[4]='T';

d[5]='G';

d[6]='#';

printf("请输入字符串(以#号结束)\n");

do{ scanf("%c",&ch);

a[i]=ch;

i++;}

while(ch!='#');

numOfEq=i;

ch=b[0]=a[0];

printf("文法\t分析串\t\t分析字符\t剩余串\n");

if (foe1==0) return;

if (ch=='#')

{ printf("accept\n");

i=0;

x=d[i];

while(x!='#')

{ printf("%c",x);

i=i+1;x=d[i];/*输出推导式*/}

printf("\n");

}

else

{ printf("error\n");

printf("回车返回\n");

getchar();getchar();

return;}

}

//================================================ int E1()

{ int fot,fog;

printf("E->TG\t");

flag=1;

input();

input1();

fot=T();

if (fot==0) return(0);

fog=G();

if (fog==0) return(0);

else return(1); }

//================================================ int E()

{ int fot,fog;

printf("E->TG\t");

e[0]='E';

e[1]='=';

e[2]='>';

e[3]='?';

e[4]='T';

e[6]='#';

output();

flag=1;

input();

input1();

fot=T();

if (fot==0) return(0);

fog=G();

if (fog==0) return(0);

else return(1); }

//================================================ int T()

{ int fof,fos;

printf("T->FS\t");

e[0]='T';

e[1]='=';

e[2]='>';

e[3]='?';

e[4]='F';

e[5]='S';

e[6]='#';

output();

flag=1;

input();

input1();

fof=F();

if (fof==0) return(0);

fos=S();

if (fos==0) return(0);

else return(1); }

//================================================ int G()

{ int fot;

if(ch=='+')

{ b[i1]=ch;

printf("G->+TG\t");

e[0]='G';

相关文档
最新文档