zoukankan      html  css  js  c++  java
  • 如何获取antlr解析的错误消息?(完美)

    网上现存解决方法:

    • 实现接口 ANTLRErrorListener 。您可以为此扩展 BaseErrorListener 。收集错误并将它们附加到列表中。
    • 调用 parser.removeErrorListeners()删除默认侦听器
    • 调用 parser.addErrorListener(yourListenerInstance)添加自己的监听器

    本文:

    上面是灭有多大问题,但是必须对解析器所有执行这个操作,否者解析功能得到的不完全。

    public static class UnderLineListener extends BaseErrorListener {
        @Override
        public void syntaxError(Recognizer<?, ?> recognizer,
                                Object offendingSymbol,
                                int line, int charPositionInLine,
                                String msg,
                                RecognitionException e)
        {
            System.err.println("line "+line+":"+charPositionInLine+" "+msg);
            UnderLineError(recognizer, (Token)offendingSymbol, line, charPositionInLine);
    
        }
    X0Parser 
    lexer都需要
    lexer = new X0Lexer(CharStreams.fromString(input));
                CommonTokenStream tokens = new CommonTokenStream(lexer);
                X0Parser parser = new X0Parser(tokens);
                lexer.removeErrorListeners();
                lexer.addErrorListener(new VerboseListener());
                parser.removeErrorListeners();
                parser.addErrorListener(new VerboseListener());
                X0Parser.ProgramContext tree = parser.program();
                if (parser.getNumberOfSyntaxErrors() > 0) {
                    //throw new RuntimeException("Parse failed!");
                    String output = getFileOutput("./tmpOutput");
                    textShow.append(output+"\n");
                }
                Action visitor = new Action(parser);
                visitor.visit(tree);
  • 相关阅读:
    虚拟化技术
    软件产业的知识经济 (蔡学墉)
    关于内存对齐
    Reverse Engineering
    [转]今天的操作系统 
    BasicBIOS & CMOS
    [bbk5355]第18集 Chapter 08 Handling Exceptions(01)
    [bbk1452]第1集 在Apache中使用SSL
    Linux>User Manager
    如何更新linux系统时间
  • 原文地址:https://www.cnblogs.com/dgwblog/p/15717546.html
Copyright © 2011-2022 走看看