快速业务通道

探索Eclipse的ASTParser - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

探索Eclipse的ASTParser

时间:2011-04-11 IBM Manoel Marques

Eclipse JDT 能提供什么帮助

Eclipse JDT 提供了操纵 Java 源代码、检测错 误、执行编译和启动程序的的 API。本文将说明如何使用 ASTParser 从头创建一个 Java 类,同时介绍如何使用 JDT 服务编译生成的代码。

Eclipse JDT 有自己的文档对 象模型(DOM),其思想和众所周知的 XML DOM 是一致的:抽象的语法树(AST)。

Eclipse V3.0.2 支持 Java Language Specification, Second Edition (JLS2), 能够正确解析用各种 Java 语言版本(最高到 J2SE 1.4)编写的程序。对 JLS3 的支持正 在进行之中,在下一个重要的 Eclipse 版本中,就能够解析用新的 J2SE 1.5 结构编写的 程序。

完全免费的代码

本文提供了两个示例应用程序,这两个示例都包含 在一个称为 ASTExplorer 的 Eclipse 项目中:

ASTMain

ASTExplorer

ASTMain 生成一个 Java 类,然后编译这个类并运行其 main() 方法。该方法将使 用按钮创建一个 SWT Shell 物件。

ASTExplorer 解析给定的 Java 类,显示其 AST 层次结构。它有三个面板:一个包含 AST Tree 视图显示 AST 层次结构,一个显示源 代码,还有一个显示解析器错误。

图 1 显示了执行中的 ASTExplorer 界面。注意 ,如果选择一个节点,源代码中对应的位置将使用蓝色突出显示。解析错误用红色突出显 示。

图 1. 运行中的 ASTExplorer

探索Eclipse的ASTParser - 编程入门网

这些例子是 在 Eclipse V3.0.1 及 V3.0.2、Windows® XP Professional SP2、Sun J2SDK 1.4.2.05 环境中经过测试的。文中的项目类路径是用于 Eclipse V3.0.2 的。如果需要在 Eclipse V3.0.1 下运行,只需要修改类路径指向正确的插件即可。

建议在阅读后面的内容之前先下载示例应用程序。这里的关键词是探索,阅读本文的同 时运行给出的例子有助于提高学习的效率。

探索Eclipse的ASTParser(2)

时间:2011-04-11 IBM Manoel Marques

ASTParser 和 ASTNodes

AST 层次结构的最上层是 ASTNode。每个 Java 结构都用它来表示。多数节点的名称意 义都很明确,如 Comment、CastExpression 等。可以使用 AST 类的方法(比如 newBlock()、newBreakStatement() 等)来创建节点。Java 类用 Compilation Unit(编 译单元)节点表示。清单 1 展示了如何创建编译单元。

清单 1. 创建编译单元

ASTParser parser = ASTParser.newParser(AST.JLS2); parser.setSource("".toCharArray()); CompilationUnit unit = (CompilationUnit) parser.createAST(null); unit.recordModifications(); AST ast = unit.getAST();

要注意 ASTParser 对 JLS2 的配置,然后使用空数组初始化解析器。如果不这样做, 就会在访问编译单元时遇到异常。

解析已有代码也需要同样的步骤。该例中要解析的是 org.eclipse.core.runtime 的一 个实例。createAST() 方法的 IProgressMonitor 可以在长时间的解析中提供反馈信息, 后面将示范它的用法。

调用 recordModifications() 将启动对节点修改的监控。调用这个方法很重要,因为 这样可以在以后通过检索节点的修改来访问源代码。

最后,从编译单元中访问 AST 的所有者,并在后续的节点创建中使用它。AST 树中的 所有节点都属于同一个所有者。任何不是该所有者创建的节点都要先通过导入才能加入到 树中。现在就可以开始创建 Java 类了,清单 2 展示了如何创建一个包。

清单 2. 创建 Package

PackageDeclaration packageDeclaration = ast.newPackageDeclaration (); unit.setPackage(packageDeclaration); packageDeclaration.setName(ast.newSimpleName("astexplorer"));

有几个节点方法要使用 Name 节点。Name 节点可以是 SimpleName 或者 QualifiedName,后者

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号