constant method

Parser<LiteralExpressionNode> constant()

Implementation

Parser<LiteralExpressionNode> constant() => [
  seq2(
    pattern('+-'),
    [
      ref0(identifier).map((s) => (s, null)),
      ref0(unsignedNumber).map((n) => (null, n)),
    ].toChoiceParser(),
  ).map2((sign, val) {
    final (id, numVal) = val;
    if (numVal != null) {
      final signedVal = sign == '-' ? -numVal : numVal;
      return LiteralExpressionNode(raw: '$sign$numVal', value: signedVal);
    }
    return LiteralExpressionNode(raw: '$sign$id', value: '$sign$id');
  }),
  ref0(unsignedConstant),
].toChoiceParser();