问题描述
我为词法分析器和解析器实现了一个错误侦听器处理程序。效果很好,例如,当我更改输入时,我收到以下消息:
“线程“主”中的异常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 (将#修改为@)