编译原理实验指导书(新)..doc
文本预览下载声明
前 言
编译原理是计算机科学与技术、软件工程等专业的主干课和必修课,由于这门课程相对抽象且内容较复杂,一直是比较难学的一门课程。在编译原理的学习过程中,实验非常重要,只有通过上机实验,才能使学生对比较抽象的课程内容产生一个具体的感性认识。但是,目前国内市场上很少有较详细且比较适合我院实际的实验指导书,为此,我们特编了这份指导书,希望能对我院的《编译原理》教学工作有所帮助。
本书实验环境主要为C环境(由于兼容性问题,建议使用Turboc2.0)及一个词法分析器自动生成工具FLEX和一个语法分析器自动生成工具BISON。书中给出的参考源程序也是C源程序,但由于实验者熟悉精通的语言工具不尽相同,因而强求采用统一的编程语言编程是不现实的。实验者在掌握了编译程序各个阶段的功能和原理之后,不难借助使用其他自己熟悉的语言实现相关功能。
实验者在实验过程中应该侧重写出自己在算法分析、设计思路、实现功能或程序代码等方面的特色,写出设计和实现过程中遭遇到的难点和解决办法,可以不拘泥于实验指导给出的参考性设计思路,尽可能在深度和广度上加以拓展。只有这种各具特色的实验报告,才将更有利于体现实验者在创新思维和动手能力上的差异。
通过这些实验,能使学生对这些部份的工作机理有一个详细的了解,达到“知其然,且知其所以然”的目的。并可在C环境下对自动生成工具生成的词法、语法分析器进行编译调试。
由于手工生成词法和语法分析器的工作量太大,在实际中常用自动生成工具来完成之。这些工具中最著名的当属贝尔实验室的词法分析器生成工具LEX和语法分析器生成工具YACC。它们现已成为UNIX的标准应用程序同UNIX一起发行。与此同时GNU推出与LEX完全兼容的FLEX,与YACC完全兼容的BISON。这两个程序都在Internet上以源代码的形式免费发行,所以很容易在其它操作系统下重新编译安装。我们实验采用的就是for dos的FLEX和BISON。本书有关的编译工具及其源程序例子,可到BISON的网站上下载。关于FLEX和BISON的用法简介,参见附录,如需更详细的介绍,请参阅编译工具中帮助文件。
关于实验学时和安排,任课教师可根据实际情况,选做其中的一部份。由于这门课实验难度较大,所以希望任课教师在实验前安排好学生的预习工作。在上机前要求学生写好实验预习报告。
本书中c程序均在Turboc2.0下调试通过.LEX和YACC源程序均在FLEX和BISON下调试通过.
由于编者水平有限,本书中必然存在着不少缺点,在此恳请大家给予批评和指正,我们将尽力纠正。在此特对关心支持编写本书的院系领导表示感谢。
本书中关于LEX和YACC的部份大量参考引用了何炎祥老师主编,华中理工大学出版社出版的《编译原理》一书,在此表示衷心的感谢。
周鹏 杨亚会 梅琴 赵榕
2006年8月
目 录
实验一 词法分析器设计 1
实验二 熟悉FLEX使用方法 10
实验三 用FLEX自动生成PL/0词法分析器 11
实验四 用递归下降法进行表达式分析 18
实验五 用算符优先法进行表达式分析 20
实验六 利用BISON生成逆波兰表示计算器 24
实验七 利用BISON生成中缀表示计算器 25
附录一 词法分析器生成工具FLEX简介 26
附录二 语法分析器生成工具YACC简介 33
实验一 词法分析器设计
【实验目的】
掌握生成词法分析器的方法,加深对词法分析原理的理解。
掌握设计、编制并调试词法分析程序的思想和方法。
本实验是高级语言程序设计、数据结构和编译原理中词法分析原理等知识的综合。
【实验内容及要求】
选择一种熟悉的高级语言(如C语言,C++,VB或VC等),设计、编写、调试一个词法分析子程序。
待分析的源程序为一个简单的C语言程序,如下所示:
main()
{ int x,a,b;
float y,c,d;
x = a + b;
y=c / d;
if(xy)
x = 10;
else
y=100;
}
将该源程序的源文件经词法分析后输出以二元组形式表示的单词符号序列。
编写的程序具有一定的查错能力。提交的实验报告中要有实验名称、实验目的、实验内容、实验程序清单、调试过程和运行结果,程序的主要部分作出功能说明,并有实验收获体会或改进意见等内容。
实验前请仔细阅读实验预习提示,提示中程序仅供参考。
本实验建议学时数为4学时。
【实验预习提示】
1.词法分析器的功能和输出格式
词法分析器的功能是输入以字符串表示的源程序,输出单词符号或单词符号序列。词法分析器的单词符号常常表示成以下的二元组(单词的种别码,单词符号的属
显示全部