private OperationResult ParseConstant()
        {
            string value          = null;
            var    sb             = new StringBuilder();
            string untrimmedFinal = null;

            var wasPoint = false;

            while (Const.Digits.Contains(Input[Pointer]) || Input[Pointer] == Const.Point)
            {
                if (Input[Pointer] == Const.Point)
                {
                    if (!wasPoint)
                    {
                        wasPoint = true;
                    }
                    else
                    {
                        return(OperationResult.CreateFailure("A number cannot have multiple points."));
                    }
                }

                sb.Append(Input[Pointer]);

                if (Pointer + 1 >= Input.Length || (Input[Pointer + 1] != Const.Point && !Const.Digits.Contains(Input[Pointer + 1])))
                {
                    break;
                }
                else
                {
                    Pointer++;
                }
            }

            LastCharacter = Input[Pointer];

            untrimmedFinal = sb.ToString();

            value = untrimmedFinal == "0" ? untrimmedFinal : untrimmedFinal.TrimStart('0');

            var parsedDecimal = decimal.Parse(value);

            var token = new ConstantToken(parsedDecimal);

            if (NegateFlag && _parenthesesStack.Count == 0)
            {
                token.Negate();
                NegateFlag = false;
            }

            _expressionStack.Push(token);
            return(ParseAndSimplify());
        }