首页 | 新闻资讯 | 软件应用 | 图形图像 | 网络应用 | 硬件学堂 | 程序开发 | 安全中心 | 素材下载 | 作者专区 | 教育频道
学院论坛 | 推荐专题 | 专家答疑 | Flash剧场 | Photoshop | 名词解释 | 梦幻桌面 | PS高手进阶 | QQ区 | 壁纸 | 黑客教材
Flash教程| 动画制作 | AutoCAD  | 3DMax专区 | PS视频教程| 网页制作 | CorelDRAW| Firework | 滤镜与实例 | 全部视频教程
学院热点专题
|21互联专区| 照片处理 | QQ 动画 | 系统优化 | 会声会影 | 制作游戏 | Win2003 | 大话成语 | MSN专题 | 头条
| 天音听听 | QQ 技巧  | ASP教程 | 菜鸟入门 | 实用工具 | ADSL宽带 | 硬盘世界| BT  下载 | Vista  | 问吧
   1991年,Sun Microsystems公司开始研究一种新的计算机语言,这种语言最后撼动了传统编程的基础。起初,这种语言被命名为Oak,到1995年正式命名为Java。Java在两个方面改变了编程的过程。第一,Java集成了有利于编制Internet程序的特性。第二,Java发展了计算机语言的精髓。因此,Java的重要性体现在两点:对Internet的内嵌支持和对计算机语言发展的推动。这两点中的任何一点都足以使Java成为一种出色的语言;但是只有将这两点成功地结合起来,Java才能成为一种伟大的语言,才能确定它在计算机历史中的地位。

回目录 |  [1]  [2]  [3]  [4]  [5]  | 上一章 | 下一章

 
Small BASIC解释器

  Small BASIC解释器的代码相当长—— 一般情况下不会将这么长的代码放在书的一章之中。但是不要被它的长度所吓倒。抛开其长度不谈,这个解释器的概念其实比较简单,只要掌握了解释器的一般模式,就能轻松理解它的每个部分。

  接下来给出Small BASIC解释器的完整代码。本章剩下的篇幅将详细解释它的工作原理和使用方法。

// A Small BASIC Interpreter.
import java.io.*;
import java.util.*;
// Exception class for interpreter errors.
class InterpreterException extends Exception {
String errStr; // describes the error 
public InterpreterException(String str) { 
errStr = str; 

public String toString() { 
return errStr; 


// The Small BASIC interpreter.
class SBasic { 
final int PROG_SIZE = 10000; // maximum program size
// These are the token types. 
final int NONE = 0; 
final int DELIMITER = 1; 
final int VARIABLE = 2; 
final int NUMBER = 3; 
final int COMMAND = 4; 
final int QUOTEDSTR = 5;
// These are the types of errors. 
final int SYNTAX = 0; 
final int UNBALPARENS = 1; 
final int NOEXP = 2; 
final int DIVBYZERO = 3; 
final int EQUALEXPECTED = 4; 
final int NOTVAR = 5; 
final int LABELTABLEFULL = 6; 
final int DUPLABEL = 7; 
final int UNDEFLABEL = 8; 
final int THENEXPECTED = 9; 
final int TOEXPECTED = 10; 
final int NEXTWITHOUTFOR = 11; 
final int RETURNWITHOUTGOSUB = 12; 
final int MISSINGQUOTE = 13;
final int FILENOTFOUND = 14; 
final int FILEIOERROR = 15; 
final int INPUTIOERROR = 16;
// Internal representation of the Small BASIC keywords.
final int UNKNCOM = 0;
final int PRINT = 1;
final int INPUT = 2;
final int IF = 3;
final int THEN = 4;
final int FOR = 5;
final int NEXT = 6;
final int TO = 7;
final int GOTO = 8;
final int GOSUB = 9;
final int RETURN = 10;
final int END = 11;
final int EOL = 12;
// This token indicates end-of-program. 
final String EOP = "\0"; 
// Codes for double-operators, such as <=.
final char LE = 1;
final char GE = 2;
final char NE = 3;
// Array for variables. 
private double vars[];
// This class links keywords with their keyword tokens.
class Keyword { 
String keyword; // string form 
int keywordTok; // internal representation 
Keyword(String str, int t) {
keyword = str;
keywordTok = t;
}
}
/* Table of keywords with their internal representation.
All keywords must be entered lowercase. */
Keyword kwTable[] = { 
new Keyword("print", PRINT), // in this table. 
new Keyword("input", INPUT),
new Keyword("if", IF),
new Keyword("then", THEN),
new Keyword("goto", GOTO),
new Keyword("for", FOR),
new Keyword("next", NEXT),
new Keyword("to", TO),
new Keyword("gosub", GOSUB),
new Keyword("return", RETURN),
new Keyword("end", END)
};
private char[] prog; // refers to program array
private int progIdx; // current index into program
private String token; // holds current token 
private int tokType; // holds token's type 
private int kwToken; // internal representation of a keyword
// Support for FOR loops.
class ForInfo {
int var; // counter variable 
double target; // target value 
int loc; // index in source code to loop to 
}
// Stack for FOR loops.
private Stack fStack;
// Defines label table entries.
class Label {
String name; // label 
int loc; // index of label's location in source file 
public Label(String n, int i) {
name = n;
loc = i;
}
}
// A map for labels.
private TreeMap labelTable;
// Stack for gosubs.
private Stack gStack;
// Relational operators.
char rops[] = {
GE, NE, LE, '<', '>', '=', 0
};
/* Create a string containing the relational
operators in order to make checking for
them more convenient. */
String relops = new String(rops);
// Constructor for SBasic.
public SBasic(String progName) 
throws InterpreterException {
char tempbuf[] = new char[PROG_SIZE];
int size;
// Load the program to execute.
size = loadProgram(tempbuf, progName);
if(size != -1) {
// Create a properly sized array to hold the program.
prog = new char[size];
// Copy the program into program array.
System.arraycopy(tempbuf, 0, prog, 0, size);
}
}
// Load a program.
private int loadProgram(char[] p, String fname)
throws InterpreterException
{
int size = 0;
try {
FileReader fr = new FileReader(fname);
BufferedReader br = new BufferedReader(fr);
size = br.read(p, 0, PROG_SIZE);
fr.close();
} catch(FileNotFoundException exc) {
handleErr(FILENOTFOUND);
} catch(IOException exc) {
handleErr(FILEIOERROR);

回目录 |  [1]  [2]  [3]  [4]  [5]  | 上一章 | 下一章

图书简介
本书目录
第一部分 Java 精 髓
· 完全集成的异常机制
· 对多态性支持的改进
· 可移植性和安全性
· 丰富的Java API
· Applet
· 继续变革
第二部分 递归下降的表达式解析器
· 表达式
· 解析表达式
· 表达式的解析
· 表达式的分解
· 表达式解析器
· 向解析器中添加变量
· 解析器中的语法检查
· 计算器Applet
· 一些尝试
第三部分 使用Java实现语言解释器
· 使用Java的原因
· 解释计算机语言
· 解释器概述
· Small BASIC解释器
· Small BASIC表达式解析器
· 解释器
· Small BASIC的使用
· 进行增强和扩展
· 创建计算机语言
热点排行(Top10)

热门关键字:手机 | 笔记本 | MP3 | 移动存储 | 数码相机 | 数码摄像机 | 显示器 | 学院 | 软件下载 | 游戏 | IT女性 | 方案库

关于eNet | 广告服务 | 我们的产品 | 使用版权 | 投稿指南 | 诚邀加盟 | 联系我们

网站合作、内容监督、商务咨询:010-65245588
对本站有任何建议、意见或投诉,请点这里在线提交
Copyright © 1998--2007 硅谷动力公司版权所有

未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
【声明】本网站部分内容属论坛网友发布,本网站仅提供网友交流平台,但有权在本网站
范围内引用、发布、转载来自论坛网友发布的内容。网友发布内容纯属个人行为,与本网
站立场无关。本网站对于论坛网友发布的内容所引发的版权、署名权的异议及纠纷,不承
担任何责任。其他媒体转载须事先与原作者和本网站联系。
京ICP证000044