2009-09-16 35 views
11

我们需要生成Java源代码。我们通过对抽象语法树进行建模并使用树沃克生成实际的源代码文本来实现此目的。这一切都很好。生成java代码解析树并对其进行评估

由于我的AST代码有点旧,它不支持注释和泛型。所以我正在寻找开放项目,以用于将来需要代码生成的项目。这就是实际问题出现的地方。我们想要测试生成的代码是否具有正确的行为。

这里是我得到的想法,实际上评估AST而不是生成Java源代码,编译它,并针对该代码运行测试。评估者会加速单元测试,并且可以评估更小的生成代码片段,例如只有一种方法,使得“单位”更合理。

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

任何人都知道是否有另一个项目可以让我直接评估AST片段(例如单个生成的方法)?

+1

+1有趣的问题,我们想知道答案现在:-) – KLE 2009-09-16 09:51:51

+1

我只是生成该方法的代码,编译和测试。创建一个解释器是相当多的工作。 – 2009-09-16 09:57:01

+0

是没有任何方法可以使javac的发射解析树和中介交涉之类的东西? (类型决议,课堂查询,无论艾拉巴克斯特在答案中如何表达)。 – 2014-04-27 01:45:16

回答

2

获取更多信息,以评估Java中,你需要所有的语义分析与它一起去(“这是什么标识符的范围是什么?它有哪些类型?”),以及作为口译员。要获得该语义分析,您需要的不仅仅是一个AST:您需要全名解析(符号表构建)和类型解析(确定表达式类型并验证表达式在找到它们的上下文中是否有效) ), 以及类的查找(其实际的方法做FOO指什么?)

有了这一点,你可以考虑在爬在执行顺序树上建一个解释。你还需要建立一个存储管理器;你可能不需要做一个完整的垃圾回收器,但你需要一些东西。如果你真的想运行某些东西,你还需要一个解释器 。这意味着你需要一个解析器 (以及类文件的名称/类型解析)。

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

DMS Software Reengineering Toolkit也是一个程序分析/转换处理多种语言。它具有完整的Java front end,包括解析,AST构建,符号表构造和名称解析,类型解析,构建调用图(解析虚拟函数调用所需)以及具有.class文件读取器的名称解析引导。所以这将是建立口译员的良好基础。 DMS也可以构造任意的AST,然后从它们生成源代码,所以它也可以处理代码生成结束,也很好。

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

2

我不确定这是不是您想要的,但Eclipse的JDT项目提供了一个关于Java AST(包括Java 5和6功能)的非常好的视图。它有一系列用于代码查看/重写(不一定是生成)的实用程序和工具。他们都是根据Eclipse公共许可证获得许可的。

您可以在http://eclipse.org/jdt/

+1

是啊,一个和Sun的codemodel似乎是由建筑物的AST生成代码的最佳选择。但是,我想要的另外,是解释AST(使用编译Java后的语义)的能力。 – Christian 2009-09-16 21:07:19

+0

JDT Core(位于http://www.eclipse.org/jdt/core/index.php)包含以下内容:“在剪贴簿页面或调试器上下文中的评估支持。”我会看看它...... – 2009-10-07 16:56:27