词法分析器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《编译原理》课程

实验报告

题目L语言的词法分析程序

专业计算机科学与技术

班级2014级

学号

姓名张衡

石河子大学信息学院计算机系

2016年10月30日

一. 实验序号:《编译原理》词法分析实验

二. 实验题目:L语言的词法分析程序

三. 实验日期: 2016年10月30日

四. 实验环境(操作系统,开发语言)

操作系统:Windows

开发语言:C

五. 实验要求

1)词法分析程序主要识别用L语言编写的源程序中的各类单词,并以所在

行号和二元式(单词类别,单词值)的形式输出

2)标识符类单词词法规则“以字母或下划线开头,后面可以跟字母、数字、

下划线”;“区分大小写字母“;”长度最多为8个字符“。

3)常量类单词分为数值型常量、字符型常量、字符串常量。

1.数值型常量分为整型常量和小数常量。整型常量有十进制(0-9组成)

和十六进制(0-9、A-F组成)两种;小数常量分为定点小数和科学

计数法两种,其中定点小数由0-9和一个小数点组成,科学记数法由

0-9、小数点和E组成。

2.字符型常量由一对<>带一个字符组成。

3.字符串常量由一对“”带一个或多个字符组成。

4)运算符有算术运算符(+、-、*、/、**);关系运算符(= =、>、>=、<、

<=、!=)。

5)分界符有;、,、和(、)。每条语句以;结束。

6)进行单词拼写错误检查,并输出错误信息和所在行号。

六. 实验步骤

1)用L语言编写测试用例源程序,用C语言编写词法分析程序。

2)运行词法分析程序,读入L语言的测试用例源程序,进行词法分析。

3)设立断点,单步运行词法分析程序,依次单个输出单词。分析和理解词

法分析程序,解释词法分析程序中的数据和变量变化的原因和输出结果。

4)根据上述“实验要求”修改或编写词法分析程序,同时也应修改L语言

测试用例源程序中的相应的单词。

5)运行修改后的词法分析程序,读入修改后的L语言测试用例源程序,进

行词法分析。

七.L语言词法分析程序的有限自动机(状态转换图表示)

状态转换图如下页所示:

.

数字

数字

其他

数字

X

非数字

数字

1

2

4

3

5

6

9

13

7

14

.

数字 其他

数字

e

8 1-9或A -F

其他

字母或者 _ 字母或者 _

其他

10

11

12

字符

其他

字符

15

<

字符

>

其他

=

16

其他

非=,字符

17

>

非=

=

18

其他

转下页

=

其他

=

19

23

3

25

22

2

24

28 6

21

=

非!

*

*

其他

0 27

30

32

34

36

非*

38

/

;

其他

其他

其他

其他

其他

其他

其他

八.实验结果(测试用例源程序,运行结果截图)

1、测试用例程序

begin

"string";

if(num1>num2)

studn&t=num2=16;

texttttt4=0XA&;

if(num1==num2)

peak1=a+b*c/d;

peak2**;

grade

for(i=1;i<=2;)

name1>=name2;

grade1!=grade2;

sdkfajslw;

text1=9;text2=32.25;text3=3.34125e3; text4=0XA6;

BEGIN

,"stringfgdf";<>;

end

end;

2、运行结果:

2.1 初始页面

2.2读入字符串

2.3 词法分析结果(包括错误检查)

九.实验体会(词法分析程序修改的地方,解决问题的方法、心得体会等)本次词法分析器课程设计,写了两个周,终于完成了,写完了之后看着自己做的词法分析器心里还是有一点小小的满足感。毕竟是写完了,感觉不到有啥困难,但回想一下整个词法分析器的设计过程,其实问题接踵而至,搞得我焦头烂额,尤其是一个小的功能写错了之后,反复的查找错误,调试程序,周六周日晚上为了解决掉它加班到晚上三四点,最后发现三个小时左右也就顺利完成了三种类型左右的单词识别,我想这就是以后一个作为程序员该有的工作责任吧--加班加点!

在第一节实验课老师给我们下发词法分析器的课程设计任务时,老师给我们讲解了好多次才听懂实验到底是干嘛的,顿时感觉好难,该怎么写,一节课在思考词法分析器如何设计,于是很纠结。于是晚上回到宿舍,我把课本第四章仔细的看了两遍,感觉有点头绪,整个的目标与方向有大概的了解,但是具体的数据结构还不是很清晰,这是遇到的第一个问题,于是我在想,要不直接把字符串到数组里,然后对数组进行挨个处理,方便简单,于是我就确定了大致的数据结构。后来就是处理空格和回车的问题,因为读到数组里面字符串包含空格和回车,于是我设置全局变量指针来定位数组,同时每判断一个字符就做是否为空处理,如果为空,全局变量加一后移,回车我当做一个字符处理,每碰到一个回车,全局变量加一后移,进行下一个分析。接下来我又碰到一个问题,就是如何保存识别出来的单词?我想了一下,结果是通过临时数组来存

相关文档
最新文档