zoukankan      html  css  js  c++  java
  • 语法分析树监听器和访问器

      ANTLR的运行库提供了两种遍历树的机制。默认情况下,ANTLR使用内建的遍历器访问生成的语法分析树,并为每个遍历时可能触发的事件生成一个语法分析树监听器接口(parse-tree listener interface)

      监听器非常类似于XML解析器生成的SAX文档对象。SAX监听器接收类似startDocument()endDocument()的事件通知。一个监听器的方法实际上就是回调函数,正如我们在图形界面程序中响应复选框点击事件一样。除了监听器的方式,我们还将介绍另外一种遍历语法分析树的方式:访问者模式(vistor pattern)


     语法分析树监听器

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

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

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


     语法分析树访问器

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


    参考

  • 相关阅读:
    微信小程序 列表渲染 wx:for
    微信小程序获取数据、处理数据、绑定数据关键步骤记录
    jq获取页面距离
    jq中哪个方法有回调函数
    轮播图jq版
    计算器
    计算机基础
    安装LAMP
    ubuntu安装最新版本的node.js
    blade模版之页面的嵌套
  • 原文地址:https://www.cnblogs.com/solvit/p/10156039.html
Copyright © 2011-2022 走看看