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);
        }
Ejemplo n.º 4
0
        private ASTType getASTTypeFromToken(Token token, ILineContext context)
        {
            switch (token.type)
            {
                case Global.DataType.BOOLTYPE: return new BoolType();
                case Global.DataType.CHARACTERTYPE: return new CharType();
                case Global.DataType.DOUBLETYPE: return new DoubleType();
                case Global.DataType.FLOATTYPE: return new FloatType();
                case Global.DataType.INT16TYPE: return new Int16Type();
                case Global.DataType.INT32TYPE: return new Int32Type();
                case Global.DataType.INT64TYPE: return new Int64Type();
                case Global.DataType.INT8TYPE: return new Int8Type();
                case Global.DataType.STRINGTYPE: return new StringType();
                case Global.DataType.UINT16TYPE: return new UInt16Type();
                case Global.DataType.UINT32TYPE: return new UInt32Type();
                case Global.DataType.UINT64TYPE: return new UInt64Type();
                case Global.DataType.UINT8TYPE: return new UInt8Type();
                    
                case Global.DataType.OBOOLTYPE: return new BoolType(true);
                case Global.DataType.OCHARACTERTYPE: return new CharType(true);
                case Global.DataType.ODOUBLETYPE: return new DoubleType(true);
                case Global.DataType.OFLOATTYPE: return new FloatType(true);
                case Global.DataType.OINT16TYPE: return new Int16Type(true);
                case Global.DataType.OINT32TYPE: return new Int32Type(true);
                case Global.DataType.OINT64TYPE: return new Int64Type(true);
                case Global.DataType.OINT8TYPE: return new Int8Type(true);
                case Global.DataType.OSTRINGTYPE: return new StringType(true);
                case Global.DataType.OUINT16TYPE: return new UInt16Type(true);
                case Global.DataType.OUINT32TYPE: return new UInt32Type(true);
                case Global.DataType.OUINT64TYPE: return new UInt64Type(true);
                case Global.DataType.OUINT8TYPE: return new UInt8Type(true);

                default: Swift.error(new UnknownTypeException(context.Line, context.Pos));
                    return null;
            }
        }
Ejemplo n.º 5
0
 private Exp BinaryExpression(Token op, Exp lhs, Exp rhs, ILineContext con)
 {
     switch (op.value)
     {
         case "&&": return new AndExp(null, lhs, rhs);
         case "&": return new BitwiseAndExp(null, lhs, rhs);
         case "<<": return new BitwiseLeftShiftExp(null, lhs, rhs);
         case "~": return new BitwiseNotExp(null, lhs, rhs);
         case "|": return new BitwiseOrExp(null, lhs, rhs);
         case ">>": return new BitwiseRightShiftExp(null, lhs, rhs);
         case "^": return new BitwiseXorExp(null, lhs, rhs);
         case "/": return new DivisionExp(null, lhs, rhs);
         case "!": return new ExclamationExp(null, lhs, rhs);
         case "-": return new MinusExp(null, lhs, rhs);
         case "%": return new ModuloExp(null, lhs, rhs);
         case "*": return new MultiplicationExp(null, lhs, rhs);
         case "||": return new OrExp(null, lhs, rhs);
         case "&+": return new OverflowAddExp(null, lhs, rhs);
         case "&*": return new OverflowMultExp(null, lhs, rhs);
         case "&-": return new OverflowSubExp(null, lhs, rhs);
         case "+": return new PlusExp(null, lhs, rhs);
     }
     Swift.error(new UnknownOperatorException(con, "The operator \"" + op.value + "\" is unknown"));
     return null;
 }