我有一个词法分析器,用 ANTLR 生成。我试图实现的是在词法分析期间处理无法识别的令牌时出现的错误。
如何才能只获取导致此错误的字符?
lexer.addErrorListener(new ANTLRErrorListener() {
@Override
public void syntaxError(Recognizer<?, ?> recognizer,
Object offendingSymbol, int line,
int charPositionInLine, String msg,
RecognitionException e) {
}
// ....
}
给定的消息
msg
包含消息和角色,但我希望角色只是为了为我的代码的用户生成更好的消息。
你可以像这样得到有问题的角色:
lexer.addErrorListener(new ANTLRErrorListener() {
@Override
public void syntaxError(Recognizer<?, ?> recognizer,
Object offendingSymbol, int line,
int charPositionInLine, String msg,
RecognitionException e) {
int index = recognizer.getInputStream().index();
String text = lexer.getInputStream().getText(Interval.of(index, index));
throw new RuntimeException(String.format("Don't know how to handle '%s'", text));
}
// ...
});