java AST 抽象语法树

您所在的位置:网站首页 抽象语法分析树 java AST 抽象语法树

java AST 抽象语法树

2024-01-29 04:58| 来源: 网络整理| 查看: 265

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.21

ps: 需要设置 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