public Expression CreateInterleave(Expression exp1, Expression exp2) { if (exp1 == Expression.Empty) { return(exp2); } if (exp2 == Expression.Empty) { return(exp1); } if (exp1 == Expression.NotAllowed || exp2 == Expression.NotAllowed) { return(Expression.NotAllowed); } if (exp2 is InterleaveExp) { // operators are left-associative. InterleaveExp right = (InterleaveExp)exp2; return(CreateInterleave(CreateInterleave(exp1, right.exp1), right.exp2)); } return(Unify(new InterleaveExp(exp1, exp2))); }
public void OnInterleave(InterleaveExp exp) { OnBinExp(exp, "&"); }