示例#1
0
        private static void RunExecutionGraphExamples()
        {
            // Generate a DOT graph from the an execution graph's last node
            var dotFactory        = new DotExecutionGraphAlgebra();
            var dotExecutionGraph = CreateExecutionGraph(null, dotFactory);

            Console.WriteLine("--- DOT graph ---");
            Console.WriteLine("digraph dotGraph {");
            Console.Write(dotExecutionGraph.Last().GenerateDotGraph(null));
            Console.WriteLine("}");
            Console.WriteLine();

            // Create the same execution graph, but now with elements translatable to C#
            var csharpTranslatableFactory = new CSharpTranslatableGraphAlgebra();
            var csharpTranslatableGraph   = CreateExecutionGraph(null, csharpTranslatableFactory);

            Console.WriteLine("--- C# translated graph ---");
            Console.WriteLine("void Func()");
            Console.WriteLine("{");
            foreach (var node in csharpTranslatableGraph)
            {
                Console.Write(node.TranslateVariables());
            }
            foreach (var node in csharpTranslatableGraph)
            {
                Console.Write(node.TranslatePureFunctions());
            }
            foreach (var node in csharpTranslatableGraph)
            {
                Console.Write(node.TranslateStates());
            }
            Console.WriteLine("}");
        }
示例#2
0
        private static void RunDataGraphExamples()
        {
            // Create an evaluable data graph and evaluate it
            var evaluableFactory   = new EvaluableGraphAlgebra();
            var evaluableDataGraph = CreateDataGraph(evaluableFactory);

            Console.Write("--- Evaluable graph ---");
            Console.WriteLine("Last node outputs:");
            foreach ((var odp, var value) in evaluableDataGraph.Last().Evaluate())
            {
                Console.WriteLine(value);
            }

            // Generate a DOT graph from the same data graph's last node
            var dotFactory        = new DotExecutionGraphAlgebra();
            var dotExecutionGraph = CreateDataGraph(dotFactory);

            Console.WriteLine("--- DOT graph ---");
            Console.WriteLine("digraph dotGraph {");
            Console.Write(dotExecutionGraph.Last().GenerateDotGraph(null));
            Console.WriteLine("}");
            Console.WriteLine();

            // Create the same data graph, but now with elements translatable to C#
            var csharpTranslatableFactory = new CSharpTranslatableGraphAlgebra();
            var csharpTranslatableGraph   = CreateDataGraph(csharpTranslatableFactory);

            Console.WriteLine("--- C# translated graph ---");
            Console.WriteLine("void Func()");
            Console.WriteLine("{");
            foreach (var node in csharpTranslatableGraph)
            {
                Console.Write(node.TranslateVariables());
            }
            foreach (var node in csharpTranslatableGraph)
            {
                Console.Write(node.TranslatePureFunctions());
            }

            // Since we don't have any states, translate a call to the last pure node instead.
            Console.WriteLine(string.Join("\n", csharpTranslatableGraph.Last().TranslateCallPureFunction().Distinct()));

            Console.WriteLine("}");
        }