ANTLR树必要吗?

Mar*_*son 2 compiler-construction antlr

在构建编译器(使用ANTLR)时使用AST的目的是什么.有必要吗?什么是所谓的TreeParser,如何使用它?是否可以构建没有任何树的编译器?如果没有,是否有详细描述该主题的好教程?

Aiv*_*var 5

AST允许您将解析与其他编译器任务(名称绑定,类型检查,代码生成)分开 - 它比纯文本更方便地呈现程序结构.当您进行绑定或类型检查或代码生成时,您关心的是结构而不是关于程序的文本布局.

对于非常简单的语言,可能可以在解析器操作中执行所有操作(ANTLR参考有一个示例),但对于非平凡的编程语言,AST是可行的方法.

(您不一定需要使用ANTLR树和树语法,在您可以构建的规则操作和您自己的数据结构中)

如果您是Java人员,那么关于Eclipse中Java AST的本教程可能会很有趣:http://www.eclipse.org/articles/article.php? file = Article-JavaCodeManipulation_AST/ index.html

  • 一个重要的警告.假设你将使用他们的AST东西(例如树语法等),大多数ANTLR的东西都会被设置.上次我试图使用ANTLR,这个小小的记录是如此糟糕的记录,以至于在任何人调整之前需要一个月的大部分时间来回,我没有考虑过这些术语. - 花一些时间,并弄清楚(详细的)ANTLR的预期用途与yacc/bison的不同之处,你将节省一大堆痛苦. (2认同)