从AST生成源代码

3

我知道任何源代码都可以转换成AST。现在我想将AST转换回源代码,但是要实现语言无关。有没有工具可以帮助我?
所谓语言无关,特指pythonjava


如果您没有将AST还原回其来源,那么如果不是已知语言,目标语法会是什么? - Frank C.
只有在AST构建器中留下足够的信息时,才能重新生成文本。ANTLR大多数情况下不会这样做(例如,那个数字的显示基数是什么?)如果您想知道如何实现此操作,请参阅我的答案“将AST编译回源代码”https://dev59.com/Sm025IYBdhLWcg3wvIgo#5834775。 - Ira Baxter
2个回答

1
你所想要的是一个源代码翻译器,它涉及的不仅仅是从语法树中生成一些代码(顺便提一句,ANTLR4并没有创建抽象语法树)。通常这样的翻译器将语法树转换为中间表示形式,抽象出各种语言结构,然后使用它来在目标语言中生成代码(需要特殊处理从源语言到目标语言不可用的所有内容、优化等)。

0

根据我的观点,你无法将AST转换回源代码。因为生成的AST可能是任何语言的,你无法将该AST转换回任何你想要的语言。


可能值得更强调的是,任何特定的AST仍然代表了以其所写的语言为基础的程序语法,因此不能直接转换为另一种语言。 - Hurricane Hamilton
2
如果您正确设计AST,它们可以携带足够的信息来重新生成由AST节点表示的语言的等效源文本。将一个语言的AST转换为另一个语言是可能的,但这实际上是代码迁移,而不是重新生成源文本。有关此问题的更多详细信息,请参见https://dev59.com/anA75IYBdhLWcg3wJFYL#3460977。 - Ira Baxter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接