simpleExpression method
Implementation
Parser<ExpressionNode> simpleExpression() =>
seq2(
[ref1(token, '+'), ref1(token, '-')].toChoiceParser().optional(),
ref0(term).plusSeparated(ref1(token, 'or')),
).plus().map((list) {
ExpressionNode? result;
for (final (prefix, termsSep) in list) {
final terms = termsSep.elements;
var termExpr = terms.first;
for (var i = 1; i < terms.length; i++) {
termExpr = BinaryExpressionNode(
operator: 'or',
left: termExpr,
right: terms[i],
);
}
if (prefix != null) {
termExpr = UnaryExpressionNode(operator: prefix, operand: termExpr);
}
result = result == null
? termExpr
: BinaryExpressionNode(
operator: '+',
left: result,
right: termExpr,
);
}
return result ?? (throw StateError('Expression expected'));
});