Antlr4 获取ATN的当前状态

Antlr4 获取ATN的当前状态,antlr4,Antlr4,有人知道是否有办法获取当前的ATNState吗?我正在直接实现ParseTreeListener,并希望按照以下思路做一些事情: public class MyParseTreeListener implements ParseTreeListener { private ATN atn; public MyParseTreeListener(ATN atn) { this.atn = atn; } @Override public

有人知道是否有办法获取当前的ATNState吗?我正在直接实现ParseTreeListener,并希望按照以下思路做一些事情:

public class MyParseTreeListener implements ParseTreeListener {

    private ATN atn;

    public MyParseTreeListener(ATN atn) {
        this.atn = atn;
    }

    @Override
    public void visitTerminal(TerminalNode terminalNode) {
        // atn.getCurrentState();
    }
}

非常感谢。

默认情况下,该信息不会保留在解析树中。您需要执行以下操作来保存它

  • 创建一个新类,该类扩展了
    TerminalNodeImpl
    ,并有一个新字段用于存储
    ATNState
    (我假设您对
    ATNState
    感兴趣,它包含终端的传出匹配转换)
  • 重写
    Parser.consume()
    方法并复制其内容。将对
    parseruleContext.addChild(令牌)
    的调用替换为创建自定义终端节点实例并使用
    parserureContext.addChild(终端节点)
    将其添加到树中的代码。确保设置自定义终端节点的
    parseruleContext的
    parent
    字段,因为
    parserureContext.addChild(TerminalNode)
    不会为您执行此操作