rule method

Parser<Rule> rule()

Implementation

Parser<Rule> rule() =>
    seq4(
      epsilon().map((_) => scope.clear(), hasSideEffects: true),
      ref0(term),
      seq2(
        ref1(token, ':-'),
        ref0(term)
            .plusSeparated(ref1(token, ','))
            .map((list) => list.elements),
      ).map2((_, body) => body).optional(),
      ref1(token, '.'),
    ).map4((_, head, body, _) {
      if (body == null || body.isEmpty) {
        return Rule(head, const True());
      } else if (body.length == 1) {
        return Rule(head, body.single);
      } else {
        return Rule(head, Conjunction(body));
      }
    }, hasSideEffects: true);