没有合适的资源?快使用搜索试试~ 我知道了~
首页Eclipse JDT AST使用方法(word)
资源详情
资源评论
资源推荐
第二章 AST 的相关操作
2.1 AST 的节点的定位
本节主要介绍 AST 节点获取子节点的方法和从源代码搜索节点的方法。
2.1.1 获取 AST 节点的子节点
ASTNode 是 AST 用于表示树中节点的数据结构,也是所有节点类型(如 Expression,的
父 类 ASTNode 获得父节点可以直接调用 getParent 即可,若想获得根节点可以调用
getRoot,具体可以参照 JDT API,但是仔细查看方法列表就会发现 ASTNode 类没有提供
getChildren 方法,下面就介绍如何获得 ASTNode 的子节点。
首先介绍节点属性,一个节点的子节点被属性划分,例如 TypeDeclaraon 节点(类的
声 明 节 点 ) , 该 节 点 有 一 个 SimpleName 节 点 ( 表 示 类 的 名 称 ) , 这 个 节 点 在
TypeDeclaraon 节点中的属性就是 Name,节点通过属性为节点分类,方便用户提取对应的
节点,也更容易理解子节点的含义。ASTNode 关于属性有两个重要的方法:
1) structuralProperesForType
功能:返回节点的属性列表(List 对象)
2) getLocaonInParent
功能:返回该节点在其父节点的位置(属性)
属性列表中的元素是 StructuralPropertyDescriptor,属性有三种类型:
1)SimplePropertyDescriptor
表示该节点为一个简单属性
2)ChildPropertyDescriptor
表示该节点仍有一个子节点
3)ChildListPropertyDescriptor
表示该节点有大于 1 个的子节点
ASTNode 从属性获得子节点(属性)的方法:
getStructuralProperty(StructuralPropertyDescriptor property)
该方法的返回值根据上述三种类型也有三种返回值类型:
1)SimplePropertyDescriptor
返回一个 Object 对象,通过 toString()方法获得内容 ,通过 property.getId 获得属性名称。
2)ChildPropertyDescriptor
返回一个 ASTNode 对象,即该节点的子节点
3)ChildListPropertyDescriptor
返回一个 List 对象,包含多个 ASTNode,都为该属性下的子节点
总的来说,ASTNode 获得子节点的机制如下图所示:(图 1,2)
图 1 ASTNode 通
过 Property 获得
子节点和自身属
性信息
图 2 ASTNode 根据 Property 不同而得到类型的节点或属性
2.2.2 从源代码搜索节点
NodeFinder 类介绍:在 ASTView(具体可以参照“AST View 插件介绍”)源代码中实现了该
类,JDT 从 3.5 版起正式收入 NodeFinder,路径为 org.eclipse.jdt.core.dom.NodeFinder
NodeFinder 类的初始化:
NodeFinder(ASTNode root, int start, int length) //root 为开始搜索的根节点,start 为源代码开
始位置,length 为长度
使用 NodeFinder 有两种方式:
第一种,创建该类的实体对象,有两种方法供调用:
getCoveredNode()
返回被覆盖的节点(完全覆盖),如果覆盖节点大于一个,则返回尽可能接近所给范围的节点,
具有同样范围则返回第一个发现的节点
getCoveringNode()
返回正被覆盖(部分覆盖)节点,如果该类种节点大于一个,则返回尽可能多的被覆盖的节点 ,
具有同样的范围则返回最后一个发现的节点。
第二种,调用静态方法:
public stac ASTNode perform(ASTNode root, int start, int length)
该方法规则:
1、查找节点的 start 和 length 与所给的起始位置和长度完全匹配的节点
2、若找不到,在这个范围的附近查找,优先完全覆盖的节点,若完全覆盖节点不存在,则
返回部分覆盖节点。
3、若 length 为 0,则返回节点的 start 或者 end 等于所给起始位置的节点
4、若上述三条均查找不到,则返回 null
2.2 AST 的遍历
本节主要介绍 ASTVisitor 的使用方法。
ASTVisitor 提供了一种遍历树的能力,由节点以访问者模式对其子树遍历,我们将对树
的操作在 ASTVisitor 中实现,使用 ASTNode 的 accept 方法,完成用户定义的 visitor 对树的
遍历。
该方法用来对 AST 节点的访问,提供了四个方法:
1) public boolean visit(T node)
T 代表了不同的 AST 节点类型(ASTNode 子类),可以控制对该节点的子节点的访问,如果
返回 true,则继续访问子节点,若返回 false 则不访问子节点
2) public void endVisit(T node)
该方法在该节点的所有子节点访问完成(或 visit 返回 false)后被调用
3) public void preVisit(ASTNode node)
在 visit 方法之前被调用
4) public void postVisit(ASTNode node)
在 endvisit 方法之后被调用
子类根据需要重写上述方法,完成对树的某些操作。
图 3 ASTVisitor 的执行顺序
PreVisit 和 visit 的区别:
两者的最主要区别是参
数 不 同 , 前 者 的 参 数 是
ASTNode , 并 且 在
ASTVisitor 中 该 方 法 只 有 一
个,而后者的参数是所有可
能的节点类型,所以该方法
因 重 载 在 ASTVisitor 有很多
个 。 ASTVisitor 这 样 设 计 是
因为有些操作是对所有节点的统一操作,而这些操作不关注节点类型,并且可能需要最先
执行,所以提供了 preVisit 方法供调用,随后节点的类型被确定,随即调用匹配类型的 visit
方法,完成对某类节点的操作。
同理可知 postVisit 和 endvisit 的区别。
AST 的遍历示例可以参考“数据元素的构造”
第三章 AST View 插件介绍
3.1 AST View 简介
AST View 是 eclipse 环境中的一个 view 插件,它提供了如下主要功能:
1) 将 eclipse 编辑窗口打开的一个 Java 文件转换为抽象语法树(AST: Abstract syntax
tree)的形式,并显示出来;
2) 可进行从编辑器中的文本(代码、注释等)选择到 AST 节点的操作,也可以进行
从节点到文本的反向操作;
3) 进行节点比较;
4) 显示节点的绑定信息和简单的错误信息;
AST View 界面如图 1 所示
图 1 AST View 基本界面
3.2 AST View 安装
AST View 的安装分为更新和手动安装两种方式。
3.2.1 更新方式
更新站点:
hp://www.eclipse.org/jdt/ui/update-site
1)在 eclipse 菜单中选择 Help -> Install new so7ware...
剩余21页未读,继续阅读
懒得打字
- 粉丝: 30
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论6