快速业务通道

诊断Java代码: 设计可扩展的应用程序,第4部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
析 if 语句

parseStatement(SExp sExp) {   ...   }   else if (sExp.nth(0).equals("if") && sExp.length() == 4) {    return new IfStatement(parseExp(sExp.nth(1)),                parseStatement(sExp.nth(2)),                parseStatement(sExp.nth(3)));   }   ... }

在这个 if-then-else 语句结束部分是 else 子句,这个子句对应于 S-expression 与语法结构有效格式不匹配的情况。在此情况下, SyntaxError 连同适当的错误信息一同抛出。

下一步:求值

在脚本被解析为这种格式之后,我们可以轻易地实现解释过程的其它阶段。假如我们的语言包含静态类型系统,则这时应该包含类型检查程序。

同样,此时应该包含用于任何其它语言约束的检查程序。例如,如果我们的脚本编制语言包含类的层次关系,则我们应该希望检查这个层次结构中不包含循环。

实现这些不同阶段的一种好方法是对每个阶段使用语法树的访问者。那样的话,针对特定阶段的所有代码都放在一个地方。此外,在额外阶段添加也较容易 ― 我们只要编写另一个访问者并将它放在这个序列中。这样做的结果是,根本无需修改其它类。

但在我们的示例语言中,没有添加这样的约束,我们可以继续到解释的最终阶段:求值。象解析之后的其它阶段一样,本阶段也可以作为语法树的访问者实现,并且我由衷地推荐这么做。

访问者中每一个 for 子句将描述如何对特定形式的程序构造求值。对我们的语言中基本操作的求值将符合所支持应用程序的方法调用。

清单 7. for 子句描述了构造求值

class Evaluator extends SyntaxTreeVisitor {   Application app;   public Object forCutStatement(CutStatement that) {    app.cut(that.getName());    // A VoidObject is returned as the result of evaluating    statements, to meet the signature of the for methods.    return new VoidObject();   }   ... }

诊断Java代码: 设计可扩展的应用程序,第4部分(6)

时间:2011-02-11 IBM Eric E. Allen

至于更复杂的操作,我们可以依靠 Java 语言的底层程序构造轻易地实现这些操作。例如,这里是如何实现 if 和 while 构造的例子:

清单 8. 实现 if 和 while 构造

public Object forWhileStatement(WhileStatement that) {    while (that.getTest().accept(this).equals(new Boolean(true))) {     that.getBody().accept(this);    }    return new VoidObject();   }   public Object forIfStatement(IfStatement that) {    if (that.getTest().accept(this).equals(new Boolean(true))) {     that.getConsequent.accept(this);    }    else {     that.getAlternative.accept(this);    }    return new VoidObject();   } }

读取良好的脚本

现在,该是我们的语言所编写的脚本的解释了,这将涉及包含该脚本的文件(或其它流)中的简单读取,然后通过本文所描述的那些阶段来处理它。

应用程序的用户和开发人员都能以各种方法扩展这个应用程序而不必涉及源代码。所以您拥有了:通过基于 S-expression 语言的黑箱可扩展性。

这是关于由四部分组成的添加应用程序可扩展性的小系列文章的最后一篇。我要再次强调的是:这些技术就象锋利的双刃剑 ― 有利也有弊。它们可以是实现代码有效复用的功效强大的手段,但也会是非常危险的:如果您过于不加选择和草率地使用它们添加可扩展性 ― 您的应用程序的复杂性会膨胀到失去控制。那时要小心了!

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号