- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理实验
词法分析程序构造原理与实现技术
目录
TOC \o 1-3 \h \z \u 引言 3
一、实验目的 3
二、实验环境 3
三、实验内容 3
四、实验要求 4
五、程序功能描述 4
5.1 输入输出 4
5.2大小写不敏感 5
5.3识别大多数常用程序字符 5
5.4注释的处理 5
5.5 错误检查和处理 5
六、主要数据结构 6
七、程序结构描述 6
7.1各单词符号的类别编码 6
7.2程序总体以及局部执行图 6
7.3设计方法 8
7.4函数定义及函数之间的调用关系 8
八、程序测试 8
代码附录 12
引言
本课程开展研究性教学的目的是,在教师的引导下以问题回朔与思维启发的方式,使学生在不断的探究过程中掌握编译程序设计和构造的基本原理和实现技术,启迪学生的抽象思维、激发学生的学习兴趣、培养学生的探究精神和专业素养,从而提高学生发现问题、分析问题和解决问题的能力。
一、实验目的
解决正则文法到状态转换图的转化问题
掌握正则文法及其状态转换图的基本概念,正则表达式及有限自动机的基本概念
深入理解理论对实践的指导作用:基本原理、实现技术和方法的正确运用
掌握正规文法构造相应的状态转换图的基本方法和正则表达式构造有限自动机的基本方法及不确定有限自动机确定化的基本方法
完成词法分析程序的设计与编写
二、实验环境
软件:
操作系统:WINDOWS 8
应用软件:VC6.0
三、实验内容
1、教学安排内容:
完成以下正则文法所描述的 Pascal 语言子集单词符号的词法分析程序。
标识符→字母︱ 标识符字母︱ 标识符数字
无符号整数→数字︱ 无符号整数数字
单字符分界符 →+ ︱- ︱* ︱; ︱(︱)
双字符分界符→大于=︱小于=︱小于︱冒号=︱斜竖*
小于→ 等于→= 大于→ 冒号 →: 斜竖 →/
该语言的保留字 :begin end if then else for do while and or not
2、在此基础上,我自己新完善了一下词法分析处理:
1)新增保留字:return break main
2)扩充可识别的标识符文法:
标识符→标识符下划线字母︱ 标识符下划线数字
3)新增可识别的经常使用的符号:
如 ︱ ︱ == ︱ != ︱\n(\t)(\r) ︱ %s(%d)( %f) 等,以及数组(形如a[] )还有程序经常出现的{}, 等
四、实验要求
给出各单词符号的类别编码;
词法分析程序应能发现输入串中的错误;
词法分析作为单独一遍编写,词法分析结果为二元式序列组成的中间文件;
设计两个测试用例(尽可能完备),并给出测试结果。
五、程序功能描述
5.1 输入输出
输入:将事先准备好的代码录入txt中,程序将改*.txt进行词法分析
输出:在命令行中以二元组(类别码,TOKEN)显示
5.2大小写不敏感
将纯字母组合中的大写字母转换成小写后,在保留字数组中查找是否是系统保留字
5.3识别大多数常用程序字符
能够识别C语言中常见的 \n \r \t , %s %d %f, 单引号,双引号, 逻辑运算符 以及形如a[]的数组的符号等。
5.4注释的处理
当输入文件中出现了/*的字符串之后,程序会自动忽略之后的输入字符串,直到遇*/,但程序会输出/*
当输入文件中出现了//的字符串之后,程序会自动忽略之后的输入字符串,直到遇回车字符后,则判断为注释结束,但程序会输出//
5.5 错误检查和处理
当输入串为未定义的字符时,在输出文件中显示“Error!”,如输入¥
六、主要数据结构
主要是利用数组,进行保留字的查询与将符合某个正则文法的字符归结到一起。
七、程序结构描述
7.1各单词符号的类别编码
单词符号
类别码
单词符号
类别码
begin
1
:=
23
end
2
+
24
if
3
-
25
then
4
*
26
else
5
/
27
for
6
;
28
do
7
(
29
while
8
)
30
and
9
{
31
or
10
}
32
not
11
数组(形如a[])
33
return
12
#
34
break
13
.
35
main
14
,
36
ID标识符
15
形如\n,
37
INT整型
16
形如%s
38
17
39
=
18
!
40
=
19
!=
41
20
==
42
21
’
43
=
22
// | /*
44 | 45
7.2程序总体以及局部执行图
总体流程图:
词法分析流程图:
7.3设计方法
文档评论(0)