词法分析器的构造南邮编译原理实验一报告.docx

上传人:b****5 文档编号:6791173 上传时间:2023-01-10 格式:DOCX 页数:13 大小:227.95KB
下载 相关 举报
词法分析器的构造南邮编译原理实验一报告.docx_第1页
第1页 / 共13页
词法分析器的构造南邮编译原理实验一报告.docx_第2页
第2页 / 共13页
词法分析器的构造南邮编译原理实验一报告.docx_第3页
第3页 / 共13页
词法分析器的构造南邮编译原理实验一报告.docx_第4页
第4页 / 共13页
词法分析器的构造南邮编译原理实验一报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

词法分析器的构造南邮编译原理实验一报告.docx

《词法分析器的构造南邮编译原理实验一报告.docx》由会员分享,可在线阅读,更多相关《词法分析器的构造南邮编译原理实验一报告.docx(13页珍藏版)》请在冰豆网上搜索。

词法分析器的构造南邮编译原理实验一报告.docx

词法分析器的构造南邮编译原理实验一报告

 

词法分析器的构造南邮编译原理实验一报告

 

实验报告

(2015/2016学年第二学期)

 

课程名称

编译原理

实验名称

词法分析器的构造

实验时间

2016

4

29

指导单位

计算机软件教学中心

指导教师

学生姓名

wujun

班级学号

学院(系)

计算机学院、软件学院

专业

计算机科学

与技术

 

实验报告

实验名称

词法分析器的构造

指导教师

实验类型

设计

实验学时

4

实验时间

一、实验目的和要求

1、实验目的:

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

2、实验要求:

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

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

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

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

识别保留字:

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

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

=等;分隔符包括:

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

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

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

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

硬件:

计算机

软件:

VisualC++

二、实验原理及内容

1、实验内容:

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

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

main(){

int a,b;

a=10;

b=a+20;

}

要求输出如下:

(2,’main’)

(5,’(’)

(5,’)’)

(5,’)’)

(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,’}’)

2、实验原理状态转换图

3、实验代码:

实验代码:

#include<>

#include<>

#include

#include<>

#include<>

#include<>

structChar{||

ch==':

'||ch=='\''||ch=='\"'||ch=='['||ch==']'||ch=='#'||ch=='_')

returntrue;

returnfalse;

}

==0){

returntrue;

}

returnfalse;

}

//预处理去掉注释、换行、空格等

voidScanner(chars[],chara[]){

inti=0,j=0,k=strlen(s);

for(i;i

if(s[i]=='/'&&s[i+1]=='/'){

do{

i++;

}while(s[i]!

='\n');

i--;

}

elseif(s[i]=='/'&&s[i+1]=='*'){

do{

i++;

}while(s[i]!

='/'||s[i-1]!

='*');

continue;

}

elseif(s[i]=='\t'||s[i]=='\n'||s[i]=='

')

a[j++]='';

else

a[j++]=s[i];

}

cout<<"\n系统经过预处理后的输出(去掉注释和换行):

"<

cout<

cout<<"系统经过预处理后的输出(去掉注释、换行、空格等):

"<

for(i=0;i

if(a[i]=='')

continue;

else

cout<

}

cout<

}

voidHandle(chars[]){//词法分析

charch;

for(intj=0;j

charword[20]={'\0'};

inti=0;

ch=s[j];

if(ch=='')

continue;

elseif(IsLetter(ch)){

do{

word[i++]=ch;

ch=s[++j];

}while(IsLetter(ch)||IsDigit(ch)||ch=='_');

j--;

word[i]='\0';

if(IsKeyWord(word))

cout<<"(1,'"<

else

cout<<"(2,'"<

}

elseif(IsDigit(ch)){

do{

word[i++]=ch;

ch=s[++j];

}while(IsDigit(ch));

j--;

word[i]='\0';

cout<<"(3,'"<

}

elseif(IsSeparator(ch)){

word[0]=ch;

cout<<"(5,'"<

}

else{

word[0]=ch;

if(word[0]=='+'||word[0]=='-'||word[0]=='>'||word[0]=='<'||

word[0]=='&'||word[0]=='|'){

if(s[j+1]==word[0]||s[j+1]=='='){

word[1]=s[++j];

cout<<"(4,'"<

}

else

cout<<"(4,'"<

}

elseif(word[0]=='='||word[0]=='*'||word[0]=='/'||

word[0]=='!

'||word[0]=='%'||word[0]=='^'){

if(s[j+1]=='='){

word[1]=s[++j];

cout<<"(4,'"<

}

else

cout<<"(4,'"<

}

elseif(word[0]=='\\'){

if(s[j+1]=='n'||s[j+1]=='t'||

s[j+1]=='\\'||s[j+1]=='0'){

word[1]=s[++j];

cout<<"(4,'"<

}

else

cout<<"(4,'"<

}

else

cout<<"(无法识别字符,'"<

}

}

cout<<"\n";

}

intmain(){

inti;

charb=32,ch;

FILE*fp;

do{

i=0;

chars[10000];

chara[10000]={'\0'};

fp=fopen("","rb+");

if(fp==NULL){

cout<<"Cannotcreatefile"<

exit(0);

}

fseek(fp,0,2);

cout<<"Pleaseinputyoucode(endwithtwo'

'):

"<

do{

ch=getchar();

s[i++]=ch;

if(ch=='\n'||ch=='\t')

for(intj=0;j<4;j++)

fputc(b,fp);

fputc(ch,fp);

}while(s[i-1]!

=''||s[i-2]!

='');

s[i]='\0';

Scanner(s,a);

cout<<"词法分析如下:

"<

Handle(a);

fclose(fp);

}while(true);

return0;

}

4、实验测试和截图

(1)、测试一截图

输入代码:

输出结果:

(2)测试二截图

输入代码:

输出结果:

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

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

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

程序将字符分为五类:

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

实验过程中开始时由于对换行符(\n)、制表符(\t)、和注释等处理不好导致实验失败,后来预处理时讲它们全部换成空格符和把注释去掉才成功。

五、指导教师评语

 

成绩

批阅人

日期

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

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

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

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