昆明理工大学编译原理实验二语法分析器.docx

上传人:b****4 文档编号:4381764 上传时间:2022-12-01 格式:DOCX 页数:10 大小:66.61KB
下载 相关 举报
昆明理工大学编译原理实验二语法分析器.docx_第1页
第1页 / 共10页
昆明理工大学编译原理实验二语法分析器.docx_第2页
第2页 / 共10页
昆明理工大学编译原理实验二语法分析器.docx_第3页
第3页 / 共10页
昆明理工大学编译原理实验二语法分析器.docx_第4页
第4页 / 共10页
昆明理工大学编译原理实验二语法分析器.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

昆明理工大学编译原理实验二语法分析器.docx

《昆明理工大学编译原理实验二语法分析器.docx》由会员分享,可在线阅读,更多相关《昆明理工大学编译原理实验二语法分析器.docx(10页珍藏版)》请在冰豆网上搜索。

昆明理工大学编译原理实验二语法分析器.docx

昆明理工大学编译原理实验二语法分析器

昆明理工大学信息工程与自动化学院学生实验报告

(2011—2012学年第1学期)

课程名称:

编译原理开课实验室:

4452011年12月19日

年级、专业、班

学号

成绩

实验项目名称

语法分析器

指导教师

严馨

教师评语

 

该同学是否了解实验原理:

A.了解□B.基本了解□C.不了解□

该同学的实验能力:

A.强□B.中等□C.差□

该同学的实验是否达到要求:

A.达到□B.基本达到□C.未达到□

实验报告是否规范:

A.规范□B.基本规范□C.不规范□

实验过程是否详细记录:

A.详细□B.一般□C.没有□

教师签名:

年月日

一、实验目的及内容

实验目的:

编制一个语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析。

实验内容:

在上机

(一)词法分析的基础上,采用递归子程序法或其他适合的语法分析方法,实现其语法分析程序。

要求编译后能检查出语法错误。

已知待分析的C语言子集的语法,用EBNF表示如下:

<程序>→main()<语句块>

<语句块>→‘{’<语句串>‘}’

<语句串>→<语句>{;<语句>};

<语句>→<赋值语句>|<条件语句>|<循环语句>

<赋值语句>→ID=<表达式>

<条件语句>→if‘(‘条件’)’<语句块>

<循环语句>→while’(‘<条件>’)‘<语句块>

<条件>→<表达式><关系运算符><表达式>

<表达式>→<项>{+<项>|-<项>}

<项>→<因子>{*<因子>|/<因子>}

<因子>→ID|NUM|‘(’<表达式>‘)’

<关系运算符>→<|<=|>|>=|==|!

=

二、实验原理及基本技术路线图(方框原理图或程序流程图)

三、所用仪器、材料(设备名称、型号、规格等或使用软件)

1台PC以及VISUALC++6.0软件

四、实验方法、步骤(或:

程序代码或操作过程)

#include

#include

usingnamespacestd;

charprog[80],token[8];

charch;

intsyn,p,m,n,sum,k=0;

char*key[6]={"main","int","char","if","else","while"};

voidscaner();

voidlrparser();

voidyucu();

voidstatement();

voidexpression();

voidterm();

voidfactor();

voidmain()

{

p=0;

cout<<"语法分析"<

cout<<"请输入字符串,以“@”结尾:

"<

do{ch=getchar();prog[p++]=ch;}

while(ch!

='@');

p=0;

scaner();

lrparser();

}

voidscaner()

{

sum=m=0;

for(n=0;n<8;n++)token[n]=NULL;

ch=prog[p++];

while(ch=='')ch=prog[p++];

if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))

{

while((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch>='0'&&ch<='9'))

{token[m++]=ch;ch=prog[p++];}

token[m++]='\0';

p--;

syn=10;

for(n=0;n<6;n++)

if(strcmp(token,key[n])==0)

{syn=n+1;break;}

}

elseif(ch>='0'&&ch<='9')

{

while(ch>='0'&&ch<='9')

{

sum=sum*10+ch-'0';

ch=prog[p++];

}

p--;

syn=20;

}

 

else

switch(ch)

{

case'<':

m=0;token[m++]=ch;

ch=prog[p++];

if(ch=='<'){syn=33;token[m++]=ch;}

elseif(ch=='='){syn=35;token[m++]=ch;}

break;

case'>':

m=0;token[m++]=ch;

ch=prog[p++];

if(ch=='='){syn=34;token[m++]=ch;}

else{syn=32;p--;}

break;

case'=':

token[m++]=ch;

ch=prog[p++];

if(ch=='=')

{syn=36;

token[m++]=ch;

}

else

{syn=21;

p--;

}

break;

case':

':

m=0;token[m++]=ch;

ch=prog[p++];

if(ch=='='){syn=18;token[m++]=ch;}

else{syn=17;p--;}

break;

case'+':

syn=22;token[0]=ch;break;

case'-':

syn=23;token[0]=ch;break;

case'*':

syn=24;token[0]=ch;break;

case'/':

syn=25;token[0]=ch;break;

case';':

syn=31;token[0]=ch;break;

case'(':

syn=26;token[0]=ch;break;

case')':

syn=27;token[0]=ch;break;

case'@':

syn=0;token[0]=ch;break;

default:

syn=-1;

}

}

voidlrparser()

{

if(syn==1)

{

scaner();

yucu();

if(syn=6)

{

scaner();

if(syn==0&&(k==0))

cout<<"\nsuccess\n"<

}

else

{

if(k!

=1)

cout<<"\nwhileerror\n"<

k=1;

}

}

else

{

cout<<"\nmainerror\n"<

k=1;

}

return;

}

voidyucu()

{

statement();

while(syn==31)

{

scaner();

statement();

}

return;

}

voidstatement()

{

if(syn==10)

{

scaner();

if(syn==18)

{

scaner();

expression();

}

else

{

cout<<"\nscentenceerror\n"<

k=1;

}

}

 

return;

}

voidexpression()

{

term();

while(syn==22||syn==23)

{

scaner();

term();

}

return;

}

voidterm()

{

factor();

while(syn==24||syn==25)

{

scaner();

factor();

}

return;

}

voidfactor()

{

if(syn==10||syn==20)

scaner();

elseif(syn==26)

{

scaner();

expression();

if(syn==27)

scaner();

else

{

cout<<"(error"<

k=1;

}

}

else

{

cout<<"expressionerror"<

k=1;

}

return;

}

5、实验过程原始记录(测试数据、图表、计算等)

 

六、实验结果、分析和结论(误差分析与数据处理、成果总结等。

其中,绘制曲线图时必须用计算纸或程序运行结果、改进、收获)

这次上机实验主要是能够采用C编程语言实现简单的语法分析程序,设计,编制并调试一个语法分析程序,加深对语法分析原理的理解。

但由于自己编程能力弱,做的不是太好,主要是通过查资料和同学的帮助完成的。

编译原理这门课的知识比较逻辑化和抽象华,要学懂这门课比较困难,因此,在今后学习中,我要更加努力,熟读课本,以求熟悉并掌握该门课的知识要点。

注:

教师必须按照上述各项内容严格要求,认真批改和评定学生成绩。

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1