在ANTLR4中实现处理错误

问题描述

我为词法分析器和解析器实现了一个错误侦听器处理程序。效果很好,例如,当我更改输入时,我收到以下消息:

“线程“主”中的异常org.antlr.v4.runtime.misc.ParseCancellationException:第4:24行令牌识别错误,位于:“。\ r””

我的问题是,我是否可以某种方式知道该错误是什么,并用另一个文本更改该文本错误。例如,在上述情况下,错误是“令牌识别错误:'。\ r'”,因此我想用“令牌错误”进行更改。

错误侦听器类:

import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.misc.*;
public class ErrorListener extends BaseErrorListener{

public static ErrorListener errorListener = new ErrorListener ();

@Override
public void SyntaxError(Recognizer<?,?> recognizer,Object offendingSymbol,int line,int charPositionInLine,String msg,RecognitionException e)
   throws ParseCancellationException {
      throw new ParseCancellationException("line " + line + ":" + charPositionInLine + " " + msg);
   }

}

主类:

import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.*;

public class Testear{
public static void main(String[] args) throws Exception{
    String inputFile=null;
    if(args.length>0) inputFile=args[0];
    InputStream is =system.in;
    if(inputFile!=null){
        is=new FileInputStream(inputFile);
    }

    ANTLRInputStream input = new ANTLRInputStream(is);
    ExprLexer lexer = new ExprLexer(input);

    CommonTokenStream tokens=new CommonTokenStream(lexer);
    ExprParser parser = new ExprParser(tokens);

    lexer.removeErrorListeners();
    lexer.addErrorListener(ManejadorErrores.manejadorErrores);
    parser.removeErrorListeners();
    parser.addErrorListener(ManejadorErrores.manejadorErrores);

    parser.setBuildParseTree(true);
    ParseTree tree = parser.prog();

    VisitorTDS tds=new VisitorTDS();
    tds.visit(tree);

}
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)