Exemple #1
0
        public void CFG()
        {
            const int COUNT  = 6;
            Parser    parser = new Parser(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Data\cfg.gngr"));

            parser.parse();
            ASTVisitor  astv = new ASTVisitor(parser.ast);
            TestVisitor tv   = new TestVisitor(astv.cfg);

            // create new instance to fool compiler
            CFGEntry      entry = new CFGEntry();
            CFGBasicBlock b1    = new CFGBasicBlock();
            CFGBasicBlock b2    = new CFGBasicBlock();
            CFGBasicBlock b3    = new CFGBasicBlock();
            CFGBasicBlock b4    = new CFGBasicBlock();

            for (int i = 0; i < COUNT; i++)
            {
                switch (i)
                {
                case 0:
                    entry = (CFGEntry)tv.visitedNodes[i];
                    Assert.IsInstanceOfType(entry, typeof(CFGEntry), $"{i}/1");
                    break;

                case 1:
                    b1 = (CFGBasicBlock)tv.visitedNodes[i];
                    Assert.IsInstanceOfType(b1, typeof(CFGBasicBlock), $"{i}/1");
                    Assert.AreEqual(entry, b1.parents[0], $"{i}/1");
                    break;

                case 2:
                    b2 = (CFGBasicBlock)tv.visitedNodes[i];
                    Assert.IsInstanceOfType(b2, typeof(CFGBasicBlock), $"{i}/1");
                    Assert.AreEqual(b1, b2.parents[0], $"{i}/2");
                    break;

                case 3:
                    b3 = (CFGBasicBlock)tv.visitedNodes[i];
                    Assert.IsInstanceOfType(b3, typeof(CFGBasicBlock), $"{i}/1");
                    Assert.AreEqual(b2, b3.parents[0], $"{i}/2");
                    Assert.AreEqual(b1, b3.parents[1], $"{i}/3");
                    break;

                case 4:
                    b4 = (CFGBasicBlock)tv.visitedNodes[i];
                    Assert.IsInstanceOfType(b4, typeof(CFGBasicBlock), $"{i}/1");
                    Assert.AreEqual(b3, b4.parents[0], $"{i}/2");
                    break;

                case 6:
                    CFGExit exit = (CFGExit)tv.visitedNodes[i];
                    Assert.IsInstanceOfType(exit, typeof(CFGExit), $"{i}/1");
                    Assert.AreEqual(b4, exit.parents[0], $"{i}/2");
                    Assert.AreEqual(b3, exit.parents[1], $"{i}/2");
                    break;
                }
            }
        }
Exemple #2
0
 public void visitEntry(CFGEntry s)
 {
     visitCollection(s);
 }
Exemple #3
0
 public TestVisitor(CFGEntry cfg)
 {
     this.visitedNodes = new List <Node>();
     cfg.accept(this);
 }