package uva.ql.main;
import java.io.FileInputStream;
import java.io.IOException;
import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.tree.ParseTree;
import uva.ql.ast.Node;
import uva.ql.ast.Prog;
import uva.ql.interpreter.gui.Renderer;
import uva.ql.interpreter.typecheck.TypeCheckVisitor;
import uva.ql.parser.QLLexer;
import uva.ql.parser.QLMainVisitor;
import uva.ql.parser.QLParser;
import uva.ql.test.Test;
public class Main{
public static void main(String[] args) {
Test test = new Test();
test.runTestSuite();
ParseTree tree = getParseTree("SupportingFiles/Test.ql");
Prog prog = (Prog)getAST(tree);
TypeCheckVisitor typeCheck = new TypeCheckVisitor();
typeCheck.visitProg(prog);
if (!typeCheck.hasErrors()){
Renderer renderer = new Renderer(prog);
renderer.visitProg(prog);
}
else {
typeCheck.printIssues();
}
}
private static ParseTree getParseTree(String path){
ANTLRInputStream inputStream = null;
try{
inputStream = new ANTLRInputStream(new FileInputStream(path));
}
catch (IOException ioException){
System.out.println("Exception: " + ioException.getMessage());
}
QLLexer lexer = new QLLexer(inputStream);
CommonTokenStream stream = new CommonTokenStream(lexer);
QLParser parser = new QLParser(stream);
ParseTree tree = parser.prog();
return tree;
}
private static Node getAST(ParseTree tree){
QLMainVisitor visitor = new QLMainVisitor();
Node ast = visitor.visit(tree);
return ast;
}
}