编译原理-实验报告2-递归下降分析法Word格式.doc

上传人:b****2 文档编号:14568873 上传时间:2022-10-23 格式:DOC 页数:9 大小:1.10MB
下载 相关 举报
编译原理-实验报告2-递归下降分析法Word格式.doc_第1页
第1页 / 共9页
编译原理-实验报告2-递归下降分析法Word格式.doc_第2页
第2页 / 共9页
编译原理-实验报告2-递归下降分析法Word格式.doc_第3页
第3页 / 共9页
编译原理-实验报告2-递归下降分析法Word格式.doc_第4页
第4页 / 共9页
编译原理-实验报告2-递归下降分析法Word格式.doc_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

编译原理-实验报告2-递归下降分析法Word格式.doc

《编译原理-实验报告2-递归下降分析法Word格式.doc》由会员分享,可在线阅读,更多相关《编译原理-实验报告2-递归下降分析法Word格式.doc(9页珍藏版)》请在冰豆网上搜索。

编译原理-实验报告2-递归下降分析法Word格式.doc

(E)

(8)F->

i

输出的格式如下:

(1)递归下降分析程序,编制人:

姓名,学号,班级

(2)输入一以#结束的符号串(包括+—*/()i#):

在此位置输入符号串例如:

i+i*i#

(3)输出结果:

i+i*i#为合法符号串

备注:

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

注意:

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

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

三、实验过程:

程序设计:

1.模块设计:

将程序分成合理的多个模块(函数),每个模块做具体的同一事情。

2.写出(画出)设计方案:

模块关系简图、流程图、全局变量、函数接口等。

程序编写:

1.定义部分:

定义常量、变量、数据结构。

2.初始化:

从文件将输入符号串输入到字符缓冲区中。

3.利用递归下降分析法,对每个非终结符编写函数,在主函数中调用文法开始符号的函数。

四、实验结果

(1)程序流程图

(2)运行结果

示例程序:

#include<

stdio.h>

#include<

dos.h>

stdlib.h>

string.h>

chara[50],b[50],d[500],e[10];

charch;

intn1,i1=0,flag=1,n=5;

intE();

intE1();

intT();

intG();

intS();

intF();

voidinput();

voidinput1();

voidoutput();

voidmain()/*递归分析*/

{

intf,p,j=0;

charx;

d[0]='

E'

;

d[1]='

='

d[2]='

>

'

d[3]='

T'

d[4]='

G'

d[5]='

#'

printf("

递归下降分析程序,编制人:

武普泉,20号,1020562班\n"

);

输入一以#结束的符号串(包括+-*/()i#,且长度小于50):

"

do{

scanf("

%c"

&

ch);

a[j]=ch;

j++;

}while(ch!

n1=j;

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

文法\t分析串\t\t\t分析字符\t\t剩余串\n"

f=E1();

if(f==0)return;

if(ch=='

{printf("

accept\n"

p=0;

x=d[p];

// {

// printf("

x);

p=p+1;

x=d[p];

/*输出推导式*/

// }

while(a[p]!

printf("

a[p++]);

printf("

为合法字符!

\n"

}

else{

// printf("

error\n"

j=0;

while(a[j]!

a[j++]);

非法字符!

回车返回\n"

getchar();

getchar();

return;

getchar();

}

intE1()

{intf,t;

E-->

TG\t"

flag=1;

input();

input1();

f=T();

if(f==0)return(0);

t=G();

if(t==0)return(0);

elsereturn

(1);

intE()

e[0]='

e[1]='

e[2]='

e[3]='

e[4]='

e[5]='

output();

flag=1;

if(f==0)

return(0);

intT()

T-->

FS\t"

e[0]='

F'

S'

output();

f=F();

if(f==0)

t=S();

intG()

{

intf;

if(ch=='

+'

{

b[i1]=ch;

G-->

+TG\t"

e[0]='

e[6]='

output();

flag=0;

input();

input1();

ch=a[++i1];

f=T();

if(f==0)

return(0);

f=G();

if(f==0)

return0;

elsereturn1;

elseif(ch=='

-'

-TG\t"

{

G=%d\n"

f);

}

else

{

^\t"

^'

return

(1);

intS()

intf,t;

*'

{

S-->

*FS\t"

flag=0;

f=F();

t=S();

if(t==0)

/'

/FS\t"

a[i1]=ch;

intF()

{intf;

intj;

('

F-->

(E)\t"

e[0]='

)'

f=E();

if(f==0)return(0);

if(ch=='

b[i1]=ch;

printf("

flag=0;

input();

ch=a[++i1];

else

printf("

j=0;

while(a[j]!

return(0);

}

i'

i\t"

voidinput()

intj=0;

for(;

j<

=i1-flag;

j++)

printf("

b[j]);

/*输出分析串*/

\t\t\t"

prin

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1