词法分析报告.doc_第1页
词法分析报告.doc_第2页
词法分析报告.doc_第3页
词法分析报告.doc_第4页
词法分析报告.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

_编译原理课程实验报告题目 词法分析器的设计与实现 专业 软件工程 班级 20122012 学号 2012201225 姓名 杨帆 指导教师 曹雪 哈尔滨工程大学软件学院2015年5月实验1:词法分析一、实验目的1.巩固对词法分析的基本功能和原理的认识。2.能够应用自动机的知识进行词法分析。3.理解并处理词法分析中的异常和错误。二、实验内容要求:对如下工作进行展开描述(1) 给出语言的词法规则描述az|AZ|while|do|break|if|goto|continue0|1|2|3|4|5|6|7|8|9|:|*|/|+|-|=|;|)|(|#|n:=|=|=|=|(2) 针对这种单词的状态转换图和程序框图状态转换图程序框图(3) 核心数据结构的设计单词符号种别编码单词符号种别编码n-2-16#0:17while1:=18do220if321continue4=22goto5=24标识符10=25数字11;26*13(27/14)28+15(4) 错误处理A.输入的字符串为数字,数字大于32767,在对应的数字段显示”Error in row a!”(a 为字符串的队列号)。B.输入的字符不在定义中,输出结果会显示”Error in row a!”(a 为字符串的队列号)。三、实验结果要求:将实验获得的结果进行描述,基本内容包括:(1) 针对某测试程序输出其词法分析结果;(2) 输出针对此测试程序对应的词法错误报告;(3) 输出针对此测试程序对应的符号表。注:其中的测试样例自行产生。A. 代码及分析代码:#includeiostream using namespace std;char prog100,token20; char ch; int syn,p,m=0,n,row,sum=0; char *rwtab6=while,do,if,continue,goto,break; void scaner() for(n=0;n=a&ch=A&ch=0&ch=a&ch=A&ch=Z) tokenm+=ch; ch=progp+; tokenm+=0; p-; syn=10; for(n=0;n=0&ch=0&ch32767) syn=-1; else switch(ch) case) syn=21; tokenm+=ch; else if(ch=) syn=22; tokenm+=ch; else syn=23;p-; break; case:m=0;tokenm+=ch; ch=progp+; if(ch=) syn=24; tokenm+=ch; else syn=20; p-; break; case:m=0;tokenm+=ch; ch=progp+; if(ch=) syn=18; tokenm+=ch; else syn=17; p-; break;case*:syn=13;token0=ch;break; case/:syn=14;token0=ch;break; case+:syn=15;token0=ch;break; case-:syn=16;token0=ch;break; case=:syn=25;token0=ch;break; case;:syn=26;token0=ch;break; case(:syn=27;token0=ch;break; case):syn=28;token0=ch;break; case#:syn=0;token0=ch;break; casen:syn=-2;break; default: syn=-1;break; void main() p=0; row=1; cout请输入字符串:endl; do cin.get(ch); progp+=ch; while(ch!=#);cout字符串输出结果为:endl; p=0; do scaner(); switch(syn) case 11: cout(syn,sum)endl; break; case -1: coutError in row row!endl; break; case -2: row=row+;break; default: cout(syn,token)20if321continue4=22goto5=24标识符10=25数字11;26*13(27/14)28+15四、实验中遇到的问题总结要求:主要阐述两方面的问题(一) 实验过程中遇到的问题如何解决的? 本次实验中主要有以下两方面。1.代码编写困难 自己的代码基础不好,因此在自己编写的过程中不清楚如何下手,出现了很多错误,对输入的字符不能够很好的处理,对标识符的判断以及关键字的定义都出现了很多问题,因此在老师的建议下,进行了网上浏览与查找分析,最后使用了网络上的已写好的代码进行实验分析。2.代码分析不够 在使用网络上下载的代码后,由于不是自己编写的代码,自己分析就有些困难,有一些细节的处理不能及时思考清晰,一知半解。在老师的帮助下,充分理解了代码中的问题。(二)思考题的思考与分析思考题1:你编写的程序是如何体现自动机的,这样做有什么好处?将词的类型作为状态,每个字符作为状态转换的条件。好处为不必考虑特殊情况,可以将整个输入文本作为一个字符串直接处理得到结果。思考题2:符号表是怎么处理的,可不可以提出改进方法?符号表中罗列了每一个显示的符号。改进为可以将长度为2和1的符号区分在两个表里,采用贪心匹配法,对于两个连续的符号,即先考虑它是否在长度为2 的符号表里,在考虑是否在长度为1 的符号表里。五、实验体会 通过进行本次词法分析器的实验,我基本能够应用自动机的知识进行词法分析,并能够理解以及处理词法分析器中的异常和错误,这次实验让我对词法分析的基本功能和原理进行了知识的巩固。当然在实验的过程中,出现了很多问题。比如代码的书写、词法的错误判断等。本次实验我也清楚了自己的词法分析的知识

温馨提示

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

评论

0/150

提交评论