如何解决在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 举报,一经查实,本站将立刻删除。