package nl.uva.sc.encoders.qls.parser; import java.io.IOException; import java.util.ArrayList; import java.util.List; import nl.uva.sc.encoders.ql.ast.TextLocation; import nl.uva.sc.encoders.ql.validation.SyntaxError; import nl.uva.sc.encoders.qls.EncodersQLSLexer; import nl.uva.sc.encoders.qls.EncodersQLSParser; import nl.uva.sc.encoders.qls.EncodersQLSParser.StylesheetContext; import nl.uva.sc.encoders.qls.ast.Stylesheet; import nl.uva.sc.encoders.qls.parser.ParseTreeToAbstractSyntaxTree; 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 StylesheetParser { public StylesheetParsingResult parse(String pathname) throws IOException { EncodersQLSLexer lexer = new EncodersQLSLexer(new ANTLRFileStream(pathname)); EncodersQLSParser parser = new EncodersQLSParser(new CommonTokenStream(lexer)); 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))); } }); StylesheetContext parseTree = parser.stylesheet(); ParseTreeToAbstractSyntaxTree parseTreeToAbstractSyntaxTree = new ParseTreeToAbstractSyntaxTree(); Stylesheet stylesheet = (Stylesheet) parseTreeToAbstractSyntaxTree.visit(parseTree); return new StylesheetParsingResult(stylesheet, syntaxErrors); } }