东北大学编译原理实验报告二Word下载.doc

上传人:wj 文档编号:220477 上传时间:2023-04-28 格式:DOC 页数:8 大小:504KB
下载 相关 举报
东北大学编译原理实验报告二Word下载.doc_第1页
第1页 / 共8页
东北大学编译原理实验报告二Word下载.doc_第2页
第2页 / 共8页
东北大学编译原理实验报告二Word下载.doc_第3页
第3页 / 共8页
东北大学编译原理实验报告二Word下载.doc_第4页
第4页 / 共8页
东北大学编译原理实验报告二Word下载.doc_第5页
第5页 / 共8页
东北大学编译原理实验报告二Word下载.doc_第6页
第6页 / 共8页
东北大学编译原理实验报告二Word下载.doc_第7页
第7页 / 共8页
东北大学编译原理实验报告二Word下载.doc_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

东北大学编译原理实验报告二Word下载.doc

《东北大学编译原理实验报告二Word下载.doc》由会员分享,可在线阅读,更多相关《东北大学编译原理实验报告二Word下载.doc(8页珍藏版)》请在冰点文库上搜索。

东北大学编译原理实验报告二Word下载.doc

(加入注释)

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)分析法:

递归下降:

思考问题回答:

语法分析的任务是什么?

语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,语法分析程序判断源程序在结构上是否正确。

通过接受词法分析程序识别出来的单词符号串,判断它们是否由某种语言的文法产生,即判断被识别符号串是否为某语法成分,同时进行语法检查,为后面的语义分析和代码生成作准备。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2