AND constructor
AND()
Implementation
AND(SemanticContext a, SemanticContext b) {
var operands = <SemanticContext>{};
if (a is AND) {
operands.addAll(a.opnds);
} else {
operands.add(a);
}
if (b is AND) {
operands.addAll(b.opnds);
} else {
operands.add(b);
}
final precedencePredicates =
SemanticContext.filterPrecedencePredicates(operands);
operands = SemanticContext.filterNonPrecedencePredicates(operands).toSet();
if (precedencePredicates.isNotEmpty) {
// interested in the transition with the lowest precedence
final reduced =
precedencePredicates.reduce((a, b) => a.compareTo(b) <= 0 ? a : b);
operands.add(reduced);
}
opnds = operands.toList();
}