java AST 抽象语法树 |
您所在的位置:网站首页 › 抽象语法分析树 › java AST 抽象语法树 |
JavaParser
JavaParser is java 1-14 Parser and Abstract Syntax Tree for Java, including preview features to Java 13. 该项目包含一组实现具有高级分析功能的Java 1.0-Java 14 Parser的库。 这包括Java 13的预览功能,以及Java 14的预览功能正在进行中。 学习资料官方书籍 阅读:https://leanpub.com/javaparservisited/read_full TODO: 整本书的学习笔记。 入门例子Sample project with a basic Maven + JavaParser setup Sample project with basic Maven + JavaSymbolSolver set up Inspecting an AST maven 引入 com.github.javaparser javaparser-symbol-solver-core 3.15.21ps: 需要设置 jdk 级别为 1.8 断点 public static void main(String[] args) { // Parse the code you want to inspect: CompilationUnit cu = StaticJavaParser.parse("class X { int x; }"); // Now comes the inspection code: System.out.println(cu); }我们可以通过断点的方式获取 "class X { int x; }" 的信息。 输出 // Now comes the inspection code: YamlPrinter printer = new YamlPrinter(true); System.out.println(printer.output(cu));直接输出 --- root(Type=CompilationUnit): types: - type(Type=ClassOrInterfaceDeclaration): isInterface: "false" name(Type=SimpleName): identifier: "X" members: - member(Type=FieldDeclaration): variables: - variable(Type=VariableDeclarator): name(Type=SimpleName): identifier: "x" type(Type=PrimitiveType): type: "INT" ... xml 格式 修改 class 文件直接参考 Sample project with a basic Maven + JavaParser setup maven 引入 com.github.javaparser javaparser-core 3.15.21 原始 java 类ps: 某种角度是为了展现强大,所以代码很冗余,很长。 import com.github.javaparser.utils.CodeGenerationUtils; import com.github.javaparser.utils.SourceRoot; public class Blabla { private final void method1013(StreamBuffer buf, int opcode) { if (opcode != 1) { if (opcode != 2) { if (opcode != 4) { do { if (opcode != 5) { if (opcode == 6) ((Class94) this).anInt1477 = buf.readUnsignedShort(); else { if (opcode != 7) { if (opcode != 8) { if (opcode == 11) ((Class94) this).anInt1456 = 1; else if (opcode != 12) { if (opcode != 16) { if (opcode == 23) ((Class94) this).anInt1424 = (buf.readUnsignedShort()); else if (opcode != 24) { if (opcode == 25) ((Class94) this).anInt1487 = (buf.readUnsignedShort()); else if (opcode == 26) anInt1435 = (buf.readUnsignedShort()); else if (opcode = 35) { if (opcode >= 35 && opcode = 35 && opcode |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |