Example #1
0
        private static Expr ParseCall(IEnumerator <string> tokens, string argName, string foldItemName, string foldAccName)
        {
            Func <Expr> parse = () => ParseExpr(tokens, argName, foldItemName, foldAccName);

            tokens.SkipToken("(");
            var  t = tokens.ExtractToken();
            Expr res;

            if (t == "if0")
            {
                res = new If0(parse(), parse(), parse());
            }
            else if (t == "fold")
            {
                res = ParseFold(tokens, argName, foldItemName, foldAccName);
            }
            else if (t == "not")
            {
                res = new UnaryNot(parse());
            }
            else if (t == "shl1")
            {
                res = new UnaryShl1(parse());
            }
            else if (t == "shr1")
            {
                res = new UnaryShr1(parse());
            }
            else if (t == "shr4")
            {
                res = new UnaryShr4(parse());
            }
            else if (t == "shr16")
            {
                res = new UnaryShr16(parse());
            }
            else if (t == "and")
            {
                res = new BinaryAnd(parse(), parse());
            }
            else if (t == "or")
            {
                res = new BinaryOr(parse(), parse());
            }
            else if (t == "xor")
            {
                res = new BinaryXor(parse(), parse());
            }
            else if (t == "plus")
            {
                res = new BinaryPlus(parse(), parse());
            }
            else
            {
                throw new FormatException("unknown function " + t);
            }
            tokens.SkipToken(")");
            return(res);
        }
Example #2
0
 public void Unify(If0 x)
 {
     Unify(x.cond);
     Unify(x.falseExpr);
     Unify(x.trueExpr);
 }