词法分析报告

词法分析报告

ID:38811868

大小:82.03 KB

页数:13页

时间:2019-06-19

词法分析报告_第1页
词法分析报告_第2页
词法分析报告_第3页
词法分析报告_第4页
词法分析报告_第5页
资源描述:

《词法分析报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、编译原理实验报告实验一词法分析程序的设计与实现指导教师:姓名:学号:班级:一、实验目的基本掌握计算机语言的词法分析程序的开发方法。二、实验内容编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。三、实验要求1.根据以下的正规式,编制正规文法,画出状态图;标识符<字母>(<字母>

2、<数字字符>)*十进制整数0

3、(1

4、2

5、3

6、4

7、5

8、6

9、7

10、8

11、9)(0

12、1

13、2

14、3

15、4

16、5

17、6

18、7

19、8

20、9)*八进制整数0(0

21、1

22、2

23、3

24、4

25、5

26、6

27、7)(0

28、1

29、2

30、3

31、4

32、5

33、6

34、7)*十六进制整数0(x

35、X)(0

36、1

37、2

38、3

39、4

40、5

41、6

42、7

43、

44、8

45、9

46、a

47、b

48、c

49、d

50、e

51、f)(0

52、1

53、2

54、3

55、4

56、5

57、6

58、7

59、8

60、9

61、a

62、b

63、c

64、d

65、e

66、f)*运算符和分隔符+-*/><=();关键字ifthenelsewhiledo2.根据状态图,设计词法分析函数intscan(),完成以下功能:(1)从输入流(键盘或文件)读入数据,分析出一个单词。(2)返回单词种别(用整数表示),(3)返回单词属性(不同的属性可以放在不同的全局变量中)。3.编写测试程序,循环调用函数scan(),每次调用,获得一个单词的信息。在测试程序中,打印输出单词种别、属性(注意:不要在词法分析函数scan中打印输出!)。四、实

67、验环境微型计算机。Windows操作系统/Linux操作系统。编程语言:C/C++/Java/C#。建议使用VisualC++/Netbeans/Eclipse集成开发环境。五、实验步骤1.根据状态图,设计词法分析算法2.设计函数scan(),实现该算法3.编制测试程序(在本试验中,可以是主函数main())。4.调试程序:输入一组单词,检查输出结果。六、状态图七.测试数据:092+data>0x3f00while八.测试结果九,思考题1.词法分析能否采用空格来区分单词?答:不能,因为比如abc+bcd中没有空格,但这是三个单词。2.程序设计中哪

68、些环节影响词法分析的效率?如何提高效率?答:整个程序都由状态转换图而来。由递归方法实现的状态转换图,影响了整个词法分析器的分析效率,可以考虑使用栈来非递归的实现词法分析。十.实验心得通过词法分析程序的实现,我理解了计算机是怎么去识别一个个单词的,或者可以说是各种命令的。这次实验使我对c语言中文件操作更加了解,了解文件指针的运行情况,还了解了编译原理中有限自动机的概念,根据状态图写程序。十一.源代码#includeusingnamespacestd;#include#defineASG1#defineADD2#

69、defineSUB3#defineMUL4#defineDIV5#defineID6#defineIF7#defineTHEN8#defineWHILE9#defineDO10#defineINT811//八进制#defineINT1012//十进制#defineINT1613#defineSLP14//左括号(#defineSRP15//右括号)#defineSEMI16//分号;#defineLP17//左花括号{#defineRP18//右花括号}#defineINC19//++#defineDECC20//--#defineNEQ21//

70、不等于#defineEQ22//等于#defineJAE23//大于等于#defineJA24//大于#defineJBE25//小于等于#defineJB26//小于structword{intkind;intvalue;};intfpoint;//文件字符指针intnum_token;//一个单词中的字符数量,主要是数字长度char*token;fstreamfile;//所要读取的文件wordhandle_identifier(char*ch)//处理标识符(包括关键字){structwordre;//返回值////////////////

71、//////////关键字///////////////////////////if(strcmp(ch,"if")==0){re.kind=IF;re.value=0;returnre;}if(strcmp(ch,"then")==0){re.kind=THEN;re.value=0;returnre;}if(strcmp(ch,"while")==0){re.kind=WHILE;re.value=0;returnre;}if(strcmp(ch,"do")==0){re.kind=DO;re.value=0;returnre;}//////

72、////////////////////标识符///////////////////////////re.kind=ID;re.valu

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

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

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