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()); }