实验二 递归下降分析法Word文件下载.docx
- 文档编号:21019696
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:14
- 大小:65.38KB
实验二 递归下降分析法Word文件下载.docx
《实验二 递归下降分析法Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验二 递归下降分析法Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
(2)输入一以#结束的符号串(包括+—*/()i#):
在此位置输入符号串例如:
i+i*i#
(3)输出结果:
i+i*i#为合法符号串
备注:
输入一符号串如i+i*#,要求输出为“非法的符号串”。
注意:
1.表达式中允许使用运算符(+-*/)、分割符(括号)、字符i,结束符#;
2.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好);
三、实验过程:
程序设计:
1.模块设计:
将程序分成合理的多个模块(函数),每个模块做具体的同一事情。
2.写出(画出)设计方案:
模块关系简图、流程图、全局变量、函数接口等。
程序编写:
1.定义部分:
定义常量、变量、数据结构。
2.初始化:
从文件将输入符号串输入到字符缓冲区中。
3.利用递归下降分析法,对每个非终结符编写函数,在主函数中调用文法开始符号的函数。
四、实验结果
(1)程序流程图
语法树如下所示:
E
TG
FS+TG
iεFS-TG
ε
i*FSFS
/FS
iεi
iε
(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("
递归下降分析程序,编制人:
XX,01号,12班\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++]);
为合法字符!
\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"
F'
S'
f=F();
if(f==0)
t=S();
intG()
{
intf;
if(ch=='
+'
)
{
b[i1]=ch;
G-->
+TG\t"
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("
input();
ch=a[++i1];
else
j=0;
while(a[j]!
i'
i\t"
voidinput()
intj=0;
for(;
j<
=i1-flag;
j++)
b[j]);
/*输出分析串*/
\t\t\t"
%c\t\t\t"
ch);
/*输出分析字符*/
voidinput1()
intj;
for(j=i1+1-flag;
n1;
a[j]);
/*输出剩余字符*/
voidoutput(){/*推导式计算*/
intm,k,j,q;
inti=0;
m=0;
k=0;
q=0;
i=n;
d[n]='
d[n+1]='
d[n+2]='
n=n+2;
i=n;
i=i-2;
while(d[i]!
&
i!
=0)i=i-1;
i=i+1;
=e[0])i=i+1;
q=i;
m=q;
k=q;
while(d[m]!
)m=m-1;
m=m+1;
while(m!
=q){
d[n]=d[m];
m=m+1;
n=n+1;
for(j=3;
e[j]!
j++){
d[n]=e[j];
n=n+1;
k=k+1;
while(d[k]!
){
d[n]=d[k];
k=k+1;
运行结果截图如下所示:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验二 递归下降分析法 实验 递归 下降 分析
![提示](https://static.bdocx.com/images/bang_tan.gif)