package qls.util; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CommonTokenStream; import ql.ast.AstNode; import ql.ast.form.Form; import ql.semantics.errors.Messages; import qls.ast.AstBuilder; import qls.ast.Stylesheet; import qls.gen.QLSLexer; import qls.gen.QLSParser; /** * Created by bore on 12/03/15. */ public class ParserHelper { public static Messages check(String stylesheet, String form) { Form f = (Form)ql.util.ParserHelper.ParseForm(form); Stylesheet s = (Stylesheet)ParseStylesheet(stylesheet); return qls.semantics.TypeChecker.check(s, f); } public static AstNode ParseStylesheet(String file) { CharStream stream = ql.util.ParserHelper.createFileStream(file); QLSParser parser = createQLSParser(stream); QLSParser.StylesheetContext s = parser.stylesheet(); AstBuilder visitor = new AstBuilder(); return s.accept(visitor); } public static AstNode ParsePage(String input) { CharStream s = ql.util.ParserHelper.createInputStream(input); QLSParser parser = createQLSParser(s); QLSParser.PageContext c = parser.page(); qls.ast.AstBuilder visitor = new qls.ast.AstBuilder(); return c.accept(visitor); } public static AstNode ParseStatement(String input) { CharStream s = ql.util.ParserHelper.createInputStream(input); QLSParser parser = createQLSParser(s); QLSParser.StatementContext c = parser.statement(); qls.ast.AstBuilder visitor = new qls.ast.AstBuilder(); return c.accept(visitor); } public static AstNode ParseStylesheetRule(String input) { CharStream s = ql.util.ParserHelper.createInputStream(input); QLSParser parser = createQLSParser(s); QLSParser.StylesheetRuleContext c = parser.stylesheetRule(); qls.ast.AstBuilder visitor = new qls.ast.AstBuilder(); return c.accept(visitor); } public static AstNode ParseWidgetValue(String input) { CharStream s = ql.util.ParserHelper.createInputStream(input); QLSParser parser = createQLSParser(s); QLSParser.WidgetValueContext c = parser.widgetValue(); qls.ast.AstBuilder visitor = new qls.ast.AstBuilder(); return c.accept(visitor); } private static QLSParser createQLSParser(CharStream stream) { QLSLexer lexer = new QLSLexer(stream); CommonTokenStream tokens = new CommonTokenStream(lexer); return new QLSParser(tokens); } }