资源描述:
《编译原理实验报告-词法分析.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、+*编译原理课程实验报告实验1:词法分析姓名院系软件学院学号任课教师陈鄞老师指导教师郭勇老师实验地点软件学院三楼机房实验时间2016/10/23/星期日实验课表现出勤、表现得分实验报告得分实验总分操作结果得分一、需求分析得分要求:阐述词法分析系统所要完成的功能词法分析是编译的第一个阶段,主要任务是读入源程序的输入字符,将它们组成词素,生成并输出一个词法单元序列,每个词法单元对应于一个词素。在本词法单元中,基本功能要求实现以下几类单词:Ø标识符(由大小写字母、数字以及下划线组成,但必须以字母或者下划线开头)Ø关键字(①类型关键字:整型、浮点型、布尔型、记录型;②分支结构中
2、的if和else;③循环结构中的do和while;④过程声明和调用中的关键字)本词法分析器可以识别C语言的32个关键字,其中包括:"char","int","short","long","float","double","bool","enum","struct","if","else","do","while","switch","case","continue","for","void","goto","extern","const","typedef","union","static","auto","register","default","sizeof","r
3、eturn","signed","unsigned","volatile"。Ø运算符(①算术运算符;②关系运算符;③逻辑运算)本词法分析器可以识别的运算符:“*”乘法运算符;“/”除法运算符;“%”取余运算符;“+”加法运算符;“-”减法运算符;<<左移运算符;>>右移运算符;<、<=、>、>=关系运算符;“==”等于运算符;“!=”不等于运算符;“&”按位与运算符;“∧”按位异或运算符;“
4、”按位或运算符;“&&”逻辑与运算符;“
5、
6、”逻辑或运算符;”!“非运算符;=、+=、-=、*=、/=、%=、&=、^=、
7、=、<<=、>>=赋值运算符。Ø界符(①用于赋值语句的界
8、符,如“=”;②用于句子结尾的界符,如“;”;③用于数组表示的界符,如“[”和“]”;④用于浮点数表示的界符“.”)本词法分析器可以识别的界符:'{','}','[',']','(',')',',',';','.','=','?',':'Ø常数(无符号整数和浮点数,包括科学计数法,字符串常数等)Ø注释(/*……*/形式)Ø八进制数和十六进制数Ø字符常数二、文法设计得分要求:对如下内容展开描述(1)给出各类单词的词法规则描述(正则文法或正则表达式)(2)各类单词的转换图(1)1)标识符的正则定义:letter_->[a-zA-Z_]digit->[0-9]id->lett
9、er_(letter_
10、digit)*说明:关键字的正则定义与标识符是一样的,但是为了区别关键字和标识符,我采取初始化时就将各个关键字保留起来,识别时先进行判断是不是关键字,如果不是关键字再进行判断是不是标识符。2)运算符的正则定义:operator->+
11、-
12、*
13、/
14、+=
15、-=
16、*=
17、/=
18、%
19、++
20、--
21、!=
22、==
23、>
24、<
25、>=
26、<=
27、>>
28、<<
29、^
30、
31、
32、&
33、&&
34、
35、
36、
37、!3)界符的正则定义:Boundary->{
38、}
39、[
40、]
41、(
42、)
43、,
44、;
45、:
46、?
47、~4)常数的正则定义:digit->[0-9]digits->digitdigit*number->digits(.
48、digits)?(E[+-]?digits)?5)注释的正则定义:NOTE->/*other*/Other指代任意字符6)八进制数和十六进制数的正则定义:OCT->0(1
49、2
50、3
51、4
52、5
53、6
54、7)(0
55、1
56、2
57、3
58、4
59、5
60、6
61、7)*HEX->0x(1
62、…
63、9
64、a
65、…
66、f)(0
67、…
68、9
69、a
70、…
71、f)*(2)1)标识符和关键字的转换图2)运算符的转换图说明:因为运算符过多,本出的转换图只给出部分,其他可类似构造。3)界符的转换图4)常数的转换图有问题。5)注释的转换图6)八进制的转换图:十六进制的转换图:字符常量的转换图:注:状态1到状态3的letter是a-z的字母状态2
72、到3的letter’是指可以构成转义字符的字母,比如a,t,b等。三、系统设计得分要求:分为系统概要设计和系统详细设计。(1)系统概要设计:给出必要的系统宏观层面设计图,如系统框架图、数据流图、功能模块图等以及相应的文字说明。1)先给出系统的总体数据流图:本词法分析器主要针对C语言的源程序进行识别,可以通过在输入区写入程序,也可以通过文件导入的方式导入程序,经过词法分析器的分析以后输出流为词法单元和DFA转换表。2)系统框架:说明:本词法分析器主要包括三大块,分别是符号表(用于储存符号),控制器(核心部分,用于识别各个单词),用户界面(v