decimalOrDoubleNumber method

Parser<LiteralNode<num>> decimalOrDoubleNumber()
inherited

Implementation

Parser<LiteralNode<num>>
decimalOrDoubleNumber() => <Parser<LiteralNode<num>>>[
  // Number with fractional part and optional exponent: 1.2, 1.2e3
  (ref0(decimalDigits) &
          char('.') &
          ref0(decimalDigits) &
          ref0(exponent).optional())
      .flatten()
      .map((str) => DoubleLiteralNode(double.parse(str.replaceAll('_', '')))),
  // Number starting with dot: .5, .5e3
  (char('.') & ref0(decimalDigits) & ref0(exponent).optional()).flatten().map(
    (str) => DoubleLiteralNode(double.parse(str.replaceAll('_', ''))),
  ),
  // Integer with exponent: 1e3
  (ref0(decimalDigits) & ref0(exponent)).flatten().map(
    (str) => DoubleLiteralNode(double.parse(str.replaceAll('_', ''))),
  ),
  // Pure integer: 42
  ref0(decimalDigits)
      .map((str) => IntegerLiteralNode(int.parse(str.replaceAll('_', '')))),
].toChoiceParser();