visitOrderedChoice method
Implementation
@override
ExpressionGenerator visitOrderedChoice(OrderedChoiceExpression node) {
final g = ExpressionGenerator(node);
g.generate = (block) {
g.declareVariable(block);
final rule = node.rule!;
final level = node.level;
final expressions = node.expressions;
void failure(CodeBlock block) {
if (rule.kind == ProductionRuleKind.terminal &&
level == 0 &&
!node.isOptional) {
final args = [literalString(rule.name)];
final control = callExpression(Members.fail, args);
block.if$(control, (block) {
final terminalId = rule.terminalId;
final setFlag = failures.generateSet(true, [terminalId]);
block.addSourceCode(setFlag.join('\n'));
});
}
}
if (expressions.length > 1) {
_generateOrderedChoiceMultiple(node, block, g, failure);
} else {
_generateOrderedChoiceSingle(node, block, g, failure);
}
};
return g;
}