首页 | 新闻资讯 | 软件应用 | 图形图像 | 网络应用 | 硬件学堂 | 程序开发 | 安全中心 | 素材下载 | 作者专区 | 教育频道
学院论坛 | 推荐专题 | 专家答疑 | 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] [6] [7]  | 上一章 | 下一章

 
解释器

  3.5.9 GOTO语句

  在传统的BASIC语言中,最重要的程序控制形式是GOTO语句。GOTO语句的目标必须是一个行号。在Small BASIC语言中也保留了这一传统处理方法。有些人可能知道,早期的BASIC版本要求程序中的每行代码都必须以一个行号开始。但是Small BASIC不再要求每行都有行号;只有当某一行是GOTO语句的目标语句时,它才需要一个行号。因此,在Small BASIC中,行号仅仅只是一个标签。GOTO语句的一般形式如下:

  GOTO 行号

  当解释器遇到一个GOTO语句时,执行过程必须跳转到与行号相对应的代码行。处理GOTO语句的主要问题在于:必须同时提供向前跳转和向后跳转。为了有效地解决这个问题,要求在执行之前就必须扫描整个程序,并将扫描到的每个标签的位置存储在一张表中。那么,以后每次执行GOTO语句时,就可以从这张表中获得目标代码行的位置,并将程序执行点转移到该位置。

  TreeMap集合是一种存储标签及其位置的理想的数据结构,因为每个树图都有一个与特定值关联的键。在解释器中,可以将标签指定为键,将键值指定为标签索引。每个树图保存一个标签/索引对。程序声明了一个名为labelTable的实例变量,由它完成对树图的引用。labelTable的声明如下:

  // A map for labels.
  private TreeMap labelTable;

  scanLabels()方法扫描整个程序,并将每个标签的位置插入TreeMap表中。在程序执行之前,由run()方法调用scanLabels()进行最后预处理。而findEOL()方法用来查找一行程序代码的结尾。下面是scanLabels()和findEOL()的代码:

  // Find all labels. 
  private void scanLabels() throws InterpreterException
  {
   int i;
   Object result;
   // See if the first token in the file is a label.
   getToken();
   if(tokType==NUMBER) 
   labelTable.put(token, new Integer(progIdx));
   findEOL();
   do { 
   getToken();
   if(tokType==NUMBER) { // must be a line number
   result = labelTable.put(token,
   new Integer(progIdx));
   if(result != null)
   handleErr(DUPLABEL);
   }
   // If not on a blank line, find next line. 
   if(kwToken != EOL) findEOL();
   } while(!token.equals(EOP));
   progIdx = 0; // reset index to start of program
  }
  // Find the start of the next line.
  private void findEOL()
  {
   while(progIdx < prog.length &&
   prog[progIdx] != '\n') ++progIdx;
   if(progIdx < prog.length) progIdx++;
  }

  scanLabels()方法检查每行代码的第一个标识符。如果该标识符是一个数字,那么就认为这是一个行号(或者说,是一个标签)。发现标签后,scanLabels()就调用put()方法将其存储到labelTable中。接着调用TreeMap的put()方法返回一个引用,指向该标签以前的映射。如果先前没有任何映射,那么就返回null。因此,如果返回值不为null,那么说明该标签已经存储在树图中。这将导致一个标签重复的错误,因为在一个程序中不允许出现两个相同的标签。

  解释器调用execGoto()方法处理程序中出现的GOTO语句。代码如下所示:

  // Execute a GOTO statement. 
  private void execGoto() throws InterpreterException
  {
   Integer loc;
   getToken(); // get label to go to 
   // Find the location of the label.
   loc = (Integer) labelTable.get(token);
   if(loc == null)
   handleErr(UNDEFLABEL); // label not defined 
   else // start program running at that loc
   progIdx = loc.intValue();
  }
  首先,通过下面这行代码获得与目标标签相关联的位置:

  loc = (Integer) labelTable.get(token);

  TreeMap的get()方法返回与键相关联的值。如前所述,这个键就是标签,而键值就是该标签在程序中的索引。如果找不到标签,get()方法将返回null。如果找到标签,那么标签的值将被赋给progIdx。之后,程序将从progIdx所指示的新位置继续执行。(请记住:progIdx是程序当前执行代码的索引。)

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

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

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

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

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

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