package net.iplantevin.ql.ast.astbuilder; import net.iplantevin.ql.antlr.QLLexer; import net.iplantevin.ql.antlr.QLParser; import net.iplantevin.ql.ast.ASTNode; import net.iplantevin.ql.ast.form.Form; import net.iplantevin.ql.ast.form.FormCollection; import net.iplantevin.ql.ast.typechecking.ErrorManager; import net.iplantevin.ql.ast.typechecking.TypeCheckerVisitor; import net.iplantevin.ql.ast.typechecking.TypeEnvironment; import org.antlr.v4.runtime.ANTLRInputStream; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.tree.ParseTree; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; /** * @author Ivan */ public class ASTBuilder { private final QLParser parser; public ASTBuilder(String filePath) throws IOException { assert filePath != null: "filePath cannot be null!"; InputStream stream = new FileInputStream(filePath); ANTLRInputStream input = new ANTLRInputStream(stream); QLLexer lexer = new QLLexer(input); CommonTokenStream tokens = new CommonTokenStream(lexer); parser = new QLParser(tokens); } public FormCollection buildForms() { ParseTree tree = parser.forms(); return (FormCollection) buildNodeFromTree(tree); } public ASTNode buildNodeFromTree(ParseTree tree) { ASTBuilderVisitor builder = new ASTBuilderVisitor(); return tree.accept(builder); } public QLParser getParser() { return parser; } }