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); }
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("-----------------------"); } }
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(); }