实验报告一编写词法分析程序.doc

实验报告一编写词法分析程序.doc

ID:58397527

大小:741.00 KB

页数:28页

时间:2020-05-07

实验报告一编写词法分析程序.doc_第1页
实验报告一编写词法分析程序.doc_第2页
实验报告一编写词法分析程序.doc_第3页
实验报告一编写词法分析程序.doc_第4页
实验报告一编写词法分析程序.doc_第5页
资源描述:

《实验报告一编写词法分析程序.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、.编译原理实验报告实验名称:编写词法分析程序_______实验类型:设计型实验指导教师:专业班级:姓名:学号:实验地点:实验成绩:日期:2017年4月15日专业资料.实验一编写语法分析程序一、实验目的1)通过设计、调试词法分析程序,掌握词法分析程序的设计工具,即有穷自动机,进一步理解自动机理论;2)掌握正则文法和正则表达式转换成有穷自动机的方法及有穷自动机的实现方法;3)会确定词法分析程序的输出形式及标识符与关键字的区分方法;4)加深对课堂教学的理解,提高词法分析方法的实践能力,掌握使用实验环境的技能技巧以及程序的调试方法。二、实验设计

2、1、写出TEST语言每条词法规则对应的正则文法或者正则表达式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、{

35、}5)运算符:+、-、*、/、=、<、>、>=、<=、!=、==正则表达式:+

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、释符:/*(没有连续的*/的任意字符串

85、ℇ)*/专业资料.3、将NFA合并,确定化,化简得到最终的DFA。NFA:DFA:专业资料.三、实验过程1、完成整个实验的先后步骤a)根据TEST语言的词法规则,分别写出每条规则的正则文法或者正则表达式;b)将每一个正则文法或者正则表达式转换为NFA;c)将多个NFA合并后进行确定化并化简;d)根据化简后的DFA画出流程图;e)参阅教材PP.69-71的TEST语言语法规则,确定单词分类、单词输出方案;专业资料.a)编写词法分析程序;b)对下面的TEST语言源程序进行词法分析,将合法单词存入lex

86、.txt,并报告词法错误及其位置。注:不能修改源程序{/*Thisatestprogram.*/intabc;int123;intA$@;inti;intn;intb,c;int2a;inta2;readn;n=012345;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”这类字符串

87、的处理不正确,我之前处理为直接报错说一位以上的数字首位不能为0b)分析原因:问题1,2的原因都是在“/”符号处理时出现的问题导致的,程序中出现bug使得一遇到‘/’就会进入死循环。问题3,不应该直接报错说一位以上的数字首位不能为0,遇到0应该直接输出0这个单词,再接着读数字。c)解决方案:d)对于问题1,2,重新梳理逻辑,一步一步对照流程图和DFA来调试修改代码。对于问题3,遇到0应该直接输出0这个单词,再接着读数字。e)解决结果:成功解决了程序遇到‘/’进入死循环问题和“0123”这类字符串的处理。三、实验结果列出实验结果并进行分析(

88、含分步测试结果)。专业资料.lex.txt文件(存放编译的合法容)容:1{{2/*Thisatestprogram.*//*Thisatestprogram.*/3intint3IDabc3;;4intint4NUM1234;;5intint5IDA5;;6intint6IDi6;;7intint7IDn7;;专业资料.8intint8IDb8IDc8;;9intint9NUM29IDa9;;10intint10IDa210;;11readread11IDn11;;12IDn12==12NUM012NUM1234512;;13forfo

89、r13((13IDi专业资料.13==13NUM113;;13IDi13<=<=13IDn13;;13IDi13==13IDi13++13NUM113))14{{15IDabc15==15IDabc15++

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。