《ANTLR 4权威指南》——2.5 语法分析树监听器和访问器-阿里云开发者社区

开发者社区> 华章计算机> 正文

《ANTLR 4权威指南》——2.5 语法分析树监听器和访问器

简介:
+关注继续查看

本节书摘来自华章计算机《ANTLR 4权威指南》一书中的第2章,第2.5节,作者[美] 特恩斯·帕尔(Terence Parr),张博 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.5 语法分析树监听器和访问器

ANTLR的运行库提供了两种遍历树的机制。默认情况下,ANTLR使用内建的遍历器访问生成的语法分析树,并为每个遍历时可能触发的事件生成一个语法分析树监听器接口(parse-tree listener interface)。监听器非常类似于XML解析器生成的SAX文档对象。SAX监听器接收类似startDocument()和endDocument()的事件通知。一个监听器的方法实际上就是回调函数,正如我们在图形界面程序中响应复选框点击事件一样。除了监听器的方式,我们还将介绍另外一种遍历语法分析树的方式:访问者模式(vistor pattern)。

1.语法分析树监听器

为了将遍历树时触发的事件转化为监听器的调用,ANTLR运行库提供了ParseTree-Walker类。我们可以自行实现ParseTreeListener接口,在其中填充自己的逻辑代码(通常是调用程序的其他部分),从而构建出我们自己的语言类应用程序。

ANTLR为每个语法文件生成一个ParseTreeListener的子类,在该类中,语法中的每条规则都有对应的enter方法和exit方法。例如,当遍历器访问到assign规则对应的节点时,它就会调用enterAssign()方法,然后将对应的语法分析树节点——AssignContext的实例——当作参数传递给它。在遍历器访问了assign节点的全部子节点之后,它会调用exitAssign()。图2-4用粗虚线标识了ParseTreeWalker对语法分析树进行深度优先遍历的过程。

image

除此之外,图2-4中还标识出了遍历过程中ParseTreeWalker调用assign规则的enter和exit方法的时机(其中未显示监听器其他方法的调用)。图2-5显示了在我们的赋值语句生成的语法分析树中,ParseTreeWalker对监听器方法的完整的调用顺序。

image

监听器机制的优秀之处在于,这一切都是自动进行的。我们不需要编写对语法分析树的遍历代码,也不需要让我们的监听器显式地访问子节点。

2.语法分析树访问器

有时候,我们希望控制遍历语法分析树的过程,通过显式的方法调用来访问子节点。在命令行中加入-visitor选项可以指示ANTLR为一个语法生成访问器接口(visitor interface),语法中的每条规则对应接口中的一个visit方法。图2-6是使用常见的访问者模式对我们的语法分析树进行操作的过程。

image

其中,粗虚线显示了对语法分析树进行深度优先遍历的过程。细虚线标示出访问器方法的调用顺序。我们可以在自己的程序代码中实现这个访问器接口,然后调用visit()方法来开始对语法分析树的一次遍历。
image

ANTLR内部为访问者模式提供的支持代码会在根节点处调用visitStat()方法。接下来,visitStat()方法的实现将会调用visit()方法,并将所有子节点当作参数传递给它,从而继续遍历的过程。或者,visitMethod()方法可以显式调用visitAssign()方法等。

ANTLR会提供访问器接口和一个默认实现类,免去我们一切都要自行实现的麻烦。这样,我们就可以专注于那些我们感兴趣的方法,而无须覆盖接口中的方法。我们将在第7章中深入介绍访问器和监听器。

image

迄今为止,我们已经大体上了解了ANTLR的工作原理。在本章中,我们认识了从字符序列到语法分析树的整个流程,学习了ANTLR运行库的一些关键类。此外,我们还简单了解了监听器和访问器机制,它们是连接语法分析器和特定程序代码的桥梁。在下一章中,我们将通过一个实际的例子来使大家加深对上述概念的理解。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
日志系列--前端访问日志的统计分析
简介 很多个人站长在搭建网站时使用nginx作为服务器,为了了解网站的访问情况,一般有两种手段: 使用CNZZ之类的方式,在前端页面插入js,用户访问的时候触发js,记录访问请求。 分析nginx的access log,从日志中挖掘有用信息。
4206 0
《VMware Virtual SAN权威指南(原书第2版)》一3.5 可能发生的网络配置问题
本节书摘来自华章出版社《VMware Virtual SAN权威指南(原书第2版)》一 书中的第3章,第3.5节,作者:[美] 科马克·霍根,邓肯·埃平,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2275 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《Nacos架构&原理》
立即下载
《看见新力量:二》电子书
立即下载
云上自动化运维(CloudOps)白皮书
立即下载