public ExpressionObject Operation(ExpressionObject lhs, ExpressionObject rhs)
        {
            var varA = lhs as Variable;
            var varB = rhs as Variable;

            if (varA == null || varB == null)
            {
                var logText =
                    "Cannot perform " + GetType() + " operation on " + lhs.stringValue + " and " +
                    rhs.stringValue + "of type " + lhs.GetType() + " and " + rhs.GetType() + " respectively.";

                Debug.LogError(logText);

                return(null);
            }

            var valueA = (bool)varA.value;
            var valueB = (bool)varB.value;

            var result = CustomOperation(valueA, valueB);

            return(new Variable {
                stringValue = result.ToString(), value = result
            });
        }
        public ExpressionObject Operation(ExpressionObject rhs)
        {
            var varB = rhs as Variable;

            if (varB == null || varB.value == null)
            {
                Debug.LogError("Incorrect rhs for Not operator");

                return(null);
            }

            var valueB = (bool)varB.value;

            var result = !valueB;

            return(new Variable {
                stringValue = result.ToString(), value = result
            });
        }