public static void Main(string[] args) { string source; try { source = System.IO.File.ReadAllText(args[0]); } catch (IndexOutOfRangeException) { Console.WriteLine("Give the name of the source file as a parameter."); return; } catch (System.IO.FileNotFoundException) { Console.WriteLine("File \"" + args[0] + "\" not found."); return; } try { Parser parser = new Parser(new Scanner(source)); Program program = parser.Parse(); TypeCheckingVisitor typechecker = new TypeCheckingVisitor(); SymbolTable symboltable = typechecker.BuildSymbolTableAndTypeCheck(program); InterpretingNodeVisitor interpreter = new InterpretingNodeVisitor(symboltable); interpreter.Run(program); } catch (LexicalError e) { Console.WriteLine("Lexical error: " + e.Message + "\n"); } catch (SyntaxError e) { Console.WriteLine("Syntax error: " + e.Message + "\n"); } catch (SemanticError e) { Console.WriteLine("Semantic error: " + e.Message + "\n"); } catch (MiniPLAssertionFailed e) { Console.WriteLine(e.Message); } catch (MiniPLReadError e) { Console.WriteLine(e.Message); } }
public void SetUp() { symboltable = new SymbolTable(); symboltable.define(new Symbol("op1", "int")); symboltable.define(new Symbol("op2", "int")); symboltable.define(new Symbol("result", "int")); program = new List<Statement>(); program.Add(op1assignment); program.Add(op2assignment); interpreter = new InterpretingNodeVisitor(symboltable); }
public void LoopTest() { var loopvardecl = new VariableDeclaration("loopvariable", "int", 0); var loopvarref = new VariableReference("loopvariable", 0); var range = new Range(new IntegerLiteral("2", 0), new IntegerLiteral("5", 0), 0); var loopbody = new List<Statement>(); var resultdecl = new VariableDeclaration("result", "int", 0); var resultref = new VariableReference("result", 0); loopbody.Add(new Assignment(resultref, new ArithmeticOp("+", resultref, loopvarref, 0), 0)); var program = new List<Statement>(); program.Add(resultdecl); program.Add(loopvardecl); program.Add(new Loop(loopvarref, range, loopbody, 0)); var symboltable = new SymbolTable(); symboltable.define(new Symbol("loopvariable", "int")); symboltable.define(new Symbol("result", "int")); var interpreter = new InterpretingNodeVisitor(symboltable); interpreter.Run(new Program(program)); Assert.That(interpreter.Valuetable[symboltable.resolve("result")], Is.EqualTo(14)); }
public void AssignVariableToVariable() { var x = new VariableDeclaration("x", "int", 0); var assignment = new Assignment(x, new IntegerLiteral("1", 0), 0); var y = new VariableDeclaration("y", "int", 0); var assignvariable = new Assignment(y, new VariableReference("x", 0), 0); var statements = new List<Statement>(); statements.Add(assignment); statements.Add(assignvariable); var program = new Program(statements); var symboltable = new SymbolTable(); symboltable.define(new Symbol("x", "int")); symboltable.define(new Symbol("y", "int")); var interpreter = new InterpretingNodeVisitor(symboltable); interpreter.Run(program); Assert.That(interpreter.Valuetable[symboltable.resolve("y")], Is.EqualTo(1)); }
public void FixtureSetUp() { symboltable = new SymbolTable(); interpreter = new InterpretingNodeVisitor(symboltable); }
public void SetUp() { program = new List<Statement>(); symboltable = new SymbolTable(); symboltable.define(new Symbol("result", "bool")); result = new VariableDeclaration("result", "bool", 0); interpreter = new InterpretingNodeVisitor(symboltable); }