南邮编译原理报告实验一.docx

上传人:b****2 文档编号:601985 上传时间:2023-04-29 格式:DOCX 页数:10 大小:52.99KB
下载 相关 举报
南邮编译原理报告实验一.docx_第1页
第1页 / 共10页
南邮编译原理报告实验一.docx_第2页
第2页 / 共10页
南邮编译原理报告实验一.docx_第3页
第3页 / 共10页
南邮编译原理报告实验一.docx_第4页
第4页 / 共10页
南邮编译原理报告实验一.docx_第5页
第5页 / 共10页
南邮编译原理报告实验一.docx_第6页
第6页 / 共10页
南邮编译原理报告实验一.docx_第7页
第7页 / 共10页
南邮编译原理报告实验一.docx_第8页
第8页 / 共10页
南邮编译原理报告实验一.docx_第9页
第9页 / 共10页
南邮编译原理报告实验一.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

南邮编译原理报告实验一.docx

《南邮编译原理报告实验一.docx》由会员分享,可在线阅读,更多相关《南邮编译原理报告实验一.docx(10页珍藏版)》请在冰点文库上搜索。

南邮编译原理报告实验一.docx

南邮编译原理报告实验一

 

实验报告

(2015/2016学年第二学期)

 

课程名称

编译原理

实验名称

词法分析器的构造

实验时间

2016

4

14

指导单位

计算机软件教学中心

指导教师

黄海平

学生姓名

班级学号

学院(系)

计算机学院、软件学院

专业

计算机科学

与技术

 

实验报告

实验名称

词法分析器的构造

指导教师

黄海平

实验类型

验证

实验学时

4

实验时间

2016.4.14

一、实验目的和要求

实验目的:

设计、编制、调试一个词法分析程序,对单词进行识别和编码,加深对词法分析原理的理解。

实验要求:

1、允许用户自己输入源程序并保存为文件

2、系统能够输出经过预处理后的源程序(去掉注释、换行、空格等)

3、能够将该源程序中所有的单词根据其所属类型(整数、保留字、运算符、标识符等。

定义的类C语言中的标识符只能以字母或下划线开头)进行归类显示,例如:

识别保留字:

if、int、for、while、do、return、break、continue等,其他的都识别为标识符;常数为无符号整形数;运算符包括:

+、-、*、/、=、>、<、>=、<=、!

=等;分隔符包括:

、;、{、}、(、)等。

4、实现文件的读取操作,而不是将文本以字符串形式预存于程序中。

文本内容为待分析的类C语言程序。

二、实验环境(实验设备)

硬件:

计算机

软件:

VisualC++6.0

二、实验原理及内容

实验内容:

设计并实现一个词法分析器,实现对指定位置的类C语言源程序文本文件的读取,并能够对该源程序中的所有单词进行分类,指出其所属类型,实现简单的词法分析操作。

例如下面为一段C语言源程序:

main()

{

int a,b;

a=10;

 b=a+20;

}

要求输出如下

(2,’main’)

(5,’(’)

(5,’)’)

(5,’{’)

(1,’int’)

(2,’a’)

(5,’,’)

(2,’b’)

(5,’;’)

(2,’a’)

(4,’=’)

(3,’10’)

(5,’;’)

(2,’b’)

(4,’=’)

(2,’a’)

(4,’+’)

(3,’20’)

(5,’;’)

(5,’}’)

实验代码:

#include

#include

#include

usingnamespacestd;

boolLETTER(charA)

{

if(A>='a'&&A<='z')

returntrue;

elseif(A>='A'&&A<='Z')

returntrue;

elsereturntrue;

}

boolDIGIT(charA)

{

if(A>='0'&&A<='9')

returntrue;

else

returnfalse;

}

boolREAERVE(char*a)

{

if(strcmp(a,"if")==0)

{cout<<"(1,'"<

if(strcmp(a,"int")==0)

{cout<<"(1,'"<

if(strcmp(a,"for")==0)

{cout<<"(1,'"<

if(strcmp(a,"while")==0)

{cout<<"(1,'"<

if(strcmp(a,"do")==0)

{cout<<"(1,'"<

if(strcmp(a,"return")==0)

{cout<<"(1,'"<

if(strcmp(a,"break")==0)

{cout<<"(1,'"<

if(strcmp(a,"continue")==0)

{cout<<"(1,'"<

if(strcmp(a,"main")==0)

{cout<<"(1,'"<

returnfalse;

}

boolzimu(charA)

{

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

returntrue;

returnfalse;

}

intmain()

{

chara;

FILE*f;

charCHAR;

charTOKEN[120];

f=fopen("chenxu.txt","w");

if(f==NULL)

{

cout<<"con'tcreatefile"<

exit(0);

}

cout<<"pleaseinputyoucode(totheendof#)"<

while((a=getchar())!

='#')

fputc(a,f);

fclose(f);

cout<<"over"<

f=fopen("chenxu.txt","r");

while((CHAR=fgetc(f))!

=EOF)

{

while(CHAR!

='')

{

if(zimu(CHAR))

{

intk=0;

do{

TOKEN[k]=CHAR;

k++;

}while((CHAR=fgetc(f))!

=EOF&&CHAR!

=''&&zimu(CHAR));

if(DIGIT(CHAR))

{

do{

TOKEN[k]=CHAR;

k++;

}while((CHAR=fgetc(f))!

=EOF&&CHAR!

=''&&DIGIT(CHAR));

}

TOKEN[k]='\0';

if(!

(REAERVE(TOKEN)))

cout<<"(2,'"<

}

if(DIGIT(CHAR))

{

inti=0;

do{

TOKEN[i]=CHAR;

i++;

}while((CHAR=fgetc(f))!

=EOF&&CHAR!

=''&&DIGIT(CHAR));

TOKEN[i]='\0';

if(!

REAERVE(TOKEN))

cout<<"(3,'"<

}

if(CHAR=='+'||CHAR=='-'||CHAR=='*'||CHAR=='/'||CHAR=='>'||CHAR=='<'||CHAR=='=')

{

cout<<"(4,'"<

}

if(CHAR==','||CHAR==';'||CHAR=='('||CHAR==')'||CHAR=='{'||CHAR=='}')

{

cout<<"(5,'"<

}

break;

}

}

fclose(f);

cout<<"按任意键退出"<

cin>>CHAR;

return0;

}

实验结果:

 

 

四、实验小结(包括问题和解决方法、心得体会、意见与建议等)

在这次实验中,我进一步学习了如何运用输入输出流,对文件进行读写操作。

了解了什么是词法分析,熟悉了词法分析器的构造,更加深入了对词法分析原理的理解。

程序将字符分为五类:

保留字、标识符、整数、运算符、分隔符,对使用者输入的程序代码进行识别、分析和编码,简单分析了词法。

通过此次实验,我收获很大。

五、指导教师评语

 

成绩

批阅人

日期

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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