【问题标题】:AST builders for Java?Java 的 AST 构建器?
【发布时间】:2012-02-06 05:16:05
【问题描述】:

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

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

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

【问题讨论】:

  • 那么您知道要创建哪些 AST 节点吗?您听起来像是想要一个代码生成器,但是生成器必须使用一些输入。你有什么输入,描述了你想要的 AST 节点?如果您没有这样的输入,您如何期望生成器或框架来帮助“构建 .java”文件。 (您所说的 Java 文件是什么意思?)

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


【解决方案1】:

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

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

【讨论】:

  • 你指的是JDT的哪个具体插件?
  • @devouredelysium 我猜是JDT core (javadoc)
  • 是的,@prunge 是正确的,JDT Core 就是你要找的。​​span>
【解决方案2】:

这似乎是问题的答案:

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

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

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

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

同时,MPS 提供了一种有效的方式来继续编写代码 类似文本的方式。

在创建语言时,您定义代码编辑的规则和 渲染。您还可以指定语言类型系统和 约束。这允许 MPS 即时验证程序代码,并且 从而使使用新语言的编程变得容易且更少 容易出错。

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

【讨论】:

  • 你很清楚你不想要一个为你生成解析器的编译器编译器,但这正是 MPS 所做的(如果你想要的话,至少它的一个角落是你无法避免的使用它)。所以我不明白你为什么认为这是对你原来问题的回答。
  • MPS 不会为我生成解析器。它会自己生成可以在程序中使用的输出文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多