从AST生成源代码
你记住的是一个源代码翻译器,它涉及的不仅仅是从分析树生成一些代码(ANTLR4不会创建AST顺便说一句)。通常这样的翻译器将解析树转换成一个中间表示,它抽象出不同的语言结构,然后用它来生成目标语言的代码(对目标语言中不可用的源语言的所有内容进行大量的特殊处理,优化等等。)。
根据我的意见,您无法将AST转换回源代码。由于生成的ast可能是任何语言,因此您无法将该ast转换回您想要的任何语言。
可能值得强调的是,任何特定的AST仍然代表程序使用的语言语法,因此不能直接转换为另一种语言 –
如果您正确设计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 –
如果您没有将AST恢复到源代码来源,那么如果不是已知语言,目标语法是什么? –
如果您的AST构建器在AST中留下了足够的信息,您只能重新生成文本。 ANTLR主要不是(例如,这个数字的显示基数是什么?)如果你想知道如何做到这一点,请参阅我对“编译AST回源代码”的回答https://stackoverflow.com/a/5834775/120163 –