示例#1
0
 public void OneVarTest()
 {
     Parser p = Parse(@"begin var a0; a0:=2; a0:=a0+2*a0-3; a0:=3; end ");
     Assert.IsTrue(p.Parse());
     var varCounter = new CommonlyUsedVarVisitor();
     p.root.Visit(varCounter);
     Assert.AreEqual("a0", varCounter.mostCommonlyUsedVar());            
 }
示例#2
0
 public void ManyVarTest()
 {
     Parser p = Parse(@"begin var a1,b1,c1; a1:=2+c1-b1; b1:=a1+2*a1-3-b1+b1-b1+b1+b1; b1:=c1-3+b1-3; end ");
     Assert.IsTrue(p.Parse());
     var varCounter = new CommonlyUsedVarVisitor();
     p.root.Visit(varCounter);
     Assert.AreEqual("b1", varCounter.mostCommonlyUsedVar());            
 }
示例#3
0
        public void ManyVarTest()
        {
            Parser p = TestHelpers.Parse(@"begin var a2,b2,c2; a2:=2+c2-b2; b2:=a2+2*a2-3-b2+b2-b2+b2+b2; b2:=c2-3+b2-3; end ");

            Assert.IsTrue(p.Parse());
            var varCounter = new CommonlyUsedVarVisitor();

            p.root.Visit(varCounter);
            Assert.AreEqual("b2", varCounter.mostCommonlyUsedVar());
        }
示例#4
0
        public void OneVarTest()
        {
            Parser p = TestHelpers.Parse(@"begin var a1; a1:=2; a1:=a1+2*a1-3; a1:=3; end ");

            Assert.IsTrue(p.Parse());
            var varCounter = new CommonlyUsedVarVisitor();

            p.root.Visit(varCounter);
            Assert.AreEqual("a1", varCounter.mostCommonlyUsedVar());
        }
示例#5
0
        public void ManyVarTest()
        {
            Parser p = TestHelpers.Parse(@"begin var a,b,c; a:=2+c-b; b:=a+2*a-3-b+b-b+b+b; b:=c-3+b-3; end ");

            Assert.IsTrue(p.Parse());
            var varCounter = new CommonlyUsedVarVisitor();

            p.root.Visit(varCounter);
            Assert.AreEqual("b", varCounter.mostCommonlyUsedVar());
        }
示例#6
0
        public void NoneVarTest()
        {
            Parser p = Parse(@"begin end ");

            Assert.IsTrue(p.Parse());
            var varCounter = new CommonlyUsedVarVisitor();

            p.root.Visit(varCounter);
            Assert.AreEqual("", varCounter.mostCommonlyUsedVar());
        }
示例#7
0
 public void SimpleTest()
 {
     Parser p = Parse(@"begin var a4; a4:=2; a4:=a4+2*a4-3; a4:=3; end ");
     Assert.IsTrue(p.Parse());
     var varRenamer = new ChangeVarIdVisitor("a4", "z");
     p.root.Visit(varRenamer);
     
     var varCounter = new CommonlyUsedVarVisitor();
     p.root.Visit(varCounter);
     Assert.AreEqual("z", varCounter.mostCommonlyUsedVar());
 }
示例#8
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();
        }
示例#9
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();
        }