Antlr4 如何忽略令牌并重置lexer先行索引
几周前,我开始使用ANTLR4。我想知道是否有一种方法可以通过lexer忽略匹配的令牌,并将CharStream的索引位置重置为被忽略令牌的开始位置,以便可以通过其他规则(例如,不同模式中的其他规则)再次匹配它Antlr4 如何忽略令牌并重置lexer先行索引,antlr4,Antlr4,几周前,我开始使用ANTLR4。我想知道是否有一种方法可以通过lexer忽略匹配的令牌,并将CharStream的索引位置重置为被忽略令牌的开始位置,以便可以通过其他规则(例如,不同模式中的其他规则)再次匹配它 非常感谢。这听起来有点像lesser命令,它是被提出的,但从未完全定义过: 现在,我将覆盖lexer中的nextToken命令 @Override public Token nextToken() { while (true) { int mark = inpu
非常感谢。这听起来有点像
lesser命令,它是被提出的,但从未完全定义过:
现在,我将覆盖lexer中的nextToken
命令
@Override
public Token nextToken() {
while (true) {
int mark = input.mark();
try {
int startIndex = input.index();
Token token = super.nextToken();
if (token != null && token.getType() == MY_SPECIAL_TYPE) {
pushMode(MY_SPECIAL_MODE);
input.seek(startIndex);
continue;
}
return token;
}
finally {
input.release(mark);
}
}
}
可能:{u input.seek(_tokenStartCharIndex);skip();};它起作用了。我认为按照链接中的建议创建lexer命令是一个有趣的想法。非常感谢。