【问题标题】:Java source code parsers/generators [closed]Java源代码解析器/生成器[关闭]
【发布时间】:2011-10-23 09:24:18
【问题描述】:

我需要工具来:

  • 方便地解析 Java 源代码并轻松访问给定元素。

  • 轻松生成源代码文件,轻松将数据结构转化为代码

有什么好的技巧、库、框架、工具吗?谢谢你的帮助。

【问题讨论】:

  • 如果您告诉我们您尝试完成的工作,您可能会得到更好的答案。有很多代码生成器和检查工具,但都有不同的用途。
  • 反射是一种糟糕的代码分析方法:它不能给你任何编译器作者认为不值得反射的东西。例如,您无法获得有关表达式中内容的任何信息。它也不能帮助您生成代码。
  • 此外,讽刺可能是回答严肃问题的糟糕方式。
  • @Ira Baxter,反射确实离代码生成很远,至少如果你应用常识的话。不幸的是,微软有自己的、不兼容的常识版本,将代码生成功能放入命名空间System.Reflection.Emit。因此,持续存在的混乱甚至影响了 Java 社区。​​span>
  • 这看起来像是两个问题合二为一:你想解析 Java 源代码,并生成 Java 源代码。这是两个不同的问题,可能有两个不同的答案。

标签: java parsing code-generation


【解决方案1】:

如果您需要解析现有源代码,请使用JavaParser它使您可以基于访问者访问 AST。您可以编写新代码,但很多事情都很痛苦(例如引用其他类)

如果您需要生成源代码,请使用CodeModel它可以让您以编程方式创建类、包、方法等,而且非常易于使用。但是,我认为它不能导入现有代码。

两者在各自领域都非常出色。

【讨论】:

  • 使用JavaForger,您可以在模板中使用JavaParser 解析的数据来生成类。可以找到所有已解析变量的概述here
【解决方案2】:

从 Java 6 开始,编译器在 JDK 中包含一个 API。通过它,您可以通过javax.lang.model API 访问Java 解析器的结果。 JDK5 以Mirror API 的形式提供了相同的功能。有一篇很好的介绍文章here

我见过的最好的代码生成工具是CodeModel。它有一个非常简单的 API,可以一次生成多个 Java 源文件。

【讨论】:

    【解决方案3】:

    我们的DMS Software Reengineering Toolkit 及其Java Front End 可以做到这一点。它们旨在支持构建自定义分析器和代码生成器。

    DMS 提供通用解析、抽象语法树(使用 cmets)和符号表构建、树导航/检查/修改工具,以及从修改后的树重新生成完整源代码的能力。其他工具包括源到源转换规则(“如果你看到这个语法,用那个语法替换它”)和模式(用于构建或识别子树)、属性语法评估器、控制和数据流分析,以及调用图构造。 Java 前端专门针对 Java 1.4-1.6 和附近的 1.7 执行所有这些操作。

    (2016 年 5 月编辑:现在处理 Java 1.8)

    DMS 还设计用于处理规模:它通常用于同时处理许多编译单元(源文件),从而实现跨文件边界的分析和转换。还可以同时处理多种语言; DMS 有front ends for a wide variety of languages

    【讨论】:

      【解决方案4】:

      查看Antlr。它的一个例子是 Java 语法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-06
        • 1970-01-01
        • 1970-01-01
        • 2017-06-08
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多