编译原理实验报告(及指导书)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《编译原理》实验指导书
寿永熙编
内蒙古工业大学信息工程学院计算机系
2006年9 月 1 日
《编译原理》实验教学大纲
课程编号:020204006课程学时/学分:60/3 实验总学时:8
课程英文名称:Principles Compiler课程类别:专业课
开出学期:第七学期开出单位(实验室):信息学院教学机房
制定人:寿永熙教授
一、制定依据
根据内蒙古工业大学2003版计算机科学与技术专业培养方案和《编译原理》课程教学大纲制订本课程实验教学大纲。
二、实验安排
三、实验目的、内容与要求
实验一无符号数的有穷自动机的实现
(一)实验目的
无符号数的有穷自动机的实现目的是使学生掌握文法的形式描述,穷自动机的概念。将文法转换成有穷自动机的方法,理解出错处理程序思想,如何用状态矩阵实现一个穷自动机的机内表示。
(二)实验内容
1.无符号数的BNF描述
(0)<无符号数> → d <余留无符号数> | . <十进制数> | e <指数部分>
(1)<余留无符号数>→d <余留无符号数> | . <十进制数> | e <指数部分>|ε
(2)<十进制小数> → d <余留十进制小数>
(3)<余留十进制小数> e <指数部分> | d <余留十进制小数> | ε
(4)<指数部分> → d <余留整指数> | + <整指数> | - <整指数>
(5)<整指数> → d <余留整指数>
(6)<余留整指数> → d <余留整指数> | ε
2.将G[<无符号数>]文法转换成有穷自动机。
3.构造状态矩阵;将有穷自动机的状S1 S2 ……Sn及输入的字a1 a2 ……am 构成一个n*m的矩阵。
4.用状态矩阵设计出一个词法分析程序。
5.扫描无符号数,根据文法给出无符号数出错的位置。
(三)实验要求
1.学生课前要认真阅读实验指导,理解实验内容与相关理论知识的关系,并完成预习报告
2.用C语言或其它高级语言编写程序
3.写出实验报告
实验二语法制导把表达式翻译成逆波兰式
(一)实验目的
进一步掌握语法制导翻译的概念,理解中间语言,设计出错处理程序方法,掌握把表达式翻译成中间语言的算法。
(二)实验内容
1.从左到右扫描中缀表达式,经语法分析找出中缀表达式出现的错误并给出错误的具体位置和类型。一个运算符栈存放暂时不能出现的运算符,逆波兰区存放逆波兰表达式。
2.测试所编程序,给出正确和错误的结果。
(三)实验要求
1.学生课前要认真阅读实验指导,理解实验内容与相关理论知识的关系,并完成预习报告
2.用C语言或其它高级语言编写程序
3.写出实验报告
四、考核方式及成绩评定
考核方式:根据出勤、设计的程序、答辩和实验报告给出实验总成绩。
成绩评定: 出勤占实验总成绩的10%、程序占实验总成绩的40%、答辩占实验总成绩的30%、实验报告占实验总成绩的20%,实验总成绩占课程总成绩的10%。
五、教材及主要参考资料
1.教材
[1] 编译原理.张素琴、吕映芝编. 北京:清华大学出版社,2005。
[2] 编译原理实验指导书. 寿永熙编.自编. 2006。
2.教学参考书
[1] 编译原理.蒋立源主编. 西安:西北工业大学出版社,1998。
[2] 编译原理教程. 寿永熙主编.呼和浩特:内蒙古大学出版社,2004。
六、其它说明
实验报告内容参照信息工程学院实验报告规范要求书写
实践一无符号数的有穷自动机的实现
一、目的
通过上机实习,熟悉词法分析程序所用的工具自动机,进一步理解自动机理论。掌握文法转换成自动机的技术及有穷自动机实现的方法。
二、题目
无符号数的有穷自动机的实现
三、要求及提示
1、无符号数的BNF描述如下:
0.<无符号数> → d <余留无符号数> | . <十进制数> | e <指数部分>
1.<余留无符号数> → d <余留无符号数> | . <十进制数> | e <指数部分> | ε
2.<十进制小数> → d <余留十进制小数>
3.<余留十进制小数> e <指数部分> | d <余留十进制小数> | ε
4.<指数部分> → d <余留整指数> | + <整指数> | - <整指数>
5.<整指数> → d <余留整指数>
6.<余留整指数> → d <余留整指数> | ε
2、将G[<无符号数>]文法转换成有穷自动机。
3、构造状态矩阵;将有穷自动机的状S1 S2……S n及输入的字a1 a2……a m构成一个n*m的矩阵。
1、状态矩阵设计出一个词法分析程序识别无符号数。
2、扫描无符号数,根据文法给出无符号数出错的位置。
3、工具:C语言或其它高级语言
4、实践时间:8学时
四、实践报告
1、写出无符号数词法分析的思想。
2、画出算法流程图。
3、写出调试程序出现的问题及解决的方法。
4、打印实践报告及程序清单。
5、报告给出测试的结果。
五、参考范例
1)无符号数的文法描述如下:
0.<无符号数> → d <余留无符号数> | . <十进制数> | e <指数部分>
1.<余留无符号数> → d <余留无符号数> | . <十进制数> | e <指数部分> | ε
2.<十进制小数> → d <余留十进制小数>
3.<余留十进制小数> e <指数部分> | d <余留十进制小数> | ε
4.<指数部分> → d <余留整指数> | + <整指数> | - <整指数>
5.<整指数> → d <余留整指数>
6.<余留整指数> → d <余留整指数> | ε
2)无符号数的有穷自动机实现的思想
用0-----表示无符号数;用1-----表示余留无符号数;
用2----表示十进制小数;用3-----表示余留十进制小数;
用4-----表示指数部分;用5-----表示整指数;
用6-----表示余留整指数。
输入无符号数序列,从左到右扫描,遇到“#”号结束扫描。设一个字符数组,接收输入的无符号数,对输入的无符号数逐一进行分析,用一个中间变量接收当前字符。当前字符值发生错误时,输出错误信息;当前字符值正确时,分析下一个字符,反复判断,直至分析完毕。
3)无符号数的有穷自动机(Z表示结束符)
无符号数有穷自动机由图1所示。
图1
4)无符号数有穷自动机的状态转换矩阵
无符号数有穷自动机的状态转换矩阵由表1所示。