CHAPTER 3 使用 Java 实现语言解释器 大多数程序员都曾经梦想着创造自己的计算机语言
坦率地说,能够创造、控制、增强和修改属于自己的计算机语言,这种想法确实非常具有吸引力
然而,只有极少数程序员认为,实现这个想法是一件非常容易和令人愉悦的事情
开发一个功能齐备的编译器(例如 Java 编译器)的确是一项艰巨的任务
但是相比之下,创建一个语言解释器却简单得多
尽管解释器和编译器都以应用程序源代码作为输入内容,但是它们对这些源代码的处理过程却截然不同
编译器将程序的源代码转化为可执行代码的形式
通常情况下,这种可执行代码由计算机的 CPU 指令组成,因此可以直接在计算机上执行
例如,C++即采用这种编译方式
还有一种情况,编译器输出一种可移植的中间代码,它们由运行时系统执行
Java 采用的就是这种方式
在Java 中,称这种中间代码为“字节码 ”
解释器的工作原理则完全不同
它顺序读入程序的源代码,然后依次执行每一条语句
因此,解释器并不真正将源代码转化为目标代码,而是直接执行程序
尽管使用解释器执行程序的速度比将相同的程序编译成目标代码后再执行的速度慢,但是解释器仍然在编程中被广泛使用
原因有以下几个方面: 第一,解释器能够提供真正的交互式环境,由解释器执行的程序能够根据用户的指令暂停或者恢复运行
这种交互式环境在机器人技术等方面用途很广
第二,语言解释器的先天特性决定了它们特别适合于交互式的程序调试
第三,解释器最第 3 章 使用 J a v a 实现语言解释器 3 9 适合于作为“脚本语言”,比如数据库查询语言等
第四,语言解释器使得同一个程序运行于不同类型的平台成为可能
此时惟一的工作只是为每个新环境实现解释器的运行包
在有些情况下,术语“解释器”的含义与刚才所描述的情况有所不同
例如,最初的 Java 运行时系统被称为“字节码解释器”
但是这种解释