/// <summary> /// Scans the number. /// </summary> /// <returns>Token containing number.</returns> public StiToken ScanNumber() { int posStart = positionInText; bool isFloat = false; while (positionInText != Text.Length && Char.IsDigit(Text[positionInText])) { positionInText++; } if (positionInText != Text.Length && Text[positionInText] == '.' && positionInText + 1 != Text.Length && Char.IsDigit(Text[positionInText + 1])) { positionInText++; while (positionInText != Text.Length && Char.IsDigit(Text[positionInText])) { positionInText++; } isFloat = true; } string nm = BaseText.Substring(posStart, positionInText - posStart); if (isFloat) { var nfi = new NumberFormatInfo { CurrencyDecimalSeparator = "." }; return(new StiToken(StiTokenType.Value, posStart, positionInText - posStart, double.Parse(nm, nfi))); } else { string valueStr = nm; try { ulong value = ulong.Parse(valueStr); return(new StiToken(StiTokenType.Value, posStart, positionInText - posStart, value)); } catch (Exception e) { if (e is OverflowException || e is FormatException) { return(new StiToken(StiTokenType.Value, posStart, positionInText - posStart, valueStr)); } else { throw; } } } }