如何在词法分析器的 ANTLRErrorListener 中获取无法识别的令牌?

问题描述 投票:0回答:1

我有一个词法分析器,用 ANTLR 生成。我试图实现的是在词法分析期间处理无法识别的令牌时出现的错误。

如何才能只获取导致此错误的字符?


lexer.addErrorListener(new ANTLRErrorListener() {
  @Override
  public void syntaxError(Recognizer<?, ?> recognizer,  
                          Object offendingSymbol, int line,
                          int charPositionInLine, String msg,
                          RecognitionException e) {

  }

  // ....
}

给定的消息

msg
包含消息和角色,但我希望角色只是为了为我的代码的用户生成更好的消息。

java parsing antlr4
1个回答
0
投票

你可以像这样得到有问题的角色:

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));
    }

    // ...
});
© www.soinside.com 2019 - 2024. All rights reserved.