编译原理实验:后缀表达式转换与Java编程实践.pdfVIP

  • 0
  • 0
  • 约6.27千字
  • 约 6页
  • 2026-02-01 发布于北京
  • 举报

编译原理实验:后缀表达式转换与Java编程实践.pdf

1实验描述

在开始实验之前,请务必花足够时间阅读完本文档关于实验的描述与约定!

1.1实验目的

学生在完成帮助掌握Java语言开发过程和面向对象设计的预备实验后,本实验是进入编译原理课程实

验的第一个实验。

借助于对一个已有的简单语言处理程序的改进,学生可对语言处理程序有一个初步的认识,并且更深入

地理解DragonBook第2版(DBv2)第2章ASimpleSyntax-DirectedTranslator的内容。

1.2实验环境

本实验基于当前主流的面向对象开发平台,编码风格遵循主流的参考规范。

1.2.1编程语言

Java语言,JDK1.5版本。

1.2.2开发工具

学生可Eclipse、JBuilder等IDE环境,也可直接采用UltraEdit、EditPlus等编辑器在命令行工

作。但提交的实验结果必须独立于特定的IDE,可直接运行在JDK上。

1.2.3编码规范

学生在实验过程中应注意培养规范的编码风格。本实验要求所有源代码严格遵循Sun公司关于Java程

序设计语言的编码规范,参见:

完成后的代码应使用JDK附带的文档工具javadoc根据源程序中的文档化注释生成相应的文档。

1.3实验内容

DBv2第2章了一个完整的Java程序,它处理的对象是一种简单的中缀表达式:表达式中的运算量

只能是0~9的单个数字,仅支持加、减运算,且表达式中不允许任何空格、制表符等空白符号。该程

序的惟能是将终端用户输入的一个中缀表达式转换为等价的后缀表达式后输出;若用户输入的表达

式有误,则程序的输出是无意义的,但该程序不会提示用户输入有误。

本文档第2部分详细给出了该程序的源代码,并介绍了为便于学生开展本实验而的一个简单的

实验软装置。

1.3.1实验过程

请按以下步骤改进在本实验的实验软装置中的源程序代码。

Step1、静态成员与非静态成员

DBv2将类Parser中的数据成员(又称域,Field)intlookahead定义为静态的(static),为什

么要这样定义?尝试将lookahead定义为非静态的(即删除之前的修饰符static),看看这是

否会影响程序的正确性。

Step2、消除程序中的尾递归

所谓尾递归(TailRecursion),是指在方法体的最后一条语句是一条直接递归调用语句,即在方法体最

后直接调用了方法自身。原程序中的rest()方法显然是一个含尾递归的递归程序。

试消除原程序中rest()方法的尾递归,即将该程序转换为一个不带尾递归的等价程序,因为将递归转

换为循环通常都会提高程序的执行效率。将一个任意的递归程序转换为循环程序并不简单,但尾递归的

消除往往是很容易的。

Step3、为程序扩展错误处理功能

实验软装置中的程序未处理用户输入的中缀表达式出错的情况,譬如表达式中含有空格、两个运算量之

间缺少运算符、或运算符缺少左(或右)运算量等。

请为你的程序扩展错误处理功能,最低要求是当输入表达式有错时,给出一个报错信息。一个做得更好

的错误处理功能应该能够准确地给出错误的位置和类别(属词法错误亦或属语法错误)。

学有余力的学生还可考虑尝试如何实现出错恢复(ErrorRecovery),即当程序发现一个错误时不是立马

停下来,而是能够从跌倒的地方爬起来,继续分析下去,从而一次运行即可发现的错误。

Step4、为程序增加文档化注释

根据本文档规定的Java编码风格,为你的源代码撰写文档化注释(DocumentationComments),并利用

JDK的javadoc工具生成源程序的HTML文档,并存放在一个名为doc的目录中。

Step5、程序的单元测试(可选)

学有余力的同学可Java开发平台上使用最广泛的开源(OpenSource)单元测试工具JUnit,并使用

该工具完成对改进后程序的单元测试。

可从JUnit的版本。关于JUnit的知识可参见以下URL:

⚫junit.pdf

⚫dept/junit/juni

文档评论(0)

1亿VIP精品文档

相关文档