编译原理实验报告-词法分析.doc
文本预览下载声明
+*编译原理课程实验报告
实验1:词法分析
姓名 院系 软件学院 学号 任课教师 陈鄞老师 指导教师 郭勇老师 实验地点 软件学院三楼机房 实验时间 2016/10/23/星期日 实验课表现 出勤、表现得分 实验报告
得分 实验总分 操作结果得分 一、需求分析 得分 要求:阐述词法分析系统所要完成的功能
词法分析是编译的第一个阶段,主要任务是读入源程序的输入字符,将它们组成词素,生成并输出一个词法单元序列,每个词法单元对应于一个词素。
在本词法单元中
标识符(由大小写字母、数字以及下划线组成,但必须以字母或者下划线开头)
关键字(①类型关键字:整型、浮点型、布尔型、记录型;②分支结构中的if和else;③循环结构中的do和while;④过程声明和调用中的关键字)
本词法分析器可以识别C语言的2个关键字其中包括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, return,signed,unsigned,volatile。
运算符(①算术运算符;②关系运算符;③逻辑运算)
本词法分析器可以识别的运算符
“ * ” 乘法运算符;“ / ” 除法运算符;“ % ” 取余运算符 “ + ” 加法运算符;“ - ” 减法运算符 左移运算符; 右移运算符、=、、= 关系运算符 “ == ” 等于运算符;
“ != ” 不等于运算符 “ ” 按位与运算符 “ ∧ ” 按位异或运算符 “ | ” 按位或运算符
“” 逻辑与运算符 “ || ” 逻辑或运算符” ! “ 非运算符=、 +=、 -=、 *=、 /=、 %=、 =、 ^=、 |=、 =、 = 赋值运算符。
本词法分析器可以识别的
{,},[,],(,),,,;,.,=,?,:
常数(无符号整数和浮点数,包括科学计数法,字符串常数等)
注释(/*……*/形式)
八进制数和十六进制数
字符常数
1)标识符的正则定义:
letter_ - [a-zA-Z_]
digit - [0-9]
id - letter_(letter_|digit)*
说明关键字的正则定义与标识符是一样的但是为了区别关键字和标识符我采取初始化时就将各个关键字保留起来识别时先进行判断是不是关键字如果不是关键字再进行判断是不是标识符
2)运算符的正则定义:
operator - + | - | * | / | += | -= | *= | /= | % | ++ | -- | != | == | | | = | = | | | ^ | | | | | || | !
3) 界符的正则定义:
Boundary - { | } | [ | ] | ( | ) | , | ; | : | ? | ~
4)常数的正则定义
digit - [0-9]
digits - digit digit*
number - digits (.digits)? (E [+-]? digits)?
5)注释的正则定义
NOTE - /*other*/
Other指代任意字符6)八进制数和
OCT - 0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*
HEX- 0x(1|…|9|a|…|f) (0|…|9|a|…|f)*
(2)1)标识符和关键字的转换图
2)运算符的转换图
说明:因为运算符过多,本出的转换图只给出部分,其他可类似构造。
3)界符的转换图
4)常数的转换图
有问题。
5)注释的转换图
6)八进制的转换图:
十六进制的转换图:
字符常量的转换图:
注:状态1到状态3的letter是a-z的字母
状态2到3的letter’是指可以构成转义字符的字母,比如a,t,b等。
三、系统设计 得分 要求:分为系统概要设计和系统详细设计。
系统概要设计:给出必要的系统宏观层面设计图,如系统框架图、数据流图、功能模块图等以及相应的文字说明。
先给出系统的总体数据流图:
本词法分析器主要针对C语言的源程序进行识别,可以通过在输入区写入程序,也可以通过文件导入的方式导入程序
显示全部