编译原理实验.docx

编译原理实验.docx

ID:62783809

大小:161.24 KB

页数:35页

时间:2021-05-25

编译原理实验.docx_第1页
编译原理实验.docx_第2页
编译原理实验.docx_第3页
编译原理实验.docx_第4页
编译原理实验.docx_第5页
资源描述:

《编译原理实验.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验一:简易扫描器的DFA设计与实现实验原理:词法分析器的工作原理实验内容:用程序模拟实现一个简易扫描器的工作过程,从输入字符串到分析完以后以(CLASSVALUE的标准格式输出实验要求:1.源程序设计语言G[v标志符>]:<标志符>f<标志符><字母>

2、v标志符><下划线>

3、v标志符><数字>

4、<字母>

5、<下划线><常数>f<整数>V整数>f0

6、<非零数字><乏整数><泛整数>fV数字>

7、<数字><乏整数>

8、£V关系符>f<

9、<=

10、=

11、>

12、>=

13、<>V字母>A

14、B

15、C

16、D

17、E

18、F

19、G

20、H

21、I

22、J

23、K

24、L

25、M

26、N

27、O

28、P

29、Q

30、R

31、S

32、T

33、U

34、V

35、W

36、X

37、Y

38、Z

39、

40、a

41、b

42、c

43、d

44、e

45、f

46、g

47、h

48、i

49、j

50、k

51、l

52、m

53、n

54、o

55、p

56、q

57、r

58、s

59、t

60、u

61、v

62、w

63、x

64、y

65、zv非零数字>f1

66、2

67、3

68、4

69、5

70、6

71、7

72、8

73、9v数字>fv非零数字>

74、02.能识别下表所列的单词符号:单词符号类别编码类别码的助记符单词之值begin1BEGINend2ENDif3IFthen4THENelse5ELSE标识符6ID整数7INT数字串<8LT<=9LE=10EQ<>11NE>12GT>=13GE+14ADD-15SUB*16MUL/17DIV•18SEM(19LB)20RB3.能跳过源程序中的空白格:两个单词之间的任何空格,制表符,回车,

75、换行都是白空格,除了用来分隔单词以夕卜,没有意义;4.能跳过注释:1)接连出现的/*到下一次接连出现的*/之间的任何文字都是注释(多行);2)从某行接连出现的//到该行的结尾的任何文字都是注释(单行)。实验步骤:1.DFA及相关语义过程;2.流程图(或程序的基本框架);3.根据实验要求编写一个能够完全遍历整个词法分析程序的输入字符串;4.把课本P81程序3-4的函数编写完整。OUT(DIV,””1.DFA及相关语义过程START非/或非*非换行空格非空格空格8非*/*4换行歹OUT(SUB'”)OUTSEM”)OUT(LB””)OUT(RB,””)23OUT(

76、ADD,””2425OUT(MUL,””)I/I'/

77、1!129其他字母i!5非/6字母,d非字母和d<18十一=非=和>非dC=0时OUT(ID,TOKEN1012xd14亠亠"JOUT(EQ,2219-C不=0时OUT(c,”OUT(INT,”TOKEOUT(LE,””)OUT(NE,””)OUT(LT,””)OUT(GE,””)OUT(GT,””)2.流程图(或程序的基本框架)开始是否文件尾/N£//////除去空格换行符合无意义字符/:1:L卜1除去注释1£111识别ID或标识符1-I111识别数字1\\\识别符口号*3.代码#define

78、_CRT_SECURE_NO_WARNINGS#include#include#include#defineBEGIN1#defineEND2#defineIF3#defineTHEN4#defineELSE5#defineID6#defineINT7#defineLT8#defineLE9#defineEQ10#defineNE11#defineGT12#defineGE13#defineADD14#defineSUB15#defineMUL16#defineDIV17#defineSEM18#defi

79、neLB19#defineRB20charTOKEN[20];intlookup(char*);//查找标识符voidout(int,char*);//输岀扫描结果voidreport_error();//错误信息//externintlookup(char*);intlookup(char*temp){if(strcmp(temp,"begin")==0)returnBEGIN;elseif(strcmp(temp,"end")==0)returnENDelseif(strcmp(temp,"if")==0)returnIF;elseif(strcmp(te

80、mp,"then")==0)returnTHENelseif(strcmp(temp,"else")==0)returnELSEelsereturn0;}//externvoidout(int,char*);voidout(inta,char*s){switch(a){caseBEGIN:printf("<%s,%s>","BEGIN","begin"casebreak;ENDprintf("<%s,%s>","END","end");casebreak;IF:printf(break;"<%s,%s>","IF","if");caseTHENpr

81、intf(break;"<%s,%s>

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

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

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