【问题标题】:Is there a Java parser for the Java language?是否有 Java 语言的 Java 解析器?
【发布时间】:2010-12-11 22:36:49
【问题描述】:

我正在寻找一个 java 库,它允许我解析 java 源文件并为我提供代码的 AST 表示。

实际上,我只对带有注释的类和方法定义感兴趣。我不需要方法代码的 AST。

我将这些信息用于代码生成。这就是为什么我不能先编译源文件以从生成的类文件中获取信息的原因。在我生成一些额外的类之前,代码不会编译没有错误。

【问题讨论】:

    标签: java code-generation parsing


    【解决方案1】:

    Java 6 支持此作为编译器的本机部分,并为其提供标准 API (javax.lang.model)。你可以阅读它here。它专为您的用例而设计(即从注释和源代码生成代码)。

    【讨论】:

    • 是的,这看起来不错。你能告诉我哪个类负责读取源文件吗?
    • 您创建了一个编译器“插件”,您在命令行上指定给 javac。我认为你实现的接口是javax.annotation.processing.Processor
    • javax.lang.model 基于处理注释所需的内容,而不是整个语言的抽象语法树。所以它有包、类、方法、字段、参数和变量,但没有表达式或语句。
    • 真可惜。我真的需要从我的生成框架中调用解析器。
    • 这允许您做的是将您的代码生成框架构建到 javac 本身中。 @Pete:我当然知道这一点,问题指定方法主体 not 是必需的。
    【解决方案2】:

    ANTLR (http://www.antlr.org/) 有一个 Java 语言解析器,它还支持 AST。

    试试

    options {
        output=AST;
    }
    

    在*.g文件中(我没有亲自尝试过);

    【讨论】:

    • 好的,我编译了 Java.g,但我仍然不知道如何使用它来获取 AST。你有例子吗?
    • 现阶段(我还在学习)我所能提供的只有:*.g 文件中的options { output=AST; }
    【解决方案3】:

    您可以尝试JavaCC 与 java 语言的语法文件。

    【讨论】:

      【解决方案4】:

      我认为NetBeans Javaparser 可能是您感兴趣的内容。

      【讨论】:

      • 好的,现在我已经建立了一个罐子。如何使用它从 java 源文件创建 AST?
      【解决方案5】:

      我找到了 javaparser 项目,它解析单个 java 文件并返回格式良好的 AST。

      【讨论】:

        【解决方案6】:

        @tangens 写了有关 JavaParser 的文章,但引用了一个现已过时的项目。

        2011 年有一个分支,它仍在积极维护中,现在也解析 Java 1.7 和 1.8。

        你可以在那里找到它:https://github.com/javaparser/javaparser

        免责声明:我是该项目的贡献者。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-05
          • 2012-05-14
          相关资源
          最近更新 更多