有没有人知道是否有办法获得当前的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();
}
}
非常感谢。
答案 0 :(得分:1)
默认情况下,该信息不会保存在解析树中。您需要执行以下操作来保留它。
TerminalNodeImpl
的新类,并有一个用于存储ATNState
的新字段(我假设您对ATNState
感兴趣,其中包含终端的传出匹配转换) Parser.consume()
方法并复制其内容。将对ParserRuleContext.addChild(Token)
的调用替换为创建自定义终端节点实例的代码,并使用ParserRuleContext.addChild(TerminalNode)
将其添加到树中。请务必设置自定义终端节点的parent
字段,因为ParserRuleContext.addChild(TerminalNode)
不会为您执行此操作。