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


向解析器中添加变量

  很多应用使用变量存储数据,包括所有的编程语言、大部分的计算器和电子制表软件。上面介绍的第一版本解析器必须添加变量处理的功能才能用于上述应用领域。为此,解析器需要增加以下一些功能。首先,当然需要增加变量。前文已经提到,我们使用从A到Z的26个字母为变量命名。我们存储在Parser类中的一个包含26个元素的双精度数组之中。因此,必须向Parser类中添加下列域:

  // Array for variables.

  private double vars[] = new double[26];

  当Parser对象初始化时,数组中的每个元素都被自动初始化为0。

  解析器还需要一个方法来查找指定变量的值。由于变量名由从A到Z的字母组成,因此可以用变量名第一个字母的ASCII值减去A的ASCII值,得到的就是该变量在数组vars中的索引。下面给出的findVar()方法完成了此功能:

  // Return the value of a variable.

  private double findVar(String vname) throws ParserException

  { 

   if(!Character.isLetter(vname.charAt(0))){

   handleErr(SYNTAX); 

   return 0.0; 

   } 

   return vars[Character.toUpperCase(vname.charAt(0))-'A'];

  }

  分析上述代码可知,虽然findVar()方法接收的参数可以是一个较长的变量名,例如A12或者test,但是只有变量名的第一个字母是有意义的。读者可以试着改变这一特征以适应自己的需求。

  另外还必须修改atom()方法以同时具备处理数字和变量的能力。新的版本的代码如下:

  // Get the value of a number or variable.

  private double atom() throws ParserException

  { 

   double result = 0.0;

  

   switch(tokType) { 

   case NUMBER:

   try { 

   result = Double.parseDouble(token);

   } catch (NumberFormatException exc) {

   handleErr(SYNTAX); 

   }

   getToken();

   break;

   case VARIABLE: 

   result = findVar(token); 

   getToken(); 

   break; 

   default: 

   handleErr(SYNTAX); 

   break; 

   } 

   return result;

  }

  从技术上讲,这些代码都是解析器为正确处理变量而增加的;然而,还没有办法为这些变量指定一个值。为了给变量赋值,解析器需要处理赋值运算符(即“=”号)的能力。为了实现赋值功能,需要在Parser类中增加另一个方法evalExp1()。增加evalExp1()之后,递归下降的调用链将由这个方法开始。也就是说,现在evaluate()必须调用evalExp1()方法(而不是evalExp2())开始表达式的解析过程方法。evalExp1()方法的代码如下:

  // Process an assignment.

  private double evalExp1() throws ParserException

  { 

   double result;

   int varIdx; 

   int ttokType; 

   String temptoken; 

   

   if(tokType == VARIABLE) { 

   // save old token 

   temptoken = new String(token); 

   ttokType = tokType; 

   

   // Compute the index of the variable. 

   varIdx = Character.toUpperCase(token.charAt(0)) - 'A'; 

   

   getToken(); 

   if(!token.equals("=")) { 

   putBack(); // return current token 

   // restore old token -- not an assignment 

   token = new String(temptoken); 

   tokType = ttokType; 

   } 

   else { 

   getToken(); // get next part of exp 

   result = evalExp2(); 

   vars[varIdx] = result; 

   return result; 

   } 

   } 

   

   return evalExp2(); 

  }


回目录 |  [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