Esempio n. 1
0
        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)));
        }
Esempio n. 2
0
 public void OnInterleave(InterleaveExp exp)
 {
     OnBinExp(exp, "&");
 }