编译原理词法分析报告器地构造_第1页
编译原理词法分析报告器地构造_第2页
编译原理词法分析报告器地构造_第3页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

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

2、C语言 源程序文本文件的读取,并能够对该源程序中的所有单词进行分类,指出其 所属类型,实现简单的词法分析操作。例如下面为一段C语言源程序:mai n()int a,b; a = 10;b = a + 20;要求输出如下(可以自行分类,分类原则请在报告中说明)(1, main)(5,()(5,)(5, )(1,int)(2,a)(5,,)(2,b)(5,;)(2, a)(3,10)(5, J)(2,b)(4,)(2,a)(4,+)(3,20)(5, J)(5,)2、实验要求:(1)、允许用户自己输入源程序并保存为文件(2)、系统能够输出经过预处理后的源程序(去掉注释、换行、空格等)(3)、能够将

3、该源程序中所有的单词根据其所属类型(整数、保留字、运算符、标识符等。定义的类C语言中的标识符只能以字母或下划线开头)进行归类显示,例如:识别保留字:if、int、for、while、do、return、break、continue等,其他的都识别为标识符;常数为无符号整形数;运算符包括: +、-、*、/、=、=、=、匸等;分隔符包括:,、;、(、)等。(4)、实现文件的读取操作,而不是将文本以字符串形式预存于程序中。文 本内容为待分析的类C语言程序。3、实验过程描述(1)首先讲和书上一样分成5类分类号分类内容1保留字2标识符3整数4运算符(+,-, * ,/,二等)5分隔符(,;, , ,(,

4、)(2)、接着写出用到的简单文法并转换成状态转换图:二字母|字母 |数字:=数字|数字 :=+卜|*|=:二,|; | (|) | |保留字是一种特殊的标识符,不独立写出其文法状态转换图如下:字母或数字(3)按照书上的步骤写程序因为程序要求将用户的输入保存到文件中所以这里要用到文件存贮操作,fopen(FILE *文件名,打开方式)。一共有三个函数分别是bool LETTER(char A)IIif (A=a &A=A &A=0 &A)return true ;elsereturn false ;bool REAERVEChar *a)II判断字符是否是字母判断字符是否是数字判断标识符是否为保

5、留字if (strcmp(a,if )=0)cout (1,av)e ndl;returntrueif (strcmp(a,int )=0)cout (1,av)e ndl;returntrueif (strcmp(a,for )=0)cout (1,av)e ndl;returntrueif (strcmp(a,while)=:0)cout (1,av)e ndl;returntrueif (strcmp(a,do )=0)cout (1,av)e ndl;returntrueif (strcmp(a,return)=0)cout (1,av)e ndl;returntrueif (strc

6、mp(a,break)=:0)cout (1,av)e ndl;returntrueif (strcmp(a,con ti nue)=0)cout (1,va)e ndl;returntrueif (strcmp(a,main )=0)cout (1,va)#in elude #in elude using namespaeestd;bool LETTER(char A)if (A=a &A=A &A=0 &A) return true ;elsereturn false ;bool REAERVEChar *a)if (strcmp(a,if )=0)cout (1,av)e ndl;ret

7、urntrueif (strcmp(a,int )=0)cout (1,av)e ndl;returntrueif (strcmp(a,for )=0)cout (1,av)e ndl;returntrueif (strcmp(a,while)=:0)cout (1,av)e ndl;returntrueif (strcmp(a,do )=0)cout (1,av)e ndl;returntrueif (strcmp(a,return)=0)cout (1,av)e ndl;returntrueif (strcmp(a,break)=:0)cout (1,av)e ndl;returntrue

8、if (strcmp(a,con ti nue)=0)cout (1,va)e ndl;returntrueif (strcmp(a,main )=0)cout (1,va)= A &A= a &A=z)return true ;return false ;int main()char a;FILE *f;char CHAR;char TOKEN120;f=fopen( code.txt , w);if (f=NULL)cout cont create file endl;exit(0) ;cout please in put you codee ndl;while (a=getchar()!

9、= ?)fputc(a,f);fclose(f);cout over endl;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)/处鋦理元?是?否?为a包悒?含?数簓字?的?标括?识?符?doTOKENk=CHAR;k+; while (CHAR=fgetc(f)!=EOF&CHAR!= &DIGIT(C

10、HAR);TOKENk=0;if (!(REAERVE(TOKEN) /判D断?所d得?标括?识?符?是?否?为a保馈?留?字?coutvv(2, vvTOKEN今e ndl;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 |CHAR=v |CHAR= )/运?算 ?符?cout(4, vvCHAR endl;if (CHAR= |CHAR=;|CHAR=( |CHAR=) |C

11、HAR= |CHAR= )/ 分?隔?符?cout (5,CHAR endl;break;fclose(f);cout按恪?任 ?意癮键u退?岀? CHAR;return 0;测试结果:文件存储在code.txt文件中修改日期奏型大小D 亡 bug2015/4/13 1S:34codentxt2015/4/13 15:351 KBtext.txt2015/4/10 9:090 KB为 tert-vcxproj2015/4/10 9:05VC+ Project4 KB詔 text.vex proj ,fi Ite rs2015/4/10 9:05VC + + Project FiL“1 KByj text.vcxprqj.us&r2015/4/10 8j35Visual Studio Pr,1 KB,_ U serss u n Deskto p co detxt2015/4/10 9:47文本文悄1 KB竺词法,中p2015/4/13 15:34Cf + Source3 KB四、实验小结(包括问题和解决方法、心得体会、意见与建议等)这次实验让我们更加了解词法分析程序的原理,熟悉了书上词法分析 . 一 程序构建的步骤,也强化了我们的编程能力丄旦如说文件读写操作。在我的一 程序中,思考了很久也没能实现”二:举例来 说,CHAR _读了”之后-进行判断如果

温馨提示

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

评论

0/150

提交评论