package nl.uva.sc.encoders.ql.parser;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import nl.uva.sc.encoders.ql.EncodersQLLexer;
import nl.uva.sc.encoders.ql.EncodersQLParser;
import nl.uva.sc.encoders.ql.EncodersQLParser.QuestionnaireContext;
import nl.uva.sc.encoders.ql.ast.Questionnaire;
import nl.uva.sc.encoders.ql.ast.TextLocation;
import nl.uva.sc.encoders.ql.validation.SyntaxError;
import org.antlr.v4.runtime.ANTLRFileStream;
import org.antlr.v4.runtime.BaseErrorListener;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.RecognitionException;
import org.antlr.v4.runtime.Recognizer;
public class QuestionnaireParser {
public QuestionnaireParsingResult parse(String pathname) throws IOException {
EncodersQLLexer lexer = new EncodersQLLexer(new ANTLRFileStream(pathname));
EncodersQLParser parser = new EncodersQLParser(new CommonTokenStream(lexer));
final List<SyntaxError> syntaxErrors = new ArrayList<>();
parser.addErrorListener(new BaseErrorListener() {
@Override
public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int column, String msg,
RecognitionException e) {
syntaxErrors.add(new SyntaxError(msg, new TextLocation(line, column)));
}
});
QuestionnaireContext parseTree = parser.questionnaire();
ParseTreeToAbstractSyntaxTree parseTreeToAbstractSyntaxTree = new ParseTreeToAbstractSyntaxTree();
Questionnaire questionnaire = (Questionnaire) parseTreeToAbstractSyntaxTree.visit(parseTree);
return new QuestionnaireParsingResult(questionnaire, syntaxErrors);
}
}