语法分析代码Word格式.docx
- 文档编号:14186939
- 上传时间:2022-10-19
- 格式:DOCX
- 页数:10
- 大小:18.60KB
语法分析代码Word格式.docx
《语法分析代码Word格式.docx》由会员分享,可在线阅读,更多相关《语法分析代码Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
id+id*id#
输出:
ETE'
TFT'
Fid
E+TE'
……
如果输入串有错误,则在输出中要体现是跳过输入串的某些记号了,还是弹栈,弹出某个非终结符或者是终结符了,同时给出相应的出错提示信息。
比如:
idid*id对应的出错信息是:
"
输入串跳过记号id,用户多输入了一个id"
;
id**id对应的出错信息是:
弹栈,弹出非终结符F,用户少输入了一个id"
(id+id对应的出错信息是:
弹栈,弹出终结符),用户少输入了一个右括号(或者说,括号不匹配)"
有余力的同学可进一步考虑如下扩展:
1. 将递归下降方法和非递归预测分析方法都实现
2. 在语法分析的过程中调用前两次上机的结果,即利用词法分析器来返回一个记号给语法分析器。
3. 编写First和Follow函数,实现其求解过程。
*/
#include<
stdio.h>
dos.h>
stdlib.h>
string.h>
chara[50],b[50];
charch;
intn1,i1=0,flag=1,n=5,signal=0;
inttotal=0;
/*步骤计数器*/
intE();
intT();
intE1();
/*E'
intT1();
/*T'
intF();
voidinput();
voidinput1();
voidmain()/*递归分析*/
{
intf,j=0;
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分析字符\t剩余串\n"
f=E();
if(f==0)return;
if(ch=='
)
printf("
accept\n"
else
{
!
error\n"
return;
}
\n"
}
intE()
{intf,t;
%d\tE-->
TE'
\t\t"
total);
total++;
flag=1;
input();
input1();
if(i1==0)
while(ch=='
+'
||ch=='
*'
)
{
if(ch=='
)//+i
{
b[i1]=ch;
printf("
%d\t?
?
flag=0;
input();
input1();
printf("
串首部多输入了一个+!
ch=a[++i1];
}
)//*i
串首部多输入了一个*!
}
f=T();
if(f==0)return(0);
t=E1();
if(t==0)return(0);
elsereturn
(1);
intT()
%d\tT-->
FT'
f=F();
t=T1();
intE1()
if(ch=='
{
b[i1]=ch;
printf("
%d\tE'
-->
+TE'
\t"
flag=0;
input();
ch=a[++i1];
if(ch=='
)//i++i
{
b[i1]=ch;
flag=0;
printf("
少输入了一个i!
ch=a[++i1];
}
)//i+*i
f=T();
if(f==0)return(0);
t=E1();
if(t==0)return(0);
elsereturn
(1);
}
ε\t\t"
return
(1);
intT1()
intf,t;
){
%d\tT'
*FT'
)//i**i
)//i*+i
f=F();
t=T1();
if(t==0)return(0);
elsereturn
(1);
a[i1]=ch;
intF()
{intf;
('
)
{
%d\tF-->
(E)\t\t"
signal=1;
f=E();
if(ch=='
)'
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语法分析 代码