Esempio n. 1
0
        public void AvailableExpressionsTest()
        {
            Console.Write("----------- Available Expressions Analyzer ---------- \n");
            var root   = Parser.ParseString(Samples.SampleProgramText.AvailableExprsSample);
            var code   = ProgramTreeToLinear.Build(root);
            var blocks = LinearToBaseBlock.Build(code);
            var cfg    = ListBlocksToCFG.Build(blocks);


            var exprsAnalizer = new AvailableExprAnalyzer(cfg);

            exprsAnalizer.analyze();

            Assert.IsTrue(exprsAnalizer.OutBlocks[blocks[0]].Count == 1);
            Assert.IsTrue(exprsAnalizer.InBlocks[blocks[2]].Count == 1);
            Assert.IsTrue(exprsAnalizer.OutBlocks[blocks[2]].Count == 0);
        }
Esempio n. 2
0
File: Demos.cs Progetto: koyre/b8
        public void AvailableExpressionsTest()
        {
            Console.Write("----------- Available Expressions Analyzer ---------- \n");
            var root   = Parser.ParseString(Samples.SampleProgramText.AvailableExprsSample);
            var code   = ProgramTreeToLinear.Build(root);
            var blocks = LYtest.BaseBlocks.LinearToBaseBlock.Build(code);
            var cfg    = ListBlocksToCFG.Build(blocks);


            var exprsAnalizer = new AvailableExprAnalyzer(cfg);

            exprsAnalizer.analyze();


            foreach (var block in blocks)
            {
                Console.Write("Block: " + block);

                Console.Write("\n");

                Console.Write("IN: \t");
                foreach (var expr in exprsAnalizer.InBlocks[block])
                {
                    Console.Write(expr);
                    Console.Write(", ");
                }
                Console.Write("\n");

                Console.Write("Out: \t");
                foreach (var expr in exprsAnalizer.OutBlocks[block])
                {
                    Console.Write(expr);
                    Console.Write(", ");
                }
                Console.Write("\n");

                Console.WriteLine("-----------------------");
            }
        }
Esempio n. 3
0
File: Program.cs Progetto: koyre/b8
        static void Main(string[] args)
        {
            var text = File.ReadAllText("a.txt");
            //text = "n = 0;" +
            //        "if n {" +
            //        "custom_label1:" +
            //        "goto custom_label2;" +
            //        "}" +
            //        "else {" +
            //        "custom_label2:" +
            //        "goto custom_label1;" +
            //        "}";
            var root = Parser.ParseString(text);

            if (root == null)
            {
                Console.WriteLine("Error");
                return;
            }

            // Генерация и получение трёхзначного кода
            var linearCode = new LinearCodeVisitor();

            root.AcceptVisit(linearCode);
            var code = linearCode.code;


            // Get blocks and print it
            var blocks = LinearToBaseBlock.Build(code);

            foreach (var block in blocks)
            {
                Console.WriteLine(block.ToString());
            }

            // Get graph and made DepthSpanningTree
            var cfg = new CFGraph(blocks);

            Console.WriteLine(cfg.ToString());


            var exprsAnalizer = new AvailableExprAnalyzer(cfg);

            exprsAnalizer.analyze();

            var    dst     = new DepthSpanningTree(cfg);
            string dst_viz = dst.ToString();

            Console.WriteLine(dst_viz);

            Console.WriteLine("");

            Console.WriteLine(cfg.EdgeTypes.ToString());


            var f  = cfg.allRetreatingEdgesAreBackwards();
            var r  = cfg.getNaturalCyclesForBackwardEdges();
            var rs = new RegionSequence(cfg);

            Console.ReadLine();
        }