我知道任何源代碼都可以轉換爲AST。現在我想將該AST轉換回源代碼,但是與語言無關。有什麼工具可以幫助我嗎?
通過獨立於語言,我特別指python
和java
。從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 –
- 1. 使用Antlr4和StringTemplates從AST生成源代碼
- 2. ANTLR:從AST生成後端源文件
- 3. 如何將ANTLR 4生成的AST轉換爲其源代碼
- 4. 從源代碼到AST到CodeDom
- 5. 任何用於從AST生成JavaScript代碼的工具
- 6. 從AST生成代碼的最佳設計?
- 7. 從typescript AST生成javascript?
- 8. 從Python AST生成.pyc?
- 9. 從源代碼生成類圖
- 10. 從MATLAB源代碼生成文件
- 11. 從IE生成HTML源代碼DOM
- 12. 從源代碼生成HTML報告
- 13. 從java源文件代碼生成
- 14. antlr - 從java源代碼生成語法
- 15. 從eclipse sirius生成源代碼
- 16. 生成AST
- 17. 生成Go源代碼
- 18. SpringRoo @RooWebScaffold,生成源代碼
- 19. 源代碼生成藥劑
- 20. C++ 11源代碼生成
- 21. 哪個更快,更乾淨,生成AST並迭代或生成代碼?
- 22. 將AST編譯回源代碼
- 23. 轉換Jython的源代碼/ ast
- 24. 執行從Rust/Python源代碼生成的LLVM IR代碼
- 25. 從源碼生成rabbitmq
- 26. C源代碼AST中的AST解析器
- 27. antlr爲c生成ast並解析ast
- 28. 下面的代碼段如何工作以生成AST?
- 29. 代碼從Selenium IDE生成的代碼
- 30. 從C#代碼生成彙編代碼?
如果您沒有將AST恢復到源代碼來源,那麼如果不是已知語言,目標語法是什麼? –
如果您的AST構建器在AST中留下了足夠的信息,您只能重新生成文本。 ANTLR主要不是(例如,這個數字的顯示基數是什麼?)如果你想知道如何做到這一點,請參閱我對「編譯AST回源代碼」的回答https://stackoverflow.com/a/5834775/120163 –