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