我正在尝试解决与How to get ANTLR 3.2 to exit upon first error?中相同的问题,但是在antlr4中,因为没有recoverFromMismatchedToken()
答案 0 :(得分:0)
Antlr4通常使用ANTLRErrorStrategy
interface。特别要注意BailErrorStrategy
。
要立即保留词法错误,请覆盖Lexer class中的两个recover(....)
方法。通过实现(1)lexer成员方法来做到这一点;或(2)创建包含覆盖方法的Lexer超类。
答案 1 :(得分:0)
成功了,格罗森伯格!
我下载了BailErrorStrategy.java文件(请参阅上面的GRosenberg注释)。
然后我停止使用默认的Lexer,并以以下方式创建了自己的简单子类Lexer:-
package ...;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.LexerNoViableAltException;
import org.antlr.v4.runtime.RecognitionException;
public class MyYAMLANTLR4Lexer extends YAMLANTLR4Lexer {
public MyYAMLANTLR4Lexer(CharStream input) {
super(input);
}
public void recover(LexerNoViableAltException e) { }
public void recover(RecognitionException re) { }
}