Example #1
0
        protected ComparisonNode ParseComparison(Lexer lexer)
        {
            var lft = ParseSumCalculation(lexer);

            SkipWhiteSpace(lexer);
            Match              m    = Regex.Match(lexer.Peek(2), "==|!=|<=|>=|<|>");
            string             comp = null;
            SumCalculationNode rgt  = null;

            if (m.Success)
            {
                comp = m.Groups[0].Value;
                lexer.Consume();
                if (comp.Length == 2)
                {
                    lexer.Consume();
                }
                SkipWhiteSpace(lexer);
                rgt = ParseSumCalculation(lexer);
            }
            return(new ComparisonNode()
            {
                lft = lft,
                comp = comp,
                rgt = rgt,
            });
        }
Example #2
0
        private object EvaluateNode(SumCalculationNode expression, Context context)
        {
            var lft   = EvaluateNode(expression.lft, context);
            var value = lft;

            if (expression.args == null || expression.args.Length == 0)
            {
                return(value);
            }
            float floatVal        = 0;
            var   isConcatenation = (value is string) || !float.TryParse(value.ToString(), out floatVal);

            foreach (var term in expression.args)
            {
                float floatRgt = 0;
                var   rgt      = EvaluateNode(term.rgt, context).ToString();
                if (!isConcatenation)
                {
                    isConcatenation = !float.TryParse(rgt, out floatRgt);
                }
                switch (term.op)
                {
                case "+":
                    if (isConcatenation)
                    {
                        value           = (string)value + rgt.ToString();
                        isConcatenation = true;
                    }
                    else
                    {
                        floatVal += floatRgt;
                    }
                    break;

                case "-":
                    if (isConcatenation)
                    {
                        value = string.Empty;
                    }
                    else
                    {
                        floatVal -= floatRgt;
                    }
                    break;
                }
            }
            return(isConcatenation ? value : floatVal);
        }
Example #3
0
        protected ComparisonNode ParseComparison()
        {
            var    lft = ParseSumCalculation();
            string comparisonOperator = null;

            switch (PeekToken().Type)
            {
            case TokenType.OP_EQUAL:
                comparisonOperator = "==";
                break;

            case TokenType.OP_NOTEQUAL:
                comparisonOperator = "!=";
                break;

            case TokenType.OP_LESS:
                comparisonOperator = "<";
                break;

            case TokenType.OP_LESSEQUAL:
                comparisonOperator = "<=";
                break;

            case TokenType.OP_GREATER:
                comparisonOperator = ">";
                break;

            case TokenType.OP_GREATEREQUAL:
                comparisonOperator = ">=";
                break;
            }
            SumCalculationNode rgt = null;

            if (comparisonOperator != null)
            {
                NextToken();
                rgt = ParseSumCalculation();
            }
            return(new ComparisonNode()
            {
                lft = lft,
                comp = comparisonOperator,
                rgt = rgt,
            });
        }