示例#1
0
 public void WriteTest()
 {
     Parser p = Parse(@"begin write(2+2-3) end ");
     Assert.IsTrue(p.Parse());
     var exprMeter = new ExprComplexityVisitor();
     p.root.Visit(exprMeter);
     var resultList = exprMeter.getComplexityList();
     CollectionAssert.AreEqual(new int[] {2}, resultList);            
 }
示例#2
0
 public void AssignTest()
 {
     Parser p = Parse(@"begin var a2; a2:=2+2; a2:=a2+2*a2-3; a2:=3; end ");
     Assert.IsTrue(p.Parse());
     var exprMeter = new ExprComplexityVisitor();
     p.root.Visit(exprMeter);
     var resultList = exprMeter.getComplexityList();
     CollectionAssert.AreEqual(new int[] {1, 5, 0}, resultList);            
 }
示例#3
0
 public void CycleTest()
 {
     Parser p = Parse(@"begin var a3; cycle 2+2/3 a3:=2-2 end ");
     Assert.IsTrue(p.Parse());
     var exprMeter = new ExprComplexityVisitor();
     p.root.Visit(exprMeter);
     var resultList = exprMeter.getComplexityList();
     CollectionAssert.AreEqual(new int[] {4, 1}, resultList);            
 }
示例#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();
        }