Java的AST构建者?

时间:2012-02-06 05:16:05

标签: java compiler-construction abstract-syntax-tree

我正在手工构建AST树以与我的应用程序一起使用。我目前在程序的内存中使用标准的OO方法有很多数据,用于形成AST。

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

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

这似乎是问题的答案:

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

  

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

     

扩展语言语法的问题主要是文本   代码的呈现。如果我们想要使用,尤其如此   不同的语言扩展,每个扩展都有自己的语法。

     

这自然导致了非文本表达的想法   程序代码。这种方法的一个主要好处是它消除了   需要进行代码解析。我们的解决方案是始终拥有代码   在抽象语法树(AST)中维护,它由节点组成   与属性,子和引用,并完整描述   程序代码。

     

与此同时,MPS提供了一种有效的方法来继续编写代码   像文字一样的方式。

     

在创建语言时,您可以定义代码编辑和规则   渲染。您还可以指定语言类型 - 系统和   限制。这允许MPS动态验证程序代码,并且   因此,使用新语言进行编程变得简单而且简单   容易出错。

     

MPS使用生成方法。您还可以为其定义生成器   他们的语言将自定义语言中的代码转换为可编译的语言   一些传统语言的代码。目前,MPS尤其如此   生成Java代码的好处,但不仅限于此。你也可以   生成XML,HTML,JavaScript等。