// HUSACCT-specific exception handler
package husacct.analyse.task.analyse;
import java.util.Collections;
import java.util.List;
import org.antlr.v4.runtime.*;
import org.apache.log4j.Logger;
public class ParserExceptionHandler extends BaseErrorListener {
private AbstractAnalyser analyser;
@SuppressWarnings("unused")
private Logger logger = Logger.getLogger(ParserExceptionHandler.class);
private Object offendingSymbol;
private int line;
private int charPositionInLine;
private String msg;
private RecognitionException recExc;
private List<String> ruleStack;
public ParserExceptionHandler(AbstractAnalyser analyser){
this.analyser = analyser;
}
@Override
public void syntaxError(Recognizer<?, ?> recognizer,Object offendingSymbol,int line,
int charPositionInLine, String msg, RecognitionException e)
{
this.offendingSymbol = offendingSymbol;
this.line = line;
this.charPositionInLine = charPositionInLine;
this.msg = msg;
this.recExc = e;
this.ruleStack = ((Parser)recognizer).getRuleInvocationStack();
Collections.reverse(ruleStack);
//logger.warn(" Syntax Error in file: " + analyser.getSourceFilePath() + " Rule stack: "+ruleStack);
//logger.warn("Line "+line+":"+charPositionInLine+" At " + offendingSymbol + ": " + msg);
analyser.raiseNumberOfSyntaxErrors();
analyser.addFileToFilesWithSyntaxErrorsStack();
}
public Object getOffendingSymbol() {
return offendingSymbol;
}
public int getLine() {
return line;
}
public int getCharPositionInLine() {
return charPositionInLine;
}
public String getMsg() {
return msg;
}
public RecognitionException getRecExc() {
return recExc;
}
public List<String> getStack() {
return ruleStack;
}
}