在构建编译器(使用ANTLR)时使用AST的目的是什么。有必要吗?什么是所谓的TreeParser,如何使用它?是否可以构建没有任何树的编译器?如果没有,是否有详细描述该主题的好教程?
答案 0 :(得分:5)
AST允许您将解析与其他编译器任务(名称绑定,类型检查,代码生成)分开 - 它比纯文本更方便地呈现程序结构。当您进行绑定或类型检查或代码生成时,您关心的是结构而不是关于程序的文本布局。
对于非常简单的语言,可能可以在解析器操作中执行每个操作(ANTLR参考有一个示例),但对于非平凡的编程语言,AST是可行的方法。
(您不一定需要使用ANTLR树和树语法,在您可以构建的规则操作和您自己的数据结构中)
如果您是Java人员,那么Eclipse中关于Java AST的教程可能会很有趣: http://www.eclipse.org/articles/article.php?file=Article-JavaCodeManipulation_AST/index.html