【问题标题】:How is a listener added for a specific keyword?如何为特定关键字添加监听器?
【发布时间】:2018-05-26 01:18:17
【问题描述】:

我有一个解析器语法和词法分析器语法,ANTLR4 4.7 从中生成一个解析器和词法分析器,没问题。侦听器逻辑中的入口点很棒,但我想听语言中的特定关键字。 不知道从哪里开始添加。

我正在使用 Eclipse 的 ANTLR4 插件从语法生成解析器和词法分析器。

【问题讨论】:

  • 您正在监听的关键字是单个词法分析器标记还是应该是任意关键字?
  • @Raven 每个关键字都是一个词法分析器标记,我想选择要听的。
  • 因此您将拥有词法分析器规则 A、B 和 C。然后您正在解析输入并希望能够设置是否侦听 A、B 或 C,对吗?您想在解析期间还是在解析树遍历期间收到通知?我认为前者更容易完成......

标签: parsing antlr4


【解决方案1】:

在生成的xyzBaseListener 的底部有 4 个非特定方法,您可以覆盖它们以满足您的需要:

@Override public void enterEveryRule(ParserRuleContext ctx) { }
@Override public void exitEveryRule(ParserRuleContext ctx) { }
@Override public void visitTerminal(TerminalNode node) { }
@Override public void visitErrorNode(ErrorNode node) { }

例如

public class Tester extends xyzBaseListener
{
  // ... other useful stuff
  @Override public void visitTerminal(TerminalNode node) {
    System.out.println("Saw token '" + node.getText() + "'");
  }
}

参考书提供了有关如何子类化基础侦听器和连接侦听器的示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2021-08-31
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多