gpt4 book ai didi

java - 自动生成Java源码

转载 作者:搜寻专家 更新时间:2023-10-31 08:07:32 25 4
gpt4 key购买 nike

我正在寻找一种方法,根据类中定义的字段,在现有 Java 源代码文件中自动为新方法生成源代码。

本质上,我希望执行以下步骤:

  1. 读取并解析SomeClass.java
  2. 遍历源代码中定义的所有字段
  3. 添加源码方法someMethod()
  4. 保存 SomeClass.java(理想情况下,保留现有代码的格式)

什么工具和技术最适合实现这一目标?

编辑

我不想在运行时生成代码;我想扩充现有的 Java 源代码

最佳答案

你想要的是一个Program Transformation系统。

好的有你关心的语言的解析器,为解析后的代码构建表示程序的 AST,为你提供访问 AST 进行分析和修改的权限,并且可以从 AST 重新生成源文本。您关于“扫描字段”的评论只是代表程序的 AST 的一种遍历。对于您产生的每个有趣的分析结果,您都希望对 AST 进行更改,也许在其他地方,但仍然在 AST 中。在完成所有更改后,您想要重新生成带有注释的文本(如最初输入的或您在新代码中构建的那样)。

有几种专门针对 Java 执行此操作的工具。

Jackpot提供一个解析器,构建 AST,并允许您编写 Java 过程以对树执行您想要的操作。好处:概念上容易。缺点:您编写的 Java 代码比您预期的要多得多。 Jackpot 仅适用于 Java。

StrategoTXL解析您的代码,构建 AST,并让您编写“源到源”转换(使用目标语言的语法,例如本例中的 Java)来表达模式和修复。额外的好消息:您可以定义任何您喜欢的编程语言作为要处理的目标语言,并且这两种语言都有 Java 定义。但是它们在分析方面很薄弱:通常您需要符号表和数据流分析,才能真正进行所需的分析和更改。他们坚持认为一切都是重写规则,不管这对你有没有帮助;这有点像坚持你只需要工具箱里的一把锤子;毕竟,一切都可以像钉子一样对待,对吧?

我们的 DMS Software Reengineering Toolkit允许任意目标语言的定义(并且有 many predefined langauges including Java ),包括 Stratego 的所有源到源转换能力,TXL,Jackpot 的程序能力,此外还提供符号表、控制和数据流分析信息。编译器专家教我们这些东西是构建强大的编译器所必需的(=“分析+优化+改进”),代码生成系统也是如此,原因完全相同。使用这种方法,您可以生成代码并在您掌握的知识范围内对其进行优化。一个示例,与您的序列化想法类似,是为指定的 XML DTD 生成快速的 XML 读取器和写入器;我们已经使用 DMS for Java 和 COBOL 做到了这一点。

DMS 已被用于读取/修改/写入多种源文件。可以在这篇技术论文中找到一个很好的例子来阐明这些想法,它展示了如何修改代码以插入检测探针:Branch Coverage Made Easy .可以在 How to transform Algebra 找到一个更简单但更完整的定义任意语言和转换的示例。使用相同的想法。

关于java - 自动生成Java源码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5745721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com