2012-02-06 37 views
2

我正在手动构建AST树以与我的应用程序一起使用。我目前在我的程序内存中使用标准OO方法获得大量数据,这些数据将用于形成AST。AST的Java构建器?

我想知道是否偶然有任何框架/代码生成器可以帮助我完成此任务。

我不是在寻找一个编译器编译器。我不想定义语法,并让代码生成器为我生成解析器。我打算自己实例化树的节点,我只想寻找一种更快,更便宜的方式来自己构建.java文件(另外还可以选择节点的属性,可选的方法等等)。

+0

那么你知道你想创建什么AST节点?你听起来像你想要一个代码生成器,但一个生成器必须运行一些输入。你有什么输入,描述你想要的AST节点?如果你没有这样的输入,你如何期待一个生成器或框架来帮助“构建.java”文件。 (你的意思是* Java文件?) – 2012-02-06 06:59:15

回答

1

这似乎是问题的答案:

http://www.jetbrains.com/mps/

MPS的主要目标是允许扩展语言。这是因为 每个现有语言都已经定义了严格的语言语法,这限制了它的灵活性。

扩展语言语法的问题主要是代码的文本 演示文稿。如果我们想要使用 不同的语言扩展,那么每个扩展都可能有自己的语法。

这自然导致了非文本呈现 程序代码的想法。这种方法的一个主要好处是它消除了代码解析的需要。我们的解决方案是让代码始终保持在抽象语法树(AST)中,其中包含节点 ,其中包含属性,子节点和引用,并完整描述了程序代码 。

与此同时,MPS提供了一种有效的方式来保持 以类似于文本的方式编写代码。

在创建语言时,您需要定义代码编辑和 渲染的规则。您还可以指定语言类型系统和约束条件。这使得MPS能够即时验证程序代码,并且因此使用新语言的编程容易且易于出错。

MPS使用生成方法。您还可以为其语言定义生成器,以将自定义语言中的代码转换为某种常规语言中的可编译 代码。目前,MPS尤其适用于但不限于生成Java代码。您还可以 生成XML,HTML,JavaScript等。

+0

你很清楚你不想要一个为你生成解析器的编译器编译器,但这正是MPS所做的(至少它的一个角落,如果你想使用它,你是无法避免的)。所以我不明白你为什么认为这是你原来问题的答案。 – 2012-02-07 01:06:21

+1

MPS不会生成解析器。它会自动生成我可以在我的程序中使用的输出文件。 – 2012-02-08 14:22:24

4

我强烈建议你看看Eclipse的Java Development Tools。它包含一个非常强大的AST框架。

我的理解是,使用这个API,您将可以访问各种类型的AST节点的所有属性,并且您还可以使用beginVisit()endVisit()方法创建访问者。

+0

你提到的是JDT的哪个具体插件? – 2012-02-06 05:28:46

+0

@devouredelysium我猜这是[JDT核心](http://www.eclipse.org/jdt/core/index.php)([javadoc](http://help.eclipse.org/indigo/index。 jsp?topic =%2Forg.eclipse.jdt.doc.isv%2Freference%2Fapi%2Foverview-summary.html)) – prunge 2012-02-07 00:49:28

+0

是的,@prunge是正确的,JDT Core就是您要找的。 – jbranchaud 2012-02-07 04:30:31