生成java代码解析树并对其进行评估以进行测试

Chr*_*ian 11 java unit-testing code-generation metaprogramming

我们需要生成Java源代码.我们通过对抽象语法树建模并使用树生成器来生成实际的源代码文本.这一切都很好.

由于我的AST代码有点旧,它不支持注释和泛型.因此,我正在寻找可用于具有代码生成需求的未来项目的开放项目.这就是实际问题的来源.我们想测试生成的代码是否具有正确的行为.

在这里我有了实际评估AST的想法,而不是生成java源代码,编译它,并针对该代码运行测试.评估者可以加速单元测试,并且可以评估较小的生成代码片段,例如只有一种方法,使"单位"更合理.

到目前为止,我发现com.sun.codemodel项目似乎相当不错,因为它是一个现代的(支持java5和6功能)基于AST的代码生成解决方案.

任何人都知道是否有另一个项目允许我直接评估AST的部分(例如单个生成的方法)?

Ira*_*ter 2

为了评估 Java,您需要与之相关的所有语义分析(“这个标识符的范围是什么?它有什么类型?”)以及解释器。

为了进行语义分析,您需要的不仅仅是 AST:您还需要全名解析(符号表构建)和类型解析(确定表达式类型并验证表达式在找到它们的上下文中是否有效)作为类查找(foo引用了哪个实际方法?)

这样,您可以考虑通过按执行顺序爬行树来构建解释器。您还需要构建一个存储管理器;你可能不需要做一个完整的垃圾收集器,但你需要一些东西。如果您确实想运行某些东西,您还需要一个 .class 文件的解释器,这意味着您需要一个解析器(以及类文件的名称/类型解析)。

我不知道 Eclipse 是否具备这一切(至少您可以免费获得存储管理器部分:)。我有点期待它,因为它最初的设计是支持 Java 开发,但多年来我对很多工具感到非常失望。

DMS软件重组工具包也是一个程序分析/转换,可以处理多种语言。它有一个完整的Java 前端,包括解析、AST 构建、符号表构建和名称解析、类型解析、构建调用图(解析虚拟函数调用所需),并且有一个 .class 文件读取器来启动名称解析。因此,这将是构建口译员的良好基础。

DMS 也可以构造任意 AST,然后从中生成源代码,因此它也可以很好地处理代码生成端。

[DMS存在的原因是“非常失望”的部分]。