2017-07-31 168 views
0

我知道任何源代码都可以转换为AST。现在我想将该AST转换回源代码,但是与语言无关。有什么工具可以帮助我吗?
通过独立于语言,我特别指pythonjava从AST生成源代码

+0

如果您没有将AST恢复到源代码来源,那么如果不是已知语言,目标语法是什么? –

+0

如果您的AST构建器在AST中留下了足够的信息,您只能重新生成文本。 ANTLR主要不是(例如,这个数字的显示基数是什么?)如果你想知道如何做到这一点,请参阅我对“编译AST回源代码”的回答https://stackoverflow.com/a/5834775/120163 –

回答

1

你记住的是一个源代码翻译器,它涉及的不仅仅是从分析树生成一些代码(ANTLR4不会创建AST顺便说一句)。通常这样的翻译器将解析树转换成一个中间表示,它抽象出不同的语言结构,然后用它来生成目标语言的代码(对目标语言中不可用的源语言的所有内容进行大量的特殊处理,优化等等。)。

0

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

+0

可能值得强调的是,任何特定的AST仍然代表程序使用的语言语法,因此不能直接转换为另一种语言 –

+0

如果您正确设计AST,它们将携带足够的信息重新生成由AST节点表示的语言的等效源文本。将一种语言的AST转换为另一种语言是可能的,但这实际上是代码代码迁移,而不是重新生成源文本。有关更多细节,请参阅https://stackoverflow.com/questions/3455456/what-kinds-of-patterns-could-i-enforce-on-the-code-to-make-it-easier-to- translat/3460977#3460977 –