资源描述:
《实验报告一编写词法分析程序.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、.编译原理实验报告实验名称:编写词法分析程序_______实验类型:设计型实验指导教师:专业班级:姓名:学号:实验地点:实验成绩:日期:2017年4月15日专业资料.实验一编写语法分析程序一、实验目的1)通过设计、调试词法分析程序,掌握词法分析程序的设计工具,即有穷自动机,进一步理解自动机理论;2)掌握正则文法和正则表达式转换成有穷自动机的方法及有穷自动机的实现方法;3)会确定词法分析程序的输出形式及标识符与关键字的区分方法;4)加深对课堂教学的理解,提高词法分析方法的实践能力,掌握使用实验环境的技能技巧以及程序的调试方法。二、实验设计1、写出TEST语言每条词法规则对应的正则文法或者正则表
2、达式1)标识符:字母打头,后接任意字母或数字。正则表达式:(a
3、b
4、……
5、z
6、A
7、B……
8、Z)(0
9、1
10、……
11、9
12、a
13、b
14、……
15、z
16、A
17、B……
18、Z)*2)保留字:标符的子集,包括:if,else,for,while,do,int,write,read。正则表达式:if
19、else
20、for
21、while
22、do
23、int
24、write
25、read3)无符号整数:由数字组成,但最高位不能为0,允许一位的0。正则表达式:((1……
26、9)(0
27、1
28、……
29、9)*)
30、04)分界符:(、)、;、{、}正则表达式:(
31、)
32、;
33、{
34、}5)运算符:+、-、*、/、=、<、>、>=、<=、!=、==正则表达式:+
35、-
36、*
37、/
38、
39、=
40、<
41、>
42、>=
43、<=
44、!=
45、==6)注释符:/**/正则表达式:/*(没有连续的*/的任意字符串
46、ℇ)*/2、对每个文法或者正则表达式分别构造NFA专业资料.1)标识符:(a
47、b
48、……
49、z
50、A
51、B……
52、Z)(0
53、1
54、……
55、9
56、a
57、b
58、……
59、z
60、A
61、B……
62、Z)*2)无符号整数:((1
63、2
64、……
65、9)(0
66、1
67、……
68、9)*)
69、03)分界符:(
70、)
71、;
72、{
73、}4)运算符:+
74、-
75、*
76、/
77、=
78、<
79、>
80、>=
81、<=
82、!=
83、==5)注释符:/*(没有连续的*/的任意字符串
84、ℇ)*/专业资料.3、将NFA合并,确定化,化简得到最终的DFA。NFA:DFA:专业资料.三、实验过程1、完成整个实验的先后步
85、骤a)根据TEST语言的词法规则,分别写出每条规则的正则文法或者正则表达式;b)将每一个正则文法或者正则表达式转换为NFA;c)将多个NFA合并后进行确定化并化简;d)根据化简后的DFA画出流程图;e)参阅教材PP.69-71的TEST语言语法规则,确定单词分类、单词输出方案;专业资料.a)编写词法分析程序;b)对下面的TEST语言源程序进行词法分析,将合法单词存入lex.txt,并报告词法错误及其位置。注:不能修改源程序{/*Thisatestprogram.*/intabc;int123;intA$@;inti;intn;intb,c;int2a;inta2;readn;n=012345
86、;for(i=1;i<=n;i=i+1){abc=abc+i;}if(i!=n)n=n+i;if(!n)b=b+c;专业资料./*Theloopendedwriteabc;}2、实验调试记录(问题表现,分析原因,解决方案,解决结果)a)问题表现:1.不能处理除号2.不能处理不完整的注释符3.对于”0123”这类字符串的处理不正确,我之前处理为直接报错说一位以上的数字首位不能为0b)分析原因:问题1,2的原因都是在“/”符号处理时出现的问题导致的,程序中出现bug使得一遇到‘/’就会进入死循环。问题3,不应该直接报错说一位以上的数字首位不能为0,遇到0应该直接输出0这个单词,再接着读数字。c)
87、解决方案:d)对于问题1,2,重新梳理逻辑,一步一步对照流程图和DFA来调试修改代码。对于问题3,遇到0应该直接输出0这个单词,再接着读数字。e)解决结果:成功解决了程序遇到‘/’进入死循环问题和“0123”这类字符串的处理。三、实验结果列出实验结果并进行分析(含分步测试结果)。专业资料.lex.txt文件(存放编译的合法容)容:1{{2/*Thisatestprogram.*//*Thisatestprogram.*/3intint3IDabc3;;4intint4NUM1234;;5intint5IDA5;;6intint6IDi6;;7intint7IDn7;;专业资料.8intint
88、8IDb8IDc8;;9intint9NUM29IDa9;;10intint10IDa210;;11readread11IDn11;;12IDn12==12NUM012NUM1234512;;13forfor13((13IDi专业资料.13==13NUM113;;13IDi13<=<=13IDn13;;13IDi13==13IDi13++13NUM113))14{{15IDabc15==15IDabc15++