private ExpressionValue ParseComparisonNode(ComparisonExpressionNode comparisonExpressionNode)
        {
            ExpressionValue leftExpressionValue  = ParseExpressionNode(comparisonExpressionNode.Left);
            ExpressionValue rightExpressionValue = ParseExpressionNode(comparisonExpressionNode.Right);

            ExpressionOperator expressionOperator = ExpressionOperator.Undefined;

            switch (comparisonExpressionNode.Operator)
            {
            case ComparisonOperator.Equal:
                expressionOperator = ExpressionOperator.Equals;
                break;

            case ComparisonOperator.GreaterEqual:
                expressionOperator = ExpressionOperator.GreaterEquals;
                break;

            case ComparisonOperator.GreaterThan:
                expressionOperator = ExpressionOperator.GreaterThan;
                break;

            case ComparisonOperator.LessEqual:
                expressionOperator = ExpressionOperator.LessEquals;
                break;

            case ComparisonOperator.LessThan:
                expressionOperator = ExpressionOperator.LessThan;
                break;

            default:
                throw new NotImplementedException();
            }

            return(leftExpressionValue.Compare(rightExpressionValue, expressionOperator));
        }
        private StatementType Analyze(ComparisonExpressionNode node)
        {
            StatementType left  = AnalyseExpression(node.Left);
            StatementType right = AnalyseExpression(node.Right);

            switch (node.Operator)
            {
            case ComparisonOperator.Equal:
                return((left == right) ? StatementType.Boolean : StatementType.Unknown);

            default:
                return((left == right && left == StatementType.Numeric) ? StatementType.Boolean : StatementType.Unknown);
            }
        }
        public void InValidBooleanComparisonTest()
        {
            SymbolTable.Add("x", QValueType.Boolean);
            var x = new IdentifierNode(new Location(0, 0), "x");

            SymbolTable.Add("y", QValueType.Boolean);
            var y = new IdentifierNode(new Location(0, 0), "y");

            var comparisonNode = new ComparisonExpressionNode(new Location(0, 0), x, ComparisonOperator.LessEqual, y);
            var analyser       = new StatementTypeAnalyser();
            var result         = analyser.Analyse(comparisonNode);

            Assert.IsFalse(result);
        }
        private StatementType Analyze(ComparisonExpressionNode node)
        {
            StatementType left  = AnalyseExpression(node.Left);
            StatementType right = AnalyseExpression(node.Right);

            switch (node.Operator)
            {
            case ComparisonOperator.EQ:
                return((left == right) ? StatementType.BOOLEAN : StatementType.UNKNOWN);

            default:
                return((left == right && left == StatementType.NUMERIC) ? StatementType.BOOLEAN : StatementType.UNKNOWN);
            }
        }
        public void InValidComparisonWithArthimetricTest()
        {
            SymbolTable.Add("TestBool", QValueType.Boolean);
            var left = new IdentifierNode(new Location(0, 0), "TestBool");

            var five           = new LiteralNode(new Location(0, 0), "5", QValueType.Integer);
            var ten            = new LiteralNode(new Location(0, 0), "blah blah", QValueType.Text);
            var right          = new ComparisonExpressionNode(new Location(0, 0), five, ComparisonOperator.GreaterEqual, ten);
            var comparisonNode = new LogicalExpressionNode(new Location(0, 0), left, LogicalOperator.Or, right);

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

            Assert.IsFalse(result);
        }
        public void ValidComparisonWithArthimetricTest()
        {
            SymbolTable.Add("TestBool", QValueType.BOOLEAN);
            var left = new IdentifierNode(new Location(0, 0), "TestBool");

            var five           = new LiteralNode(new Location(0, 0), "5", QValueType.INTEGER);
            var ten            = new LiteralNode(new Location(0, 0), "10", QValueType.INTEGER);
            var right          = new ComparisonExpressionNode(new Location(0, 0), five, ComparisonOperator.GE, ten);
            var comparisonNode = new LogicalExpressionNode(new Location(0, 0), left, LogicalOperator.OR, right);

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

            Assert.IsTrue(result);
        }
        public override IExpressionNode VisitComparisonExpression([NotNull] QLanguageParser.ComparisonExpressionContext context)
        {
            // If ( expression )
            var comparisonoContext = context.comparisonExpression();

            if (comparisonoContext != null)
            {
                return(VisitComparisonExpression(comparisonoContext));
            }

            var left  = VisitComparisonOperand(context.LEFT);
            var opr   = ComparisonExpressionNode.ParseComparisonOperator(context.OPR.GetText());
            var right = VisitComparisonOperand(context.RIGHT);

            return(new ComparisonExpressionNode(Location.FromContext(context), left, opr, right));
        }
Example #8
0
        public override IExpressionNode VisitComparisonExpression(ComparisonExpressionContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("Context can't be null");
            }

            var comparisonoContext = context.comparisonExpression();

            if (comparisonoContext != null)
            {
                return(VisitComparisonExpression(comparisonoContext));
            }

            var left  = VisitComparisonOperand(context.LEFT);
            var opr   = ComparisonExpressionNode.ParseComparisonOperator(context.OPR.GetText());
            var right = VisitComparisonOperand(context.RIGHT);

            return(new ComparisonExpressionNode(Location.FromContext(context), left, opr, right));
        }
Example #9
0
        public void ParseComparisonOperatorLTTest()
        {
            var result = ComparisonExpressionNode.ParseComparisonOperator("<");

            Assert.AreEqual(ComparisonOperator.LT, result);
        }
Example #10
0
        public void ParseComparisonOperatorGETest()
        {
            var result = ComparisonExpressionNode.ParseComparisonOperator(">=");

            Assert.AreEqual(ComparisonOperator.GE, result);
        }
Example #11
0
 public void ParseComparisonOperatorInvalidInput()
 {
     ComparisonExpressionNode.ParseComparisonOperator("-");
 }
Example #12
0
        public void ParseComparisonOperatorGTTest()
        {
            var result = ComparisonExpressionNode.ParseComparisonOperator(">");

            Assert.AreEqual(ComparisonOperator.GreaterThan, result);
        }