c语言递归下降分析程序实验推荐文档Word文件下载.docx
- 文档编号:22209598
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:11
- 大小:16.57KB
c语言递归下降分析程序实验推荐文档Word文件下载.docx
《c语言递归下降分析程序实验推荐文档Word文件下载.docx》由会员分享,可在线阅读,更多相关《c语言递归下降分析程序实验推荐文档Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
F→(E)|i
2.(参考课本P74)对文法先进行消除左递归。
3.分析程序由一组递归过程组成,文法中每个非终结符对应一个过程几个全局过程和变量:
ADVANCE,把输入串指示器IP指向下一个输入符号,即读入一个单字符号
SYM,IP当前所指的输入符号
ERROR,出错处理子程序
每个非终结符有对应的子程序的定义,首先在分析过程中,当需要从某个非终结符出发进行展开(推导)时,就调用这个非终结符对应的子程序。
4.具体实现时:
(1)当遇到终结符,编写:
if(当前读到的输入符号=i)
读入下一个输入符号
(2)当遇到非终结符E时,编写语句:
调用E()
(3)当遇到E-->
ε编写语句if(当前读到的输入符号不属于Follow(E))
Error();
(4)当某个非终结符的规则有多个候选式时,按LL
(1)文法的条件能唯一的选择一个候选式进行推导。
#include<
iostream>
usingnamespacestd;
chara[80];
//字符串的存入
charsym;
//单个的判断字符
inti=0;
//字符串下标
voidE();
//功能识别函数
voidE2();
voidT();
voidT2();
voidF();
voidinput();
//输入函数
voidadvance();
//字符串小标进一函数
。
5.代码实现:
#include<
stdio.h>
#include<
dos.h>
stdlib.h>
string.h>
chara[50],b[50],d[200],e[10];
charch;
intn1,i1=0,flag=1,n=5;
inttotal=0;
/*步骤计数器*/
intE();
intE1();
intT();
intG();
/*E’*/
intS();
/*T’*/
intF();
voidinput1();
voidoutput();
voidmain()/*递归分析*/
{
intf,p,j=0;
charx;
d[0]='
E'
;
d[1]='
='
d[2]='
>
'
d[3]='
T'
d[4]='
G'
d[5]='
#'
printf("
请输入字符串(长度<
50,以#号结束)\n"
);
do{
scanf("
%c"
&
ch);
a[j]=ch;
j++;
}while(ch!
n1=j;
ch=b[0]=a[0];
步骤\t文法\t分析串\t\t分析字符\t剩余串\n"
f=E1();
if(f==0)return;
if(ch=='
)
{
accept\n"
p=0;
x=d[p];
while(x!
){
x);
p=p+1;
x=d[p];
/*输出推导式*/
}
}else{
error\n"
回车返回\n"
getchar();
return;
\n"
}
intE1()
{
intf,t;
%d\tE-->
TG\t"
total);
total++;
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();
intT()
%d\tT-->
FS\t"
F'
S'
f=F();
t=S();
intG()
intf;
if(ch=='
+'
){
b[i1]=ch;
%d\tG-->
+TG\t"
e[6]='
flag=0;
input1();
ch=a[++i1];
G();
return
(1);
^\t"
^'
intS()
*'
printf("
%d\tS-->
*FS\t"
a[i1]=ch;
intF()
('
%d\tF-->
(E)\t"
)'
f=E();
input();
else{
return(0);
elseif(ch=='
i'
i\t"
else{printf("
return(0);
voidinput()
intj=0;
for(;
j<
=i1-flag;
j++)
b[j]);
/*输出分析串*/
\t\t"
%c\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;
system("
pause"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 递归 下降 分析 程序 实验 推荐 文档