02实验指导书.docx

上传人:b****3 文档编号:2919697 上传时间:2022-11-16 格式:DOCX 页数:9 大小:19.36KB
下载 相关 举报
02实验指导书.docx_第1页
第1页 / 共9页
02实验指导书.docx_第2页
第2页 / 共9页
02实验指导书.docx_第3页
第3页 / 共9页
02实验指导书.docx_第4页
第4页 / 共9页
02实验指导书.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

02实验指导书.docx

《02实验指导书.docx》由会员分享,可在线阅读,更多相关《02实验指导书.docx(9页珍藏版)》请在冰豆网上搜索。

02实验指导书.docx

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)在编程过程中遇到了哪些问题,你是如何解决的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1