public void TestEatDeclarationWithAssignment()
        {
            Token tmpToken;
            ILineContext tmpContext;
            List<Token> tokens = new List<Token>();
            tmpToken = new Token(Global.DataType.VAR);
            tmpToken.value = "var";
            tokens.Add(tmpToken);
            tmpToken = new Token(Global.DataType.IDENTIFIER);
            tmpToken.value = "a";
            tokens.Add(tmpToken);
            tmpToken = new Token(Global.DataType.OPERATOR);
            tmpToken.value = "=";
            tokens.Add(tmpToken);
            tmpToken = new Token(Global.DataType.INT);
            tmpToken.value = "3";
            tokens.Add(tmpToken);
            tmpToken = new Token(Global.DataType.OPERATOR);
            tmpToken.value = "+";
            tokens.Add(tmpToken);
            tmpToken = new Token(Global.DataType.INT);
            tmpToken.value = "2";
            tokens.Add(tmpToken);
            tmpToken = new Token(Global.DataType.ENDSTATEMENT);
            tokens.Add(tmpToken);

            List<ILineContext> context = new List<ILineContext>();
            for (int i = 0; i < 7; i++)
            {
                tmpContext = new LineContext(1, 1);
                context.Add(tmpContext);
            }

            SyntaxAnalyzer syntaxAnalyer = new SyntaxAnalyzer();
            TestVisitor testVisitor = new TestVisitor();
            Base result = syntaxAnalyer.CheckSyntax(tokens, context, Global.InstructionSets.X86_64);
            /*Assert.AreEqual(Global.ASTType.VAR_DECLARATION, result.GetChildren()[0].GetType());
            Assert.AreEqual("a", result.GetChildren()[0].GetName());
            Assert.AreEqual(Global.ASTType.ASSIGNMENT, result.GetChildren()[1].GetType());*/

        }
        public void TestEatDeclarationWithoutType()
        {
            Token tmpToken;
            ILineContext tmpContext;
            List<Token> tokens = new List<Token>();
            tmpToken = new Token(Global.DataType.VAR);
            tmpToken.value = "var";
            tokens.Add(tmpToken);
            tmpToken = new Token(Global.DataType.IDENTIFIER);
            tmpToken.value = "a";
            tokens.Add(tmpToken);
            tmpToken = new Token(Global.DataType.ENDSTATEMENT);
            tokens.Add(tmpToken);

            List<ILineContext> context = new List<ILineContext>();
            for (int i = 0; i < 3; i++)
            {
                tmpContext = new LineContext(1, 1);
                context.Add(tmpContext);
            }

            SyntaxAnalyzer syntaxAnalyer = new SyntaxAnalyzer();
            Base result = syntaxAnalyer.CheckSyntax(tokens, context, Global.InstructionSets.X86_64);
        }
        public void TestExpressionPlus()
        {
            Token tmpToken;
            ILineContext tmpContext;
            List<Token> tokens = new List<Token>();
            tmpToken = new Token(Global.DataType.VAR);
            tmpToken.value = "var";
            tokens.Add(tmpToken);
            tmpToken = new Token(Global.DataType.IDENTIFIER);
            tmpToken.value = "a";
            tokens.Add(tmpToken);
            tmpToken = new Token(Global.DataType.OPERATOR);
            tmpToken.value = "=";
            tokens.Add(tmpToken);
            tmpToken = new Token(Global.DataType.INT);
            tmpToken.value = "3";
            tokens.Add(tmpToken);
            tmpToken = new Token(Global.DataType.OPERATOR);
            tmpToken.value = "+";
            tokens.Add(tmpToken);
            tmpToken = new Token(Global.DataType.INT);
            tmpToken.value = "2";
            tokens.Add(tmpToken);
            tmpToken = new Token(Global.DataType.ENDSTATEMENT);
            tokens.Add(tmpToken);

            List<ILineContext> context = new List<ILineContext>();
            for (int i = 0; i < 7; i++)
            {
                tmpContext = new LineContext(1, 1);
                context.Add(tmpContext);
            }

            SyntaxAnalyzer syntaxAnalyer = new SyntaxAnalyzer();
            TestVisitor testVisitor = new TestVisitor();
            Base result = syntaxAnalyer.CheckSyntax(tokens, context, Global.InstructionSets.X86_64);
            Assert.AreEqual(new VarDeclaration(null).GetType(), result.Children[0].GetType());
            Assert.AreEqual("a", ((VarDeclaration)result.Children[0]).Name.Name);
            Assert.AreEqual(new Assignment(null).GetType(), result.Children[1].GetType());
            Assert.AreEqual("a", ((Assignment) result.Children[1]).LHS.Name);
            Assert.AreEqual(new PlusExp(null, null, null).GetType(), ((Assignment)result.Children[1]).RHS.GetType());
            Assert.AreEqual(new Int64Literal(null, null).GetType(), ((PlusExp)((Assignment)result.Children[1]).RHS).e1.GetType());
            Assert.AreEqual(new Int64Literal(null, null).GetType(), ((PlusExp)((Assignment)result.Children[1]).RHS).e2.GetType());
            Assert.AreEqual("3", ((Int64Literal) ((PlusExp) ((Assignment)result.Children[1]).RHS).e1).Value);
            Assert.AreEqual("2", ((Int64Literal)((PlusExp)((Assignment)result.Children[1]).RHS).e2).Value);
        }