欢迎来到天天文库
浏览记录
ID:55108786
大小:51.50 KB
页数:7页
时间:2020-04-27
《实验1-词法分析.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、河南工业大学实验报告课程名称编译原理_实验项目实验一词法分析院系____信息科学与工程学院____专业班级计科F1402班姓名苏朋辉学号1指导老师侯惠芳日期2017.4.20批改日期成绩一.实验目的1.深入理解有限自动机及其应用2.掌握根据语言的词法规则构造识别其单词的有限自动机的方法3.基本掌握词法分析程序的开发。二.实验内容及要求(题一)编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(
2、遇到错误时可显示“Error”,然后跳过错误部分继续显示)(具体参照实验指导中的要求)(题二)根据给出能够识别某语言中各类单词的DFA:识别的单词种类可以有:标识符、数字串、单分界符、双分界符等。构造识别单词的自动机根据构成规则对程序语言的单词按类构造出相应的状态转换图对各类单词的状态转换图合并,构成一个能识别语言所有单词的状态转换图。合并步骤为:(1)将各类单词的状态转换图的初始状态合并为一个唯一的初态;(2)化简调整状态冲突和对冲突状态重新编号;(3)如有必要,增加出错状态。用数据中心法实现有限自动机
3、,生成词法分析程序。注:状态转换表法又称数据中心法,是把状态转换图看作一种数据结构(状态转换表),由控制程序控制字符在其上运行,从而完成词法分析。用转换表的优点是程序短,但占存储空间多,直接转向法的优缺点正好与此相反。(题三)根据给出能够识别某语言中各类单词的DFA:根据给出能够识别某语言中各类单词的DFA:识别的单词种类可以有:标识符、数字串、单分界符、双分界符等。构造识别单词的自动机根据构成规则对程序语言的单词按类构造出相应的状态转换图对各类单词的状态转换图合并,构成一个能识别语言所有单词的状态转换图
4、。合并步骤为:(1)将各类单词的状态转换图的初始状态合并为一个唯一的初态;(2)化简调整状态冲突和对冲突状态重新编号;(3)如有必要,增加出错状态。用直接转向法实现有限自动机,生成词法分析程序注:直接转向法又称程序中心法,是把状态转换图看成一个流程图,从状态转换图的初态开始,对它的每一个状态结点都编一段相应的程序。(题四)编制一个能够分析三种整数、标识符和主要关键字的词法分析器。实验要求1根据以下的正规式,编制正规文法,画出状态图标识符<字母>(<字母>
5、<数字字符>)*十进制整数0
6、(1
7、2
8、3
9、4
10、5
11、
12、6
13、7
14、8
15、9)(0
16、1
17、2
18、3
19、4
20、5
21、6
22、7
23、8
24、9)*八进制整数0(1
25、2
26、3
27、4
28、5
29、6
30、7)(0
31、1
32、2
33、3
34、4
35、5
36、6
37、7)*十六进制整数0x(0
38、1
39、2
40、3
41、4
42、5
43、6
44、7
45、8
46、9
47、a
48、b
49、c
50、d
51、e
52、f)(0
53、1
54、2
55、3
56、4
57、5
58、6
59、7
60、8
61、9
62、a
63、b
64、c
65、d
66、e
67、f)*关键字ifthenelsewhiledo2根据状态图,设计词法分析函数intscan(),完成以下功能:1)从键盘读入数据,分析出一个单词。2)返回单词种别(用整数表示),3)返回单词属性(不同的属性可以放在不同的全局变
68、量中)。3编写测试程序,反复调用函数scan(),输出单词种别和属性。一.实验过程3.1词法分析器的功能和输出格式词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值)。本实验中,采用的是一类符号一种别码的方式。如源程序为C语言。输入如下一段:main(){inta,b,c=2;a=10;b=a+20;c=a+b/c;}#3.2单词的BNF表示<标识符>-><字母><字母数字串><字母数字串>-><字母><字母数字串>
69、<数字><字母数字串>
70、
71、<下划线><字母数字串>
72、ε<无符号整数>-><数字><数字串><数字串>-><数字><数字串>
73、ε<加法运算符>->+<减法运算符>->-<大于关系运算符>->><大于等于关系运算符>->>=由此可知,需将单词分为五种:关键字1标识符2常数3运算符4分隔符5printfa0+,mainb1_;intc2*(ifstudent3/)thensum4={elsek5>}returnm6<….….….7>=8<=9!=3.3“超前搜索”方法词法分析时,常常会用到超前搜索方法。如当前待分析字符串为“a>+”,
74、当前字符为’>’,此时,分析器倒底是将其分析为大于关系运算符还是大于等于关系运算符呢?显然,只有知道下一个字符是什么才能下结论。于是分析器读入下一个字符’+’,这时可知应将’>’解释为大于运算符。但此时,超前读了一个字符’+’,所以要回退一个字符,词法分析器才能正常运行。在分析标识符,无符号整数等时也有类似情况。3.4部分函数说明1.intlookup(char*TOKEN) 关键字匹配函数,查询所述程序中的关键字2.void
此文档下载收益归作者所有