decimalOrDoubleNumber method
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();