Antlr4 获取ATN的当前状态
有人知道是否有办法获取当前的ATNState吗?我正在直接实现ParseTreeListener,并希望按照以下思路做一些事情:Antlr4 获取ATN的当前状态,antlr4,Antlr4,有人知道是否有办法获取当前的ATNState吗?我正在直接实现ParseTreeListener,并希望按照以下思路做一些事情: public class MyParseTreeListener implements ParseTreeListener { private ATN atn; public MyParseTreeListener(ATN atn) { this.atn = atn; } @Override public
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)
不会为您执行此操作