使用java实现语言解释器

使用java实现语言解释器

ID:8820361

大小:1.02 MB

页数:50页

时间:2018-04-08

使用java实现语言解释器_第1页
使用java实现语言解释器_第2页
使用java实现语言解释器_第3页
使用java实现语言解释器_第4页
使用java实现语言解释器_第5页
资源描述:

《使用java实现语言解释器》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、87第3章使用Java实现语言解释器使用Java实现语言解释器大多数程序员都曾经梦想着创造自己的计算机语言。坦率地说,能够创造、控制、增强和修改属于自己的计算机语言,这种想法确实非常具有吸引力。然而,只有极少数程序员认为,实现这个想法是一件非常容易和令人愉悦的事情。开发一个功能齐备的编译器(例如Java编译器)的确是一项艰巨的任务。但是相比之下,创建一个语言解释器却简单得多。尽管解释器和编译器都以应用程序源代码作为输入内容,但是它们对这些源代码的处理过程却截然不同。编译器将程序的源代码转化为可执行代码的形式。通常情况下,这种可执行代码由计算机的CPU指令组成,因此可以直接

2、在计算机上执行。例如,C++即采用这种编译方式。还有一种情况,编译器输出一种可移植的中间代码,它们由运行时系统执行。Java采用的就是这种方式。在Java中,称这种中间代码为“字节码”。解释器的工作原理则完全不同。它顺序读入程序的源代码,然后依次执行每一条语句。因此,解释器并不真正将源代码转化为目标代码,而是直接执行程序。尽管使用解释器执行程序的速度比将相同的程序编译成目标代码后再执行的速度慢,但是解释器仍然在编程中被广泛使用。原因有以下几个方面:87第3章使用Java实现语言解释器第一,解释器能够提供真正的交互式环境,由解释器执行的程序能够根据用户的指令暂停或者恢复运行

3、。这种交互式环境在机器人技术等方面用途很广。第二,语言解释器的先天特性决定了它们特别适合于交互式的程序调试。第三,解释器最适合于作为“脚本语言”,比如数据库查询语言等。第四,语言解释器使得同一个程序运行于不同类型的平台成为可能。此时惟一的工作只是为每个新环境实现解释器的运行包。在有些情况下,术语“解释器”的含义与刚才所描述的情况有所不同。例如,最初的Java运行时系统被称为“字节码解释器”。但是这种解释器与本章中介绍的解释器的类型并不完全相同。字节码是一组高度优化的可移植的机器指令,而Java运行时系统则为字节码提供一个执行环境。然而Java运行时系统并不直接执行源代码,

4、而是执行可移植的机器代码。这也是Java运行时系统被称为Java虚拟机的原因。本章将要介绍的解释器代码不仅有趣而且实用。同时,它还充分显示了Java语言简单高效的特性。与第2章中介绍的解析器相同的是,这个语言解释器也使用“纯代码”编写。同时,解释器也是一个相当复杂的程序,但是使用Java语言实现起来却非常简单,这也是Java语言功能多样化的一个例证。此外,解析器代码的简洁还显示了Java语法和库的强大表达能力。3.1解释何种计算机语言在构造解释器之前,首先必须确定将要解释的语言类型。尽管Java似乎是个不错的选择,但是它过于庞大和复杂。即使选取Java语言的一个小的子集也

5、显得太大了,因为我们只打算利用一章的篇幅进行讲解。而且,通常情况下也没有必要为一个像Java那么强大的语言编写解释器;相反地,编写一个解释器处理某种相对简单的计算机语言倒是可行的。因此,更好的做法是选择一种易于解释、较为简单的语言。BASIC语言的早期版本就非常符合这些标准,因此在此选择了BASIC语言的一个子集,将其作为本章中所介绍的解释器的解释语言。在下文中将称这个子集为SmallBASIC。本章选择了这个类BASIC语言有3方面原因。第一,BASIC语言最初正是为解释执行而设计的。因此,实现一个BASIC解释器相对比较容易。例如,BASIC语言的早期版本不支持局部变

6、量、递归方法、语句块、类、重载等特征——但是以上所有这些特性都将增加BASIC语言的复杂性。虽然缺少了许多功能,但是解释BASIC子集的基本原理同样适用于其他语言。理解本章中介绍的解释器代码,能够为开发其他语言解释器打下基础。选择BASIC的第二个原因是,可以用相对较小的代码量实现一个较为合理的子集。第三,早期的BASIC语言语法简单、容易掌握,几乎不需要用额外的时间来学习。因此,即使一点都不了解传统的BASIC语言,也能够毫无困难地使用SmallBASIC。下面给出一个用SmallBASIC87第3章使用Java实现语言解释器编写的程序,可以看到,使用这种语言是多么的简

7、单。即使从来没有见过传统风格的BASIC程序,也能够轻松理解其操作过程。PRINT"ASimpleSmallBASICProgram"FORX=1TO10GOSUB100NEXTEND100PRINTXRETURN该程序运行后得到如下的输出结果:ASimpleSmallBASICProgram1.02.03.04.05.06.07.08.09.010.0尽管在SmallBASIC语言中关键字的含义几乎一目了然,但是本章仍将详细解释每个关键字。最后,SmallBASIC仿造的是早期的BASIC版本,它不同于后来出现的Visual

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。