java使用解释器执行代码_使用Java实现语言解释器.doc

使用Java实现语言解释器.doc使用Java实现语言解释器.doc使用Java实现语言解释器.doc

使用Java实现语言解释器

大多数程序员都曾经梦想着创造自己的计算机语言。坦率地说,能够创造、控制、增强和修改属于自己的计算机语言,这种想法确实非常具有吸引力。然而,只有极少数程序员认为,实现这个想法是一件非常容易和令人愉悦的事情。开发一个功能齐备的编译器(例如Java编译器)的确是一项艰巨的任务。但是相比之下,创建一个语言解释器却简单得多。

尽管解释器和编译器都以应用程序源代码作为输入内容,但是它们对这些源代码的处理过程却截然不同。编译器将程序的源代码转化为可执行代码的形式。通常情况下,这种可执行代码由计算机的CPU指令组成,因此可以直接在计算机上执行。例如,C++即采用这种编译方式。还有一种情况,编译器输出一种可移植的中间代码,它们由运行时系统执行。Java采用的就是这种方式。在Java中,称这种中间代码为“字节码 ”。

解释器的工作原理则完全不同。它顺序读入程序的源代码,然后依次执行每一条语句。因此,解释器并不真正将源代码转化为目标代码,而是直接执行程序。尽管使用解释器执行程序的速度比将相同的程序编译成目标代码后再执行的速度慢,但是解释器仍然在编程中被广泛使用。原因有以下几个方面:

第一,解释器能够提供真正的交互式环境,由解释器执行的程序能够根据用户的指令暂停或者恢复运行。这种交互式环境在机器人技术等方面用途很广。第二,语言解释器的先天特性决定了它们特别适合于交互式的程序调试。第三,解释器最适合于作为“脚本语言”,比如数据库查询语言等。第四,语言解释器使得同一个程序运行于不同类型的平台成为可能。此时惟一的工作只是为每个新环境实现解释器的运行包。

在有些情况下,术语“解释器”的含义与刚才所描述的情况有所不同。例如,最初的Java运行时系统被称为“字节码解释器”。但是这种解释器与本章中介绍的解释器的类型并不完全相同。字节码是一组高度优化的可移植的机器指令,而Java运行时系统则为字节码提供一个执行环境。然而Java运行时系统并不直接执行源代码,而是执行可移植的机器代码。这也是Java运行时系统被称为Java虚拟机的原因。

本章将要介绍的解释器代码不仅有趣而且实用。同时,它还充分显示了Java语言简单高效的特性。与第2章中介绍的解析器相同的是,这个语言解释器也使用“纯代码”编写。同时,解释器也是一个相当复杂的程序,但是使用Java语言实现起来却非常简单,这也是Java语言功能多样化的一个例证。此外,解析器代码的简洁还显示了Java语法和库的强大表达能力。

3.1 解释何种计算机语言

在构造解释器之前,首先必须确定将要解释的语言类型。尽管Java似乎是个不错的选择,但是它过于庞大和复杂。即使选取Java语言的一个小的子集也显得太大了,因为我们只打算利用一章的篇幅进行讲解。而且,通常情况下也没有必要为一个像Java那么强大的语言编写解释器;相反地,编写一个解释器处理某种相对简单的计算机语言倒是可行的。因此,更好的做法是选择一种易于解释、较为简单的语言。BASIC语言的早期版本就非常符合这些标准,因此在此选择了BASIC语言的一个子集,将其作为本章中所介绍的解释器的解释语言。在下文中将称这个子集为Small BASIC。

本章选择了这个类BASIC语言有3方面原因。第一,BASIC语言最初正是为解释执行而设计的。因此,实现一个BASIC解释器相对比较容易。例如,BASIC语言的早期版本不支持局部变量、递归方法、语句块、类、重载等特征—— 但是以上所有这些特性都将增加BASIC语言的复杂性。虽然缺少了许多功能,但是解释BASIC子集的基本原理同样适用于其他语言。理解本章中介绍的解释器代码,能够为开发其他语言解释器打下基础。选择BASIC的第二个原因是,可以用相对较小的代码量实现一个较为合理的子集。第三,早期的BASIC语言语法简单、容易掌握,几乎不需要用额外的时间来学习。因此,即使一点都不了解传统的BASIC语言,也能够毫无困难地使用Small BASIC。

下面给出一个用Small BASIC编写的程序,可以看到,使用这种语言是多么的简单。即使从来没有见过传统风格的BASIC程序,也能够轻松理解其操作过程。

PRINT "A Simple Small BASIC Program"

FOR X = 1 TO 10

GOSUB 100

NEXT

END

100 PRINT X

RETURN

该程序运行后得到如下的输出结果:

A Simple Small BASIC Program

1.0

2.0

3.0

4.0

5.0

6.0

7.0

8.0

9.0

10.0

尽管在Small BASIC语言中关键字的含义几乎一目了然,但是本章仍将详细解释每个关键字。

最后,Small BASIC仿造的是早期的BASIC版本,它不同于后来出现的Vi

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值