- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
编译原理课程实验报告
实验1:词法分析
姓名
赵璐媛
院系
软件学院
学号
1143710516
任课教师
陈鄞
指导教师
陈鄞
实验地点
软件学院三楼机房
实验时间
10月23日下午78节
实验课表现
出勤、表现得分
实验报告
得分
实验总分
操作结果得分
一、需求分析
得分
要求:阐述词法分析系统所要完成的功能
通过文件导入测试用例,可以通过用户界面显示并编辑测试用例。
通过文件导入DFA转换表,并在用户界面中打印转换表。
识别代码中的单词,打印对应的token序列。
识别的单词包括以下几类:
标识符(由大小写字母、数字以及下划线组成,但必须以字母或者下划线开头)
关键字(①类型关键字:整型、浮点型、布尔型、记录型;②分支结构中的if和else;③循环结构中的do和while;④过程声明和调用中的关键字)
运算符(①算术运算符;②关系运算符;③逻辑运算)
界符(①用于赋值语句的界符,如“=”;②用于句子结尾的界符,如“;”;③用于数组表示的界符,如“[”和“]”;④用于浮点数表示的界符“.”)
常数(十进制无符号整数和浮点数,包括科学计数法;八进制和十六进制整数;字符串常数和字符常数等)
注释(/*……*/形式)
二、文法设计
得分
要求:对如下内容展开描述
给出各类单词的词法规则描述(正则文法或正则表达式)
各类单词的转换图
标识符和关键字
(_|letter)(_|letter|digit)*
运算符
以运算符“+”,“+=”,“++”的识别为例,其他运算符与此类似
所有可以被识别的关系运算符有:“!=”,“==”,“”,“=”,“”,“=”
所有可以被识别的算术运算符有:“+”,“+=”,“++”,“-”,“-=”,“--”,“*”,“*=”,“%”,“%=”,“/”,“/=”
所有可以被识别的逻辑运算符有:“|”,“”,“^”(按位或、与、异或),“||”,“”,“!”
界符
界符的文法与转换图较为简单,不再详述
所有可以被识别的界符:“=”,“;”,“[”,“]”,“(”,“)”,“{”,“}”,“,”,“;”
常数
浮点数
((1-9)(0-9)*.(0-9)*)|(.(0-9)+)
十进制数
0|((((1-9)(0-9)*.(0-9)*)|(.(0-9)+))(ε|(e(+|-|ε)(0-9)+)))
下划线部分为十进制浮点数
八进制数
0(1-7)+
十六进制数
0x(1-9|a-f)+
浮点数为终态2,十进制数为终态1、5、6,八进制数为终态7,十六进制数为终态9。
字符串常数
“(ε|(letter*letter))”红色letter代表除了\字符外的字符,因\”是转义字符
字符常数
‘(\\(a|b|f|r|t|v|n|\\|’|”))|letter)’同时对转义字符进行识别
注释
/\*letter*\*/
三、系统设计
得分
要求:分为系统概要设计和系统详细设计。
(1)系统概要设计:给出必要的系统宏观层面设计图,如系统框架图、数据流图、功能模块图等以及相应的文字说明。
(2)系统详细设计:对如下工作进行展开描述
核心数据结构的设计
主要功能函数说明
程序核心部分的程序流程图
系统概要设计
系统的设计类图如下:(建议放大查看)
在选择了DFA文件和代码文件后,点击分析按钮,由DFAView生成DFA实例,调用DFA实例的doDFA方法对CodeView中的代码进行分析,分析结果传递给OutputView显示。
系统详细设计
系统的核心类为DFA类,DFA类中的table是DFA转换表,map是字符集及每个字符在转换表对应列的下标。
doDFA方法对代码进行分析,每分析出一个单词,则将该单词在代码中的起始下标、终止下标、对应终态码传递给getTokenDiscrible方法,获取该单词Token的字符串描述。
Token类中记录了总的状态数和所有关键字,getToken方法判断某一个状态值是否是终态,若是终态返回对应的种别码,若不是则返回null。
doDFA方法的分析流程图如下:(建议放大查看)
四、系统实现及结果分析
得分
要求:对如下内容展开描述。
系统实现过程中遇到的问题;
针对某测试程序输出其词法分析结果;
输出针对此测试程序对应的词法错误报告;
对实验结果进行分析。
注:其中的测试样例自行产生。
系统实现过程中遇到的问题
刚开始时,遇到了字符串和注释中如果有空格,会将字符串和注释分成多个单词的问题。然后进行改进,遇到空格等空白字符,判断一下状态码,如果是在识别字符串或注释的过程中,则不对其做处理,解决了这个问题。
测试程序及测试结果
测试程序:
#includestdio.h
intmain()
{
/*number*/
intnum=10;
intx
您可能关注的文档
- 美容药物学补充阅读-自由基学习资料.pptx
- 美容药物学第00章 绪论-2015学习资料.pptx
- 美容药物学第01章 皮肤保养基础-2015学习资料.pptx
- 美容药物学第03章 保湿-2015学习资料.pptx
- 美容药物学第04章 防晒-2015学习资料.pptx
- 美容药物学第6章 祛痘-2015学习资料.pptx
- IBM AIX & Linux 课件 chap2-程序包原理及linux package.ppt
- IBM AIX & Linux 课件 chap3-设备管理与驱动.ppt
- IBM AIX & Linux 课件 chap4-存储管理与文件系统.ppt
- IBM AIX & Linux 课件 chap7-AIX shell 高级程序设计基础.ppt
文档评论(0)