东北大学编译原理实验报告二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)分析法:
递归下降:
思考问题回答:
语法分析的任务是什么?
语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,语法分析程序判断源程序在结构上是否正确。
通过接受词法分析程序识别出来的单词符号串,判断它们是否由某种语言的文法产生,即判断被识别符号串是否为某语法成分,同时进行语法检查,为后面的语义分析和代码生成作准备。