private StatementType Analyze(ArthimetricExpressionNode node)
        {
            StatementType left  = AnalyseExpression(node.Left);
            StatementType right = AnalyseExpression(node.Right);

            return((left == right && left == StatementType.Numeric) ? StatementType.Numeric : StatementType.Unknown);
        }
        private StatementType Analyze(ArthimetricExpressionNode node)
        {
            StatementType left  = AnalyseExpression(node.Left);
            StatementType right = AnalyseExpression(node.Right);

            return((left == right && left == StatementType.NUMERIC) ? StatementType.NUMERIC : StatementType.UNKNOWN);
        }
        private ExpressionValue ParseArthimeticNode(ArthimetricExpressionNode arthimeticExpressionNode)
        {
            ExpressionValue    leftExpressionValue  = ParseExpressionNode(arthimeticExpressionNode.Left);
            ExpressionValue    rightExpressionValue = ParseExpressionNode(arthimeticExpressionNode.Right);
            ExpressionOperator expressionOperator   = ExpressionOperator.Undefined;

            switch (arthimeticExpressionNode.Operator)
            {
            case ArthimetricOperator.Div:
                expressionOperator = ExpressionOperator.Divide;
                break;

            case ArthimetricOperator.Minus:
                expressionOperator = ExpressionOperator.Minus;
                break;

            case ArthimetricOperator.Plus:
                expressionOperator = ExpressionOperator.Plus;
                break;

            case ArthimetricOperator.Mult:
                expressionOperator = ExpressionOperator.Multiply;
                break;

            default:
                throw new NotImplementedException();
            }

            return(leftExpressionValue.Combine(rightExpressionValue, expressionOperator));
        }
        public void ExpressionNodeResultTypeDoubleAndIntTest()
        {
            var lhs        = new LiteralNode(Location.Empty, "10.0", QValueType.Double);
            var rhs        = new LiteralNode(Location.Empty, "5.0", QValueType.Integer);
            var expression = new ArthimetricExpressionNode(Location.Empty, lhs, ArthimetricOperator.Mult, rhs);

            Assert.AreEqual(QValueType.Double, expression.GetQValueType());
        }
        public void InValidArthimetricComparisonTest()
        {
            SymbolTable.Add("blah blah", QValueType.Text);
            var x = new IdentifierNode(new Location(0, 0), "x");

            var five            = new LiteralNode(new Location(0, 0), "5", QValueType.Integer);
            var arthimetricNode = new ArthimetricExpressionNode(new Location(0, 0), x, ArthimetricOperator.Mult, five);

            var analyser = new StatementTypeAnalyser();
            var result   = analyser.Analyse(arthimetricNode);

            Assert.IsFalse(result);
        }
        public void IntAndDoubleMultiplicationTest()
        {
            SymbolTable.Add("x", QValueType.Integer);
            var x = new IdentifierNode(new Location(0, 0), "x");

            var five            = new LiteralNode(new Location(0, 0), "5.0", QValueType.Double);
            var arthimetricNode = new ArthimetricExpressionNode(new Location(0, 0), x, ArthimetricOperator.Mult, five);

            var analyser = new StatementTypeAnalyser();
            var result   = analyser.Analyse(arthimetricNode);

            Assert.IsTrue(result);
        }
        public void ValidArthimetricComparisonTest()
        {
            SymbolTable.Add("x", QValueType.DOUBLE);
            var x = new IdentifierNode(new Location(0, 0), "x");

            var five            = new LiteralNode(new Location(0, 0), "5", QValueType.INTEGER);
            var arthimetricNode = new ArthimetricExpressionNode(new Location(0, 0), x, ArthimetricOperator.MULT, five);

            var analyser = new StatementTypeAnalyser();
            var result   = analyser.Analyse(arthimetricNode);

            Assert.IsTrue(result);
        }
        private ArthimetricOperator GetArthimeticOperator(QLanguageParser.ArtithmeticExpressionContext context)
        {
            if (context.MULT() != null)
            {
                return(ArthimetricExpressionNode.ParseArthimeticOperator(context.MULT().GetText()));
            }

            if (context.DIV() != null)
            {
                return(ArthimetricExpressionNode.ParseArthimeticOperator(context.DIV().GetText()));
            }

            if (context.PLUS() != null)
            {
                return(ArthimetricExpressionNode.ParseArthimeticOperator(context.PLUS().GetText()));
            }

            if (context.MINUS() != null)
            {
                return(ArthimetricExpressionNode.ParseArthimeticOperator(context.MINUS().GetText()));
            }

            throw new UnknownOperatorException("We don't know what to do here!");
        }
        public void ParseArthimetricExpressionMinusTest()
        {
            var result = ArthimetricExpressionNode.ParseArthimeticOperator("-");

            Assert.AreEqual(ArthimetricOperator.MINUS, result);
        }
        public void ParseArthimetricExpressionDivTest()
        {
            var result = ArthimetricExpressionNode.ParseArthimeticOperator("/");

            Assert.AreEqual(ArthimetricOperator.DIV, result);
        }
        public void ParseArthimetricExpressionMultTest()
        {
            var result = ArthimetricExpressionNode.ParseArthimeticOperator("*");

            Assert.AreEqual(ArthimetricOperator.MULT, result);
        }
Exemple #12
0
        public void ParseArthimetricExpressionPlusTest()
        {
            var result = ArthimetricExpressionNode.ParseArthimeticOperator("+");

            Assert.AreEqual(ArthimetricOperator.Plus, result);
        }