in src/language/json/JSON.ts [274:332]
export function readNumber(iterator: Iterator<basic.Token>): basic.Token[] {
const numberBasicTokens: basic.Token[] = [];
// tslint:disable-next-line:no-non-null-assertion no-unnecessary-type-assertion // Precondition is that current points to Dash or Digits
const dashOrDigitsToken = iterator.current()!;
if (dashOrDigitsToken.getType() === basic.TokenType.Dash) {
// Negative sign
numberBasicTokens.push(dashOrDigitsToken);
iterator.moveNext();
}
const digits = iterator.current();
if (digits && digits.getType() === basic.TokenType.Digits) {
// Whole number digits
numberBasicTokens.push(digits);
iterator.moveNext();
}
const decimal = iterator.current();
if (decimal && decimal.getType() === basic.TokenType.Period) {
// Decimal point
numberBasicTokens.push(decimal);
iterator.moveNext();
const fractionalDigits = iterator.current();
if (fractionalDigits && fractionalDigits.getType() === basic.TokenType.Digits) {
// Fractional number digits
numberBasicTokens.push(fractionalDigits);
iterator.moveNext();
}
}
const exponentLetter = iterator.current();
if (exponentLetter) {
if (exponentLetter.getType() === basic.TokenType.Letters && exponentLetter.toString().toLowerCase() === "e") {
// e
numberBasicTokens.push(exponentLetter);
iterator.moveNext();
const exponentSign = iterator.current();
if (exponentSign
&& (exponentSign.getType() === basic.TokenType.Dash || exponentSign.getType() === basic.TokenType.Plus)
) {
// Exponent number sign
numberBasicTokens.push(exponentSign);
iterator.moveNext();
}
const exponentDigits = iterator.current();
if (exponentDigits && exponentDigits.getType() === basic.TokenType.Digits) {
// Exponent number digits
numberBasicTokens.push(exponentDigits);
iterator.moveNext();
}
}
}
return numberBasicTokens;
}