ast生成java代码 ast javascript

JDT的好处是什么?JDT(java development tooling)是Eclipse提供的一组API 。其功能引用其官方文档上的说法:
Programmatically manipulate Java resources, such as creating projects, generating Java source code, performing builds, or detecting problems in code. Programmatically launch a Java program from the platform. Provide a new type of VM launcher to support a new family of Java runtimes. Add new functions and extensions to the Java IDE itself. 总之 , 提供了一系列强大的API供我们操作Java代码 。
JDT实际上是将Java代码构建成一个基于DOM结构的抽象语法树AST(Abstract Syntax Tree ) 。代码中的每个部分都对应一个ASTNode,许多的ASTNode就构成了这个抽象的语法树 。Java Class一般对应Compilation Unit node,该节点也是AST树上的顶点 。创建一个AST如下:
java 代码
ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setSource("".toCharArray()); CompilationUnit unit = (CompilationUnit) parser.createAST(null); unit.recordModifications(); AST ast = unit.getAST();
其中createAST,当parse需要较长时间时,可以采用createAST(new NullProgressMonitor()) , 否则直接传null即可 。
recordModifications()用于记录节点的变动,比如修改、删除等,当需要对AST树进行变动操作时,必须要预先调用这个方法 。
比较重要的是:一个AST树上的所有节点必须都属于该AST 。不允许直接将其他AST树上的节点添加该AST树上 。否则会抛出java.lang.IllegalArgumentException异常 。须使用ASTNode.copySubtree(AST target, ASTNode node)返回一个目标树的深度拷贝,才能进行添加操作 。例如: java 代码ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setSource("".toCharArray()); CompilationUnit targetRoot= (CompilationUnit) parser.createAST(null); targetRoot.recordModifications(); parser.setSource("class T{}”".toCharArray()); CompilationUnit srcRoot= (CompilationUnit) parser.createAST(null); //这是非法操作 , 两者的AST源不一样 targetRoot.types().add(srcRoot.types().get(0)); //这是合法操作 targetRoot.types().add(ASTNode.copySubtree( targetRoot.getAST(), (ASTNode) srcRoot.types().get(0))); //这是合法操作 targetRoot.types().add(targetRoot.getAST().newTypeDeclaration());
可以查百度百科的
用Java怎么解析C/C++代码生成AST抽象语法树结构其中一个明显的例子是Eclipse CDT里的parser 。
它是完全用Java实现的,手写的递归下降parser,能把C或C++源码parse成AST供Eclipse CDT的IDE功能使用 。它支持C99语法(包括GCC扩展)、C++语法(我没仔细看现在支持到什么版本了)等 。
它并不用于实际的编译(这跟Eclipse JDT里的Eclipse Compiler for Java不同);实际编译还是交给诸如GCC、xlc之类的编译器去完成 。
关于Eclipse CDT里的C与C++ parser的介绍 , 请参考
java parserjava parser是什么,让我们一起了解一下?
Java Parser是基于JavaCC作为Java语言词法解析的工具 , 支持Java语言生成AST(Abstract Syntax Tree抽象语法树),在AST基础上进行类型推断分析,支持修改AST从而生成新的Java文件内容,支持从Java 1.0到14所有的版本的AST解析 。
AST结构允许以一种简单的编程方式使用Java代码 。可以专门操作Java文件,使用起来也更简单 。它提供了一种方便的机制,可以使用我们称为“访客支持”的功能来导航树 。这使开发人员能够专注于在源代码中识别有趣的模式,而不必编写费力的树遍历代码 。该库的最终主要功能是能够操纵源代码的基础结构 。然后可以将其写入文件,为开发人员提供构建自己的代码生成软件的便利 。
那么我们使用JavaParser theere时,总是希望进行很多操作 。
例如 , 我们希望对整个项目进行操作,因此在给定目录的情况下,我们将探索所有Java文件 。此类应有助于完成此任务:

推荐阅读