package ql; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ql.ast.Expression; import ql.ast.QLNode; import ql.ast.QLType; import ql.ast.Statement; import ql.ast.visitor.evaluator.Evaluator; import ql.ast.visitor.evaluator.ValueEnvironment; import ql.ast.visitor.prettyprinter.PrettyPrinter; import ql.ast.visitor.prettyprinter.printer.ConsolePrinter; import ql.ast.visitor.typechecker.TypeChecker; import ql.ast.visitor.typechecker.TypeEnvironment; import ql.errorhandling.ErrorEnvironment; import ql.parser.Parser; public class CommandLine { /** * The main method, which gets executed once this class is run. Enabled the user * to enter a string, which is then parsed and shown as an AST. */ public static void main(String[] args) { TypeEnvironment register = new TypeEnvironment(); ValueEnvironment valueEnv = new ValueEnvironment(); ErrorEnvironment errorEnvironment; Value evaluatorResult = null; try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Press 'x' to stop"); System.out.println("Type 'file:<path>' to load a file from the forms folder."); while (true) { System.out.print("Enter a statement:"); String str = br.readLine(); if ("x".equalsIgnoreCase(str)) { System.out.println("Stopped."); break; } else { QLNode tree = Parser.parse(str); if(tree instanceof Statement) { errorEnvironment = TypeChecker.check((Statement) tree, register); evaluatorResult = Evaluator.check((Statement) tree, valueEnv); PrettyPrinter.print((Statement) tree, new ConsolePrinter(), PrettyPrinter.DEFAULT_PREFIX); } else if(tree instanceof Expression) { errorEnvironment = TypeChecker.check((Expression) tree, register); evaluatorResult = Evaluator.check((Expression) tree, valueEnv); PrettyPrinter.print((Expression) tree, new ConsolePrinter(), PrettyPrinter.DEFAULT_PREFIX); } else { errorEnvironment = TypeChecker.check((QLType) tree, register); PrettyPrinter.print((QLType) tree, new ConsolePrinter(), PrettyPrinter.DEFAULT_PREFIX); } if(errorEnvironment.hasErrors()) { System.out.println(errorEnvironment.getErrors()); continue; } System.out.println(evaluatorResult); } } } catch (IOException e) { e.printStackTrace(); } } }