- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
+*编译原理课程实验报告
实验1:词法分析
姓名 院系 软件学院 学号
任课教师 陈鄞老师 指导教师 郭勇老师
实验地点 软件学院三楼机房 实验时间 2016/10/23/星期日
出勤、表现得分 实验报告
实验课表现 实验总分
操作结果得分 得分
一、需求分析 得分
要求:阐述词法分析系统所要完成的功能
词法分析是编译的第一个阶段,主要任务是读入源程序的输入字符,将它们组成词素,生成并输出一个
词法单元序列,每个词法单元对应于一个词素。
在本词法单元中,基本功能要求实现以下几类单词:
标识符(由大小写字母、数字以及下划线组成,但必须以字母或者下划线开头)
关键字(①类型关键字:整型、浮点型、布尔型、记录型;②分支结构中的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",
"return","signed","unsigned","volatile"。
运算符(①算术运算符;②关系运算符;③逻辑运算)
本词法分析器可以识别的运算符:
“ * ” 乘法运算符;“ / ” 除法运算符;“ % ” 取余运算符; “ + ” 加法运算符;“ - ” 减法运算符;
<< 左移运算符;>> 右移运算符;<、<=、>、>= 关系运算符; “ == ” 等于运算符;
“ != ” 不等于运算符; “ & ” 按位与运算符 ;“ ∧ ” 按位异或运算符; “ | ” 按位或运算符;
“&&” 逻辑与运算符; “ || ” 逻辑或运算符;” ! “ 非运算符;
=、 +=、 -=、 *=、 /= 、 %=、 &=、 ^=、 |=、 <<=、 >>= 赋值运算符。
界符(①用于赋值语句的界符,如“= ”;②用于句子结尾的界符,如“;”;③用于数组表示的界符,
如“[”和“] ”;④用于浮点数表示的界符 “.”)
本词法分析器可以识别的界符:
'{','}','[',']','(',')',',',';','.','=','?',':'
常数(无符号整数和浮点数,包括科学计数法,字符串常数等)
注释 (/* „„*/形式)
八进制数和十六进制数
字符常数
二、文法设计 得分
要求:对如下内容展开描述
(1) 给出各类单词的词法规则描述(正则文法或正则表达式)
(2 ) 各类单词的转换图
(1) 1)标识符的正则定义:
letter_ -> [a-zA-Z_]
digit -> [0-9]
id -> letter_(letter_|digit)*
说明:关键字的正则定义与标识符是一样的,但是为了区别关键字和标识符,我采取初始化时就将各个关键
字保留起来,识别时先进行判断是不是关键字,如果不是关键字再进行判断是不是标识符。
2 )运算符的正则定义:
operator -> + | - | * | / | += | -= | *= | /=
文档评论(0)