“ParseTreeListener”在ANTLR中是什么意思



我从《最终的ANTLR 4参考>》一书<中读到了以下关于ParseTreeListener的陈述:>

ANTLR 生成特定于每个语法的 ParseTreeListener 子类 使用每个规则的输入和退出方法。

我对each grammar概念有点困惑。我的底线是:

  • 语言等同于它的语法。
  • 语法只是一组规则。
  • 程序等效于表示它的解析树。

因此,如果我们使用 ANTLR 开发语言应用程序,应该只有一种语法。因此应该只有一个ParseTreeListener。那么这里的each是什么意思呢?

加 1

当我继续阅读时,我有一种感觉,这里的grammar只是特定于*.g4文件。也许一种语言可以有多个*.g4文件。我不确定我是否正确。我会不断更新这个问题。

定义.g4语法后,你可以告诉Antlr4生成一个实现ParseTreeListener的类。更详细地说,假设您有一个语法Lang然后 Antlr4 生成一个接口LangParserListener和一个类LangParserBaseListener

  • 该接口定义了如上所述的所有进入和退出方法。
  • LangParserBaseListener为每个方法提供了一个默认的"无操作"实现(请注意,Lang.g4 中的每个表达式有两个方法 - 所以这可能是一个非常大的类/接口(。

LangParserBaseListener的要点是,它使添加只想"侦听"一小部分规则的侦听器变得更加容易。为此,只需从它继承并覆盖相应的方法。

每个语法实现多个侦听器确实非常有意义,例如,第一次传递来定义所有出现的符号,第二次传递来取消引用所有符号引用。这也是Antlr4参考教科书的一部分。

希望有帮助弗里克

相关内容

  • 没有找到相关文章

最新更新