东北大学编译原理实验报告二Word格式文档下载.doc
- 文档编号:13015242
- 上传时间:2022-10-02
- 格式:DOC
- 页数:8
- 大小:504KB
东北大学编译原理实验报告二Word格式文档下载.doc
《东北大学编译原理实验报告二Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《东北大学编译原理实验报告二Word格式文档下载.doc(8页珍藏版)》请在冰豆网上搜索。
(加入注释)
LL
(1)分析算法:
#include<
iostream>
malloc.h>
usingnamespacestd;
#defineSTACKSIZE50
#defineSTACKINCREMENT10
#defineOK1
#defineerror0
#defineoverflow-1
typedefcharSElemType;
typedefintStatus;
typedefstruct
{
SElemType*base;
SElemType*top;
Intstacksize;
}SqStack;
StatusInitStack(SqStack&
S)
S.base=(SElemType*)malloc(STACKSIZE*sizeof(SElemType));
if(!
S.base)
exit(overflow);
S.top=S.base;
S.stacksize=STACKSIZE;
returnOK;
}
StatusPush(SqStack&
S,SElemTypee)
if(S.top-S.base>
=S.stacksize)
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
(S.top)++;
*(S.top)=e;
StatusPop(SqStack&
S,SElemType&
e)
if(S.top==S.base)
returnerror;
e=*(S.top);
S.top--;
StatusGrammerAnalysis(SqStack&
S,char*ch,charc)
SElemTypee;
Push(S,'
#'
);
E'
while(!
((*(S.top)=='
)&
&
(c=='
))){
Pop(S,e);
if((e=='
(((c>
='
0'
(c<
9'
))||(c>
='
a'
c<
z'
)||(c=='
('
)))
Push(S,'
A'
T'
elseif((e=='
+'
))
ch++;
c=*ch;
((c=='
)'
)||(c=='
)));
)))
B'
F'
*'
{Push(S,'
}
((c>
)||(c>
while(((c=*ch)>
{Push(S,'
}
{ch++;
elsereturnerror;
intmain()
charstr[50];
charc;
system("
color0B"
SqStackS;
InitStack(S);
printf("
|-------------------------------------------------|\n"
|请输入表达式,以#键结束:
|\n"
scanf("
%s"
str);
c=*str;
if(GrammerAnalysis(S,str,c))
语法分析通过\n"
表达式正确\n"
else{
语法分析未通过\n"
表达式错误\n"
main();
return0;
递归下降
#include<
inta=1;
charch;
inti=0;
charstr[80];
voidT(void);
voidF(void);
voidE(void);
voidError(void);
voidError()//出错函数
cout<
<
"
语法错误"
endl;
voidT(void)//子程序T
F();
//进入子程序F
if(ch=='
)
i++;
ch=str[i];
T();
}//递归子程序T
voidF(void)//子程序F
i++;
ch=str[i];
E();
//回到子程序E
if(ch=='
{
}
else{Error();
a=0;
elseif((ch>
ch<
)||(ch>
i++;
ch=str[i];
else
Error();
voidE(void){//子程序E
i++;
ch=str[i];
E();
//递归子程序E
intmain()//主函数
|-------------------------------------------------|"
|输入表达式以#号结束|"
cin>
>
str;
ch=str[0];
while(ch!
)
E();
if(!
a)
break;
if((ch=='
(a!
=0))//遇#且a不等于零时语法正确
语法正确"
程序运行结果:
(截屏)
LL
(1)分析法:
递归下降:
思考问题回答:
语法分析的任务是什么?
语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,语法分析程序判断源程序在结构上是否正确。
通过接受词法分析程序识别出来的单词符号串,判断它们是否由某种语言的文法产生,即判断被识别符号串是否为某语法成分,同时进行语法检查,为后面的语义分析和代码生成作准备。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东北大学 编译 原理 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)