rule method
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);