编译原理实验报告-词法分析.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

155****4925 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档