02实验指导书.docx
《02实验指导书.docx》由会员分享,可在线阅读,更多相关《02实验指导书.docx(9页珍藏版)》请在冰豆网上搜索。
![02实验指导书.docx](https://file1.bdocx.com/fileroot1/2022-11/16/2103406e-be38-4ae8-a824-58e03c0ec90e/2103406e-be38-4ae8-a824-58e03c0ec90e1.gif)
02实验指导书
《编译原理实验》指导书
作者:
周波
单位:
软件学院
2012年2月
一、实验教学目标
“编译原理”是一门研究设计和构造编译程序原理和方法的课程,是计算机各专业的一门重要专业基础课。
该课程蕴含着计算机学科中许多重要的解决问题的思路和方法,如:
有限自动机、正则表达式等,对应用软件和系统软件的设计与开发有一定的启发和指导作用。
编译程序构造的原理和技术在软件工程、逆向工程、软件再工程、语言转换及其他领域中都有着广泛的应用。
通过本课程的实验教学,使学生加深对编译系统的结构、工作流程及编译程序各组成部分设计原理的理解,使他们能够掌握和应用常用的编译技术和方法,为今后从事应用软件和系统软件的开发打下一定的理论和实践基础。
编译原理实验指导书围绕着实验教学目标,详细阐述了各实验的原理和步骤。
希望同学们能够充分利用实验条件,认真完成实验,从实验中得到应有的锻炼和培养。
二、实验教学主要内容
实验课外时间组织:
实验课外消化理论课堂,老师对项目实验的讲解,并且做好相关的设计与实现。
实验课内时间组织:
学生在学院机房集中上机,实验教师在机房采用辅导和自由讨论相结合的方式进行指导。
最终完成实验项目的检查。
三、实验要求
为了顺利完成编译原理课程实验,学生应做到:
1、熟练掌握一种高级程序设计语言及相关开发工具。
2、认真学习教材以及老师课堂讲解的项目实验相关内容,提前做好分析设计和实现。
3、自行完成代码编写,不得超袭。
实验课上课时间做好项目陈述和检查的准备,也可以针对一些问题做相应的讨论。
4、遵守机房纪律,服从辅导教师指挥,爱护实验设备。
5、实验课上进行相关的程序检查和测试,结束后提交所有的文档和源程序。
四、评分细则
实验总分值
100
实验项目名称
分值
评分标准
备注
符号表设计与实现
20
考勤4分,设计与实现8分,程序检查4分,文档4分
词法分析
20
考勤4分,设计与实现8分,程序检查4分,文档4分
语法树设计与实现
20
考勤4分,设计与实现8分,程序检查4分,文档4分
语法分析
20
考勤4分,设计与实现8分,程序检查4分,文档4分
语义分析
20
考勤4分,设计与实现8分,程序检查4分,文档4分
五、实验项目
实验一符号表设计与实现
1.实验目的
了解符号表的作用、组织和数据结构,设计和实现一个符号表。
2.实验要求
a)合理有效地设计符号表可存储程序语言中的各种标识符(变量、常量、数组、结构、指针、函数和过程)及其属性和作用域信息
b)列出关键算法的具体实现的思路
3.实验原理及内容
(1)符号表的作用
符号表用于登录名字(标识符)、相应对象的种类(常量、变量、数组、结构、文件、标号、指针、函数与过程等)、属性(整型、实型、字符型、布尔型与枚举型等)和作用域信息。
由于在编译的各个阶段都要对符号表进行频繁操作(查表和填表),在整个编译时间中占了较大比例,因此如何有效合理地组织符号表并选择好的填表和查表方式,对于提高编译器的工作效率有很大影响。
(2)符号表的组织
源程序中的每个标识符在符号表中都有1个条目,一般由两部分组成:
名字栏和信息栏。
如果一个语言对标识符的最大长度有限制,可设计名字栏的域大小为最大长度来容纳整个标识符;若该语言对标识符最大长度无限制或最大长度较大(如:
32),为节省存储空间,可另用一个字符数组存储标识符,在名字栏域中存储其起始地址和长度(字符个数)。
源程序中的标识符种类繁多,不同种类的标识符所需要存储的信息不同。
如:
变量需存储其类型、存储地址等,数组应存储其数组维数m、数组元素类型T、各维元素个数di、起始地址base等,指针应存储其指向对象类型的位置,函数应存储其参数及类型、返回值类型等……
源程序中的说明将标识符与具有某种类型属性的数据对象相关联。
同一个标识符在不同程序位置被说明时代表不同的数据对象。
当出现对一个标识符的引用时,需根据作用域规则查符号表获取正确的符号表条目。
C语言采用静态作用域规则,按最近嵌套原则确定作用域。
(3)符号表的数据结构
由于线性表的访问复杂度为O(n),效率较低,符号表常采用效率更高的哈希技术进行实现:
当出现标识符id的定义时,计算哈希函数H(id),获取其在哈希表的存储位置,如该位置为空,则直接存储,否则应用冲突消解方法来获取其存储位置;当出现对标识符id的引用时,计算哈希函数H(id),获取其在哈希表的存储位置。
4.实验软硬件环境
C++
MicrosoftVisualStudio6.0
5.实验预习要求
编译原理方法和技术
6.评分标准
考勤4分,设计8分,程序检查4分,文档4分
7.实验报告
体现设计和主要算法的描述,并附上关键源程序的分析思路,同时回答思考题
【思考题】
(1)如何有效设计符号表,其思路是什么?
(2)在实现过程中遇到了哪些技术问题,你是如何解决的。
实验二词法分析
1.实验目的
(1)理解词法分析在编译程序中的作用
(2)加深对有穷自动机模型的理解
(3)掌握词法分析程序的实现方法和技术
2.实验要求
(1)待分析的简单语言的词法
1)关键字
beginifthenwhiledoend
2)运算符和界符
:
=+-*/<<=>>=<>=;()#
3)其他单词是标识符(ID)和整形常数(NUM),通过以下正规式定义:
ID=letter(letter|digit)*
NUM=digitdigit*
4)空格由空白、制表符和换行符组成。
空格一般用来分隔ID、NUM、运算符、界符和关键字,词法分析阶段通常被忽略。
(2)各种单词符号对应的种别编码
单词符号
种别码
单词符号
种别码
begin
1
:
17
if
2
:
=
18
then
3
<
20
while
4
<>
21
do
5
<=
22
end
6
>
23
letter(letter|digit)*
10
>=
24
digitdigit*
11
=
25
+
13
;
26
-
14
(
27
*
15
)
28
/
16
#
0
(3)词法分析程序的功能
输入:
所给文法的源程序字符串
输出:
二元组(syn,token或sum)构成的序列。
syn为单词种别码;
token为存放的单词自身字符串;
sum为整形常数。
例如:
对源程序beginx:
=9;ifx>0thenx:
=2*x+1/3;end#经词法分析后输出如下序列:
(1,begin)(10,’x’)(18,:
=)(11,9)(26,;)(2,if)……
3.实验原理及内容
DFA代码化或使用lex工具。
见《编译原理》
4.实验软硬件环境
C++
MicrosoftVisualStudio6.0
5.实验预习要求
6.评分标准
考勤4分,设计8分,程序检查4分,文档4分
7.实验报告
体现设计和主要算法的描述,并附上关键源程序,同时回答思考题
【思考题】
(1)在编程过程中遇到了哪些问题,你是如何解决的。
(2)如果将源程序放置在一个文本文件中,如何实现对源代码的获取,编程实现。
实验三语法树设计与实现
1.实验目的
(1)理解语法树在编译程序中的作用
(2)掌握语法树的实现方法和技术
2.实验要求
(1)用语法树来表示程序及其结构成分之间的层次关系。
该语法树适用于实验二所述简单语言,其词法同词法分析实验,语法用扩充的BNF表示如下:
1)<程序>:
:
=begin<语句串>end
2)<语句串>:
:
=<语句>{;<语句>}
3)<语句>:
:
=<赋值语句>||
4)<赋值语句>:
:
=ID:
=<表达式>
5):
:
=if<表达式>then<语句>[else<语句>]end
6):
:
=do<语句>while<表达式>
7)<表达式>:
:
=<项>{+<项>|-<项>}
8)<项>:
:
=<因子>{*<因子>|/<因子>}
9)<因子>:
:
=ID|NUM|(<表达式>)
(2)实现语法树的建立和查询操作
3.实验原理及内容
见《编译原理》
4.实验软硬件环境
C++
MicrosoftVisualStudio6.0
5.实验预习要求
6.评分标准
考勤4分,设计8分,程序检查4分,文档4分
7.实验报告
体现设计和主要算法的描述,并附上关键源程序,同时回答思考题
【思考题】
(1)语句串中可有任意个语句,应如何设计语句串结构的语法树结构?
(2)在编程过程中遇到了哪些问题,你是如何解决的。
实验四语法分析
1.实验目的
(1)理解语法分析在编译程序中的作用
(2)加深对语法分析算法的理解
(3)掌握语法分析程序的实现方法和技术
2.实验要求
(1)设计和实现待分析简单语言的语法分析程序
(2)待分析的简单语言的词法同词法分析实验,语法
用扩充的BNF表示如下:
1)<程序>:
:
=begin<语句串>end
2)<语句串>:
:
=<语句>{;<语句>}
3)<语句>:
:
=<赋值语句>
4)<赋值语句>:
:
=ID:
=<表达式>
5)<表达式>:
:
=<项>{+<项>|-<项>}
6)<项>:
:
=<因子>{*<因子>|/<因子>}
7)<因子>:
:
=ID|NUM|(<表达式>)
(3)语法分析程序的功能
输入单词串以”#”结束,如果是文法正确的句子,输出成功信息和分析树;否则输出错误信息。
例如:
输入begina:
=9;x:
=2*3;b:
=a+xend#
输出success
输入x:
=a+b*cend#
输出error
3.实验原理及内容
见《编译原理》
4.实验软硬件环境
C++
MicrosoftVisualStudio6.0
8.实验预习要求
9.评分标准
考勤4分,设计8分,程序检查4分,文档4分
10.实验报告
体现设计和主要算法的描述,并附上关键源程序,同时回答思考题
【思考题】
(1)你选择哪种语法分析方法完成实验,并给出说明。
(2)在编程过程中遇到了哪些问题,你是如何解决的。
实验五语义分析
1.实验目的
通过上机实验,加深对语法制导翻译的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法。
2.实验要求
(1)设计和实现待分析简单语言的语义分析程序
(2)待分析的简单语言的词法同词法分析实验,语法同语法分析实验
(3)输入是一段语句串,输出为三地址指令形式的四元式代码
例如:
对于语句串
Begina:
=2+3*4;x=(a+b)/cend#
输出的三地址码为:
1)t1=3*4
2)t2=2+t1
3)a=t2
4)t3=a+b
5)t4=t3/c
6)x=t4
3.实验原理及内容
见《编译原理》
4.实验软硬件环境
C++
MicrosoftVisualStudio6.0
5.实验预习要求
6.评分标准
考勤4分,设计8分,程序检查4分,文档4分
7.实验报告
体现设计和主要算法的描述,并附上关键源程序,同时回答思考题
【思考题】
(1)在编程过程中遇到了哪些问题,你是如何解决的。