Ejemplo n.º 1
0
 public TreeNode Reduce(TreeNode node)
 {
     if (!(node is Application application))
     {
         return(node);
     }
     if (!(application.Func is T))
     {
         return(node);
     }
     return(ReduceImpl(AstReducer.Reduce(application.Arg)) ?? node);
 }
Ejemplo n.º 2
0
        private void RunTest(string input, string output)
        {
            var ast =
                new AstParser(new FunctionDeclarationsFactory()).Parse(input);
            var reduced  = AstReducer.Reduce(ast);
            var expected =
                new AstParser(new FunctionDeclarationsFactory()).Parse(output);

            Console.WriteLine("<<<<<<<<Input ast>>>>>>>>");
            Console.WriteLine(ast.PrettyPrint());
            Console.WriteLine("<<<<<<<<Reduced ast>>>>>>>>");
            Console.WriteLine(reduced.PrettyPrint());
            Console.WriteLine("<<<<<<<<Expected ast>>>>>>>>");
            Console.WriteLine(expected.PrettyPrint());
            Assert.AreEqual(output, reduced.Print());
        }
Ejemplo n.º 3
0
        public TreeNode Reduce(TreeNode node)
        {
            //ap (ap (ap if0 0) x1) x2   =   x0
            if (node is Application a1 &&
                a1.Func is Application a2 &&
                a2.Func is Application a3 &&
                a3.Func is IfZero)
            {
                var arg = AstReducer.Reduce(a3.Arg);
                if (arg is Number number)
                {
                    return(number.Value == 0 ? a2.Arg : a1.Arg);
                }
            }

            return(node);
        }
Ejemplo n.º 4
0
        public TreeNode Reduce(TreeNode node)
        {
            if (!(node is Application application))
            {
                return(node);
            }
            if (!(application.Func is IsNil))
            {
                return(node);
            }
            var arg = AstReducer.Reduce(application.Arg);

            if (arg is Nil)
            {
                return(True.Instance);
            }
            return(False.Instance);
        }
Ejemplo n.º 5
0
        public void Test1()
        {
            var x = "ap ap s s ap ap ap s t x0 x1";

            Console.WriteLine(AstReducer.Reduce(new AstParser(new FunctionDeclarationsFactory()).Parse(x)).PrettyPrint());
        }