编译原理词法分析器的构造(共9页)_第1页
编译原理词法分析器的构造(共9页)_第2页
编译原理词法分析器的构造(共9页)_第3页
编译原理词法分析器的构造(共9页)_第4页
编译原理词法分析器的构造(共9页)_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、PAGE 实 验 报 告(2014 / 2015 学年(xunin) 第 一 学期(xuq))课程名称编译原理实验名称词法分析器的构造实验时间2015年4月10日指导单位南京邮电大学指导教师蒋凌云学生姓名孙雪禄班级学号B12041213学院(系)计算机学院、软件学院专 业软件工程(服务外包)PAGE - 8 -实 验 报 告实验名称词法分析器的构造指导教师蒋凌云实验类型上机实验实验学时4实验时间2015.4.10实验目的和要求 设计、编制、调试一个词法分析程序,对单词进行识别和编码,加深对词法分析原理的理解。二、实验环境(实验设备) Microsoft Visual Stdio 2010实验原

2、理及内容 1、实验内容:设计并实现一个词法分析器,实现对指定位置的类C语言源程序文本文件的读取,并能够对该源程序中的所有单词进行分类,指出其所属类型,实现简单的词法分析操作。例如下面为一段C语言源程序:main() int a,b; a = 10; b = a + 20;要求输出如下(可以自行分类,分类原则请在报告中说明)(1,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,) 2、实验要求:(1)、允许用户自己输入源程序并保存为文件(2)、

3、系统能够输出经过预处理后的源程序(去掉注释、换行、空格等)(3)、能够将该源程序中所有的单词根据其所属类型(整数、保留字、运算符、标识符等。定义的类C语言中的标识符只能以字母或下划线开头)进行归类显示,例如:识别保留字:if、int、for、while、do、return、break、continue等,其他的都识别为标识符;常数为无符号整形数;运算符包括:+、-、*、/、=、=、,=等)5分隔符(,,;,(,))(2)、接着写出用到的简单文法并转换成状态转换图:=字母|字母|数字031字母非数字或字母字母或数字数字数字非数字+-*/=, ; ( ) :=数字|数字:=+|-|*|=:=,|;

4、|(|)|保留字是一种特殊的标识符,不独立写出其文法031字母非数字或字母字母或数字数字数字非数字+-*/=a&A=A&A=0&A=9)return true;elsereturn false;bool REAERVE(char *a) /判断标识符是否为保留字if(strcmp(a,if)=0)cout(1,a)endl;return true;if(strcmp(a,int)=0)cout(1,a)endl;return true;if(strcmp(a,for)=0)cout(1,a)endl;return true;if(strcmp(a,while)=0)cout(1,a)endl;

5、return true;if(strcmp(a,do)=0)cout(1,a)endl;return true;if(strcmp(a,return)=0)cout(1,a)endl;return true;if(strcmp(a,break)=0)cout(1,a)endl;return true;if(strcmp(a,continue)=0)cout(1,a)endl;return true;if(strcmp(a,main)=0)cout(1,a)endl;return true;return false;下面附上全部的代码:#include #include #include usi

6、ng namespace std;bool LETTER(char A) if(A=a&A=A&A=0&A=9)return true;elsereturn false;bool REAERVE(char *a)if(strcmp(a,if)=0)cout(1,a)endl;return true;if(strcmp(a,int)=0)cout(1,a)endl;return true;if(strcmp(a,for)=0)cout(1,a)endl;return true;if(strcmp(a,while)=0)cout(1,a)endl;return true;if(strcmp(a,d

7、o)=0)cout(1,a)endl;return true;if(strcmp(a,return)=0)cout(1,a)endl;return true;if(strcmp(a,break)=0)cout(1,a)endl;return true;if(strcmp(a,continue)=0)cout(1,a)endl;return true;if(strcmp(a,main)=0)cout(1,a)=A&A=a&A=z)return true;return false;int main()char a;FILE *f;char CHAR;char TOKEN120;f=fopen(co

8、de.txt,w);if(f=NULL)coutcont create fileendl;exit(0);coutplease input you codeendl;while(a=getchar()!=?)fputc(a,f);fclose(f);coutoverendl;f=fopen(code.txt,r);while(CHAR=fgetc(f)!=EOF)while(CHAR!= )if(zimu(CHAR)/标括?识?符?int k=0;doTOKENk=CHAR;k+;while(CHAR=fgetc(f)!=EOF&CHAR!= &zimu(CHAR);if(DIGIT(CHAR

9、)/处鋦理?是?否?为a包悒?含?数簓字?的?标括?识?符?doTOKENk=CHAR;k+;while(CHAR=fgetc(f)!=EOF&CHAR!= &DIGIT(CHAR);TOKENk=0;if(!(REAERVE(TOKEN)/判D断?所得?标括?识?符?是?否?为a保馈?留?字?cout(2,TOKEN)endl;if(DIGIT(CHAR) /整?数簓int i=0;doTOKENi=CHAR;i+;while(CHAR=fgetc(f)!=EOF&CHAR!= &DIGIT(CHAR);TOKENi=0;if(!REAERVE(TOKEN)cout(3,TOKEN)|CHA

10、R=|CHAR=) /运?算?符?cout(4,CHAR)endl;if(CHAR=,|CHAR=;|CHAR=(|CHAR=)|CHAR=|CHAR=) /分?隔?符?cout(5,CHAR)endl;break;fclose(f);cout按恪?任?意癮键退?出?CHAR;return 0;测试结果:文件存储在code.txt文件中四、实验小结(包括问题和解决方法、心得体会、意见与建议等) 这次实验让我们更加了解词法分析程序的原理,熟悉了书上词法分析程序构建的步骤,也强化了我们的编程能力,比如说文件读写操作。在我的程序中,思考了很久也没能实现”=”和”!=”的词法分析。拿”=”举例来说,CHAR读了”之后,进行判断如果是”=”就输出“(4,=)”。但是如果接下来的字符不是”=”,就需要判断这个CHAE字符是否为字母、数字、分隔符、其他运算

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论