Exemplo n.º 1
0
 public void ThreeLoopsTest1()
 {
     Parser p = Parse(@"begin cycle 2 cycle 3 cycle 4 write(5) end");
     Assert.IsTrue(p.Parse());
     var loopCounter = new MaxNestCyclesVisitor();
     p.root.Visit(loopCounter);
     Assert.AreEqual(3, loopCounter.MaxNest);            
 }
Exemplo n.º 2
0
 public void OneLoopTest()
 {
     Parser p = Parse(@"begin cycle 2 write(2) end");
     Assert.IsTrue(p.Parse());
     var loopCounter = new MaxNestCyclesVisitor();
     p.root.Visit(loopCounter);
     Assert.AreEqual(1, loopCounter.MaxNest);            
 }
Exemplo n.º 3
0
            public void LoopTreeTest()
            {
                Parser p = TestHelpers.Parse(@"begin var a; 
                                                    cycle 2 
                                                        cycle 1 
                                                            a:=2; 
                                                        cycle 3 
                                                            cycle 5 
                                                                cycle 6 
                                                                    a:=5; 
                                                                cycle 4 
                                                                    write(5) 
                                              end");

                Assert.IsTrue(p.Parse());
                var loopCounter = new MaxNestCyclesVisitor();

                p.root.Visit(loopCounter);
                Assert.AreEqual(4, loopCounter.MaxNest);
            }
Exemplo n.º 4
0
        public static void Main()
        {
            string FileName = @"..\..\a.txt";

            try
            {
                string Text = File.ReadAllText(FileName);

                Scanner scanner = new Scanner();
                scanner.SetSource(Text, 0);

                Parser parser = new Parser(scanner);

                var b = parser.Parse();
                if (!b)
                {
                    Console.WriteLine("Ошибка");
                }
                else
                {
                    Console.WriteLine("Синтаксическое дерево построено");

                    var pp = new PrettyPrintVisitor();
                    parser.root.Visit(pp);
                    Console.WriteLine(pp.Text);
                    Console.WriteLine("-------------------------------");

                    var avis = new AssignCountVisitor();
                    parser.root.Visit(avis);
                    Console.WriteLine("Количество присваиваний = {0}", avis.Count);
                    Console.WriteLine("-------------------------------");

                    var midCount = new CountCyclesOpVisitor();
                    parser.root.Visit(midCount);
                    Console.WriteLine("Среднее количество операторов = {0}; cntCycles = {1}, cntOps = {2}",
                                      midCount.MidCount(), midCount.CountCycles, midCount.CountOps);
                    Console.WriteLine("-------------------------------");

                    var cuv = new CommonlyUsedVarVisitor();
                    parser.root.Visit(cuv);
                    Console.WriteLine("Наиболее часто используемая переменная = {0}", cuv.mostCommonlyUsedVar());
                    Console.WriteLine("-------------------------------");

                    var cecv = new ExprComplexityVisitor();
                    parser.root.Visit(cecv);
                    Console.WriteLine("Список сложностей выражений: ");
                    Console.Write("\t");
                    for (int i = 0; i < cecv.list.Count - 1; ++i)
                    {
                        Console.Write("{0}, ", cecv.list[i]);
                    }
                    if (cecv.list.Count > 0)
                    {
                        Console.Write("{0};", cecv.list[cecv.list.Count - 1]);
                    }
                    Console.WriteLine("\n-------------------------------");

                    var cviv = new ChangeVarIdVisitor("a", "d");
                    parser.root.Visit(cviv);
                    Console.WriteLine("Переименование переменной a на d:");
                    Console.WriteLine(cviv.Text);
                    Console.WriteLine("-------------------------------");

                    var mncv = new MaxNestCyclesVisitor();
                    parser.root.Visit(mncv);
                    Console.WriteLine("Максимальная вложенность циклов = {0}", mncv.MaxNest);
                    Console.WriteLine("-------------------------------");

                    var micnv = new MaxIfCycleNestVisitor();
                    parser.root.Visit(micnv);
                    Console.WriteLine("Максимальная вложенность циклов и конструкций if ... then ... else = {0}", micnv.MaxNest);
                    Console.WriteLine("-------------------------------");
                }
            }
            catch (FileNotFoundException)
            {
                Console.WriteLine("Файл {0} не найден", FileName);
            }
            catch (Exception e)
            {
                Console.WriteLine("{0}", e);
            }

            Console.ReadLine();
        }
Exemplo n.º 5
0
        public static void Main()
        {
            string FileName = @"..\..\a.txt";

            try
            {
                string Text = File.ReadAllText(FileName);

                Scanner scanner = new Scanner();
                scanner.SetSource(Text, 0);

                Parser parser = new Parser(scanner);

                var b = parser.Parse();
                if (!b)
                {
                    Console.WriteLine("Ошибка");
                }
                else
                {
                    Console.WriteLine("Синтаксическое дерево построено");

                    var pp = new PrettyPrintVisitor();
                    parser.root.Visit(pp);
                    Console.WriteLine(pp.Text);
                    Console.WriteLine("-------------------------------");

                    var avis = new AssignCountVisitor();
                    parser.root.Visit(avis);
                    Console.WriteLine("Количество присваиваний = {0}", avis.Count);
                    Console.WriteLine("-------------------------------");

                    var midCount = new CountCyclesOpVisitor();
                    parser.root.Visit(midCount);
                    Console.WriteLine("Среднее количество операторов = {0}", midCount.MidCount());
                    Console.WriteLine("-------------------------------");

                    var cuv = new CommonlyUsedVarVisitor();
                    parser.root.Visit(cuv);
                    Console.WriteLine("Наиболее часто используемая переменная = {0}", cuv.mostCommonlyUsedVar());
                    Console.WriteLine("-------------------------------");

                    var cviv = new ChangeVarIdVisitor("a", "d");
                    parser.root.Visit(cviv);
                    Console.WriteLine("Переименование переменной a на d:");
                    pp = new PrettyPrintVisitor();
                    parser.root.Visit(pp);
                    Console.WriteLine(pp.Text);
                    Console.WriteLine("-------------------------------");

                    var mncv = new MaxNestCyclesVisitor();
                    parser.root.Visit(mncv);
                    Console.WriteLine("Максимальная вложенность циклов = {0}", mncv.MaxNest);
                    Console.WriteLine("-------------------------------");
                }
            }
            catch (FileNotFoundException)
            {
                Console.WriteLine("Файл {0} не найден", FileName);
            }
            catch (Exception e)
            {
                Console.WriteLine("{0}", e);
            }

            Console.ReadLine();
        }