【问题标题】:generate source code from AST从 AST 生成源代码
【发布时间】:2018-11-28 10:51:22
【问题描述】:

我了解任何源代码都可以转换为 AST。现在我想将该 AST 转换回源代码,但与语言无关。有什么工具可以帮助我吗?
我所说的语言无关是指pythonjava

【问题讨论】:

  • 如果您不将 AST 还原回它的来源,如果不是已知语言,目标语法是什么?
  • 只有当您的 AST 构建器在 AST 中留下足够的信息时,您才能重新生成文本。 ANTLR 大多没有(例如,该数字的显示基数是多少?)如果您想知道这样做需要什么,请参阅我对“将 AST 编译回源代码”stackoverflow.com/a/5834775/120163 的回答

标签: antlr4 abstract-syntax-tree


【解决方案1】:

您想到的是源代码翻译器,它涉及的不仅仅是从解析树生成一些代码(ANTLR4 不会创建 AST 顺便说一句。)。通常,这样的翻译器将解析树转换为抽象各种语言结构的中间表示,然后使用它生成目标语言中的代码(对源语言中没有的所有内容在目标语言中进行了很多特殊处理,优化等等)。

【讨论】:

    【解决方案2】:

    根据我的意见,您不能将 AST 转换回源代码。因为生成的 ast 可能是任何语言,您无法将该 ast 转换回您想要的任何语言。

    【讨论】:

    • 可能需要更强烈地强调任何特定的 AST 仍然代表程序在其编写的语言中的语法,因此不能直接转换为另一种语言
    • 如果正确设计 AST,它们会携带足够的信息来为 AST 节点表示的语言重新生成等效的源文本。将一种语言的 AST 转换为另一种语言是可能的,但这实际上是代码迁移,而不是重新生成源文本。有关为什么这很难的更多详细信息,请参阅stackoverflow.com/questions/3455456/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 2011-01-13
    • 2014-08-12
    • 1970-01-01
    相关资源
    最近更新 更多