如何在第一次lexing或解析错误时退出ANTLR 4?

时间:2016-08-09 16:08:44

标签: exception error-handling antlr4

我正在尝试解决与How to get ANTLR 3.2 to exit upon first error?中相同的问题,但是在antlr4中,因为没有recoverFromMismatchedToken()

2 个答案:

答案 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) { }
}