ruleAttrsEval(stateArg, opBkr.index, iAttr);
iAttr.left = false;
iAttr.nested = false;
iAttr.right = false;
iAttr.cyclic = false;
}
}
function opEval(stateArg, opcodes, opIndex, iAttr) {
stateArg.attrInit(iAttr);
const opi = opcodes[opIndex];
switch (opi.type) {
case id.ALT:
alt(stateArg, opcodes, opIndex, iAttr);
break;
case id.CAT:
cat(stateArg, opcodes, opIndex, iAttr);
break;
case id.REP:
opEval(stateArg, opcodes, opIndex + 1, iAttr);
if (opi.min === 0) {
iAttr.empty = true;
iAttr.finite = true;
}
break;
case id.RNM: