如何获取antlr解析的错误消息?(完美)

网友投稿 1032 2022-09-02 17:50:00

如何获取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);

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:XML与DTD(够用)
下一篇:PHP常用的五种设计模式及应用场景,来了解下(php门面模式的使用场景)
相关文章