Esempio n. 1
0
            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);
 }