抽象语法树AST

上传人:m**** 文档编号:513056440 上传时间:2023-09-16 格式:DOCX 页数:3 大小:7.59KB
返回 下载 相关 举报
抽象语法树AST_第1页
第1页 / 共3页
抽象语法树AST_第2页
第2页 / 共3页
抽象语法树AST_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《抽象语法树AST》由会员分享,可在线阅读,更多相关《抽象语法树AST(3页珍藏版)》请在金锄头文库上搜索。

1、抽象语法树( AST )抽象语法树( AST )最近在做一个类 JAVA 语言的编译器,整个开发过程,用抽 象语法树 ( Abstract SyntaxTree,AST )作为程序的一种中间表 示,所以首先就要学会建立相对应源代码的 AST 和访问AST。Eclipse AST是Eclipse JDT的一个重要组成部分,定义在包 org.eclipse.jdt.core.dom 中,用来表示 JAVA 语言中的 所有语法结构。Eclipse AST 的总体结构1、org.eclipse.jdt.core.dom.AST (AST 节点类)Eclipse AST 的工厂类,用于创建表示各种语法结

2、构的节点。2、org.eclipse.jdt.core.dom.ASTNode 及其派生类( AST 类) 用于表示 JAVA 语言中的所有语法结构,在实际使用中常作为 AST 上的节点出现。3、org.eclipse.jdt.core.dom.ASTVisitor (ASTVisitor 类)Eclipse AST 的访问者类,定义了统一的访问 AST 中各个节 点的方法。详细介绍:、 AST 节点类 整体结构包括 CompilationUnit 类 (编译单元)、 TypeDeclaration 类(类型声明) 、MethodDeclaration 类(方法 声明);语句包括 Block

3、类(语句块) 、 ExpressionStatement 类(表达 式)、 IfStatement(if 语句)、 WhileStatement 类( while 语句)、 EmptyStatement 类(空语句) 、 BreakStatement 类和 ContinueStatement 类;表达式包括 MethodInvocation 类(方法调用) 、 Assignment 类(赋值表达式) (“=”、“+=”、“-=”、“*= ”、“/=”)、 InfixExpression 类(中缀表达式)(“ + ”、“ -”、“ * ”、“/”、“%”、 “=”、“!=”、“< 、“&l

4、t;= ”、“ >= ”、“&& ”、 “ |”。)、 PrefixExpression 类(前缀表达式)(“ +”PLUS “ -”MINUS “!” NOT)、ParenthesizedExpression类(带括号 的表达式)、NumberLiteral 类(整数)、Name 类(simple )、 MethodInvocation 类(方法调用) 。二、AST 类关键是创建编译单元节点,创建类 AST 的实例。AST ast = AST.newAST(JLS3);三、ASTVisitor 类它提供与节点类有关的 visit() 方法和 endVisit() 法,与

5、节点类 无关的 preVisit() 方法和 postVisit() 方法。boolean visit( T node):这类方法如果返回true,则接着访问 子节点。如果返回false,则不再访问子节点。void endVisit(T node): 这类方法在节点 node 的子节点已经被 访问或者是在 visit(node) 返回 false 后调用。void preVisit(): 这类方法在 visit(node) 之前被调用。 void postVisit(): 这类方法在 endVisit(node) 之后被调用。 在做简单解释器过程中,分析句子时我主要用到了上面的 visit() 和 endVisit() 方法, 其中 visit() 方法是比较好理解的, 要是 endVisit() 方法在没有特定语法分析树的情况下分析是 比较抽象的,所以下面我举几个例子分析。endVisit ()在node的子节点已被访问后调用型:a、赋值语句分析为例:i1 = 1;i4 = i1;它们对应语法树结构:ExpressionstatementAssignment

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿/致辞

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号