public override bool BoolEvaluate(IExpressionContext context)
        {
            if (left.CanEvaluateToNumber(context) && right.CanEvaluateToNumber(context))
            {
                float l, r;

                l = left.NumberEvaluate(context);
                r = right.NumberEvaluate(context);

                return(NumberCompare(l, r, op));
            }
            else if (left.CanEvaluateToBool(context) && right.CanEvaluateToBool(context))
            {
                bool l, r;

                l = left.BoolEvaluate(context);
                r = right.BoolEvaluate(context);

                return(BoolCompare(l, r, op));
            }
            else
            {
                string l, r;

                l = left.StringEvaluate(context);
                r = right.StringEvaluate(context);

                return(StringCompare(l, r, op));
            }
        }