ANTLR 树有必要吗?

发布于 2024-09-09 04:35:28 字数 112 浏览 2 评论 0原文

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

What is the purpose of using AST while building a compiler (with ANTLR). Is it necessary to have one? What is the so called TreeParser and how can one use it? Is it possible to build a compiler without any trees? If not, are there any good tutorials describing the topic in details?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鱼忆七猫命九 2024-09-16 04:35:28

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

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

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

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

AST lets you separate parsing from other compiler tasks (name binding, typechecking, code generation) -- it presents the structure of program more conveniently than plain text. When you do binding or typechecking or codegen then you care about structure not about textual layout of the program.

For really simple language it might be possible to do everyting in parser actions (ANTLR reference has an example), but for nontrivial programming languages, AST is the way to go.

(You don't necessarily need to use ANTLR trees and tree grammars, in rule actions you can construct and your own data structures)

If you're a Java guy, then this tutorial about Java AST in Eclipse might be interesting:
http://www.eclipse.org/articles/article.php?file=Article-JavaCodeManipulation_AST/index.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文