factor method

Parser<ExpressionNode> factor()

Implementation

Parser<ExpressionNode> factor() => [
  seq3(
    ref1(token, '('),
    ref0(expression),
    ref1(token, ')'),
  ).map3((_, expr, _) => expr),
  seq2(
    ref1(token, 'not'),
    ref0(factor),
  ).map2((_, f) => UnaryExpressionNode(operator: 'not', operand: f)),
  seq3(
    ref1(token, '['),
    seq2(
          ref0(expression),
          seq2(
            ref1(token, '..'),
            ref0(expression),
          ).map2((_, e) => e).optional(),
        )
        .map2((start, end) => SetElementNode(start: start, end: end))
        .starSeparated(ref1(token, ','))
        .map((sep) => sep.elements),
    ref1(token, ']'),
  ).map3((_, elems, _) => SetExpressionNode(elems)),
  seq4(
    ref0(identifier),
    ref1(token, '('),
    ref0(expression)
        .plusSeparated(ref1(token, ','))
        .map((sep) => sep.elements),
    ref1(token, ')'),
  ).map4(
    (name, _, args, _) =>
        FunctionCallExpressionNode(name: name, arguments: args),
  ),
  ref0(variable),
  ref0(unsignedConstant),
].toChoiceParser();