public void simple_test(string expression) { var theoreticalNode = new NodeAnalyzer().Parse(expression); var theoreticalResultSet = new double[_bound.StepCount + 1, _bound.StepCount + 1]; _inRangeExpressionComputer.Compute(theoreticalNode, theoreticalResultSet, _bound); Node best = null; _geneticExpressionGenerator .Invoking ( sut => best = sut.Generate ( theoreticalResultSet, _bound, _bound, Population, GenerationCount, GenerationDepth ) ) .Should() .NotThrow(); best.Should().NotBeNull(); var printer = new PrettyPrintVisitor(); printer.VisitNode(best); Console.WriteLine(printer.Output); }
internal static string GetASTWithOpt(Parser parser, List <int> lstCheck) { var b = parser.Parse(); if (!b) { return("Error. AST not build"); } var fillParents = new FillParentsVisitor(); parser.root.Visit(fillParents); var listOpt = new List <ChangeVisitor>(); if (lstCheck.Count > 0) { foreach (var n in lstCheck) { listOpt.Add(ASTOptimizations[n]); } ASTOptimizer.Optimize(parser, listOpt); } var pp = new PrettyPrintVisitor(); parser.root.Visit(pp); return(pp.Text); }
protected static string[] ApplyAstOpt(Parser AST, ChangeVisitor opt) { AST.root.Visit(opt); var pp = new PrettyPrintVisitor(); AST.root.Visit(pp); return(pp.Text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)); }
private string[] ApplyOptimizations(Parser AST, List <ChangeVisitor> Optimizations = null) { ASTOptimizer.Optimize(AST, Optimizations); var pp = new PrettyPrintVisitor(); AST.root.Visit(pp); return(pp.Text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)); }
public void optimizer_in_action(string input, string optimized) { var node = new NodeAnalyzer().Parse(input); var optimizedNode = new OptimizationMutator().MutateNode(node); var printer = new PrettyPrintVisitor(); printer.VisitNode(optimizedNode); printer.ToString().Should().Be(optimized); }
static void Main(string[] args) { var DirectoryPath = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName; string FileName = Path.Combine(DirectoryPath, "a.txt"); try { string Text = File.ReadAllText(FileName); Text = Text.Replace('\t', ' '); Scanner scanner = new Scanner(); scanner.SetSource(Text, 0); Parser parser = new Parser(scanner); var b = parser.Parse(); var r = parser.root; var printv = new PrettyPrintVisitor(true); r.Visit(printv); Console.WriteLine("Текст программы:"); Console.WriteLine(printv.Text); Console.WriteLine(); var threeAddressCodeVisitor = new ThreeAddressCodeVisitor(); r.Visit(threeAddressCodeVisitor); threeAddressCodeVisitor.Postprocess(); var cfg = new ControlFlowGraph(threeAddressCodeVisitor.TACodeContainer); Console.WriteLine("CFG: "); Console.WriteLine(cfg); Console.WriteLine("DominationBorder: "); foreach (var vertex in cfg.Vertices) { Console.WriteLine(); Console.WriteLine("vertex: \n" + vertex); var borderSet = DominationBorder.Execute(cfg, vertex); string borderStr = ""; foreach (var el in borderSet) { borderStr += el + "\n"; } if (borderSet.Count() == 0) { borderStr = "Empty"; } Console.WriteLine("borderSet: \n\n" + borderStr); Console.WriteLine(); } } catch (FileNotFoundException) { Console.WriteLine("Файл {0} не найден", FileName); } catch (Exception e) { Console.WriteLine("{0}", e); } }
public void Visit_IfNodeWithBoolExprTest() { var source = "if(a == 1){\n" + "a = 3;\n" + "}else{\n" + "a = 4;\n" + "}\n" + "if(true){\n" + "a = 42;\n" + "}else{\n" + "a = 24;\n" + "}\n"; var trueSource = "if(a == 1){\n" + "a = 3;\n" + "}else{\n" + "a = 4;\n" + "}\n" + "{a = 42;}\n"; var scanner1 = new Scanner(); scanner1.SetSource(source, 0); var sourceParser = new Parser(scanner1); sourceParser.Parse(); var fillParent = new FillParentVisitor(); sourceParser.root.Visit(fillParent); var scanner2 = new Scanner(); scanner2.SetSource(trueSource, 0); var trueSourceParser = new Parser(scanner2); trueSourceParser.Parse(); var plusZeroExprVisitor = new IfNodeWithBoolExprVisitor(); sourceParser.root.Visit(plusZeroExprVisitor); var printer1 = new PrettyPrintVisitor(true); var printer2 = new PrettyPrintVisitor(true); sourceParser.root.Visit(printer1); trueSourceParser.root.Visit(printer2); Console.WriteLine(printer1.Text); Console.WriteLine(printer2.Text); Assert.AreEqual(printer1.Text, printer2.Text); }
public void pretty_print_visitor(string expression) { var analyzer = new NodeAnalyzer(); var tree = analyzer.Parse(expression); var computeVisitor = new PrettyPrintVisitor(); computeVisitor.VisitNode(tree); var output = computeVisitor.Output; computeVisitor.Output.Should().NotBeNullOrEmpty(); Console.WriteLine(output); }
/// <summary> /// Создает Parser на основе Scanner и проходит по построенному дереву /// </summary> /// <param name="scanner">Scanner variable</param> /// <returns> /// Возвращает текст программы /// </returns> private static string ParseScanner(Scanner scanner) { var parser = new Parser(scanner); parser.Parse(); var prettyPrintVisitor = new PrettyPrintVisitor(); parser.root.Visit(prettyPrintVisitor); return(prettyPrintVisitor.Text); }
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 avis = new AssignCountVisitor(); parser.root.Visit(avis); Console.WriteLine("Количество присваиваний = {0}", avis.Count); Console.WriteLine("-------------------------------"); var pp = new PrettyPrintVisitor(); parser.root.Visit(pp); Console.WriteLine(pp.Text); Console.WriteLine("-------------------------------"); var code = new GenCodeVisitor(); parser.root.Visit(code); code.EndProgram(); code.PrintCommands(); Console.WriteLine("-------------------------------"); code.RunProgram(); } } 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(); // new 31.03.2020 var r = parser.root; // Console.WriteLine(r); Console.WriteLine("Исходный текст программы"); var printv = new PrettyPrintVisitor(true); r.Visit(printv); Console.WriteLine(printv.Text); Console.WriteLine("-------------------------------"); // new 31.03.2020 if (!b) { Console.WriteLine("Ошибка"); } else { Console.WriteLine("Syntax tree was built: \n"); TacConstantsAndCopies(parser); } } catch (FileNotFoundException) { Console.WriteLine("Файл {0} не найден", FileName); } catch (LexException e) { Console.WriteLine("Лексическая ошибка. " + e.Message); } catch (SyntaxException e) { Console.WriteLine("Синтаксическая ошибка. " + e.Message); } Console.WriteLine("Done. Press any key to continue."); Console.ReadKey(); }
public static string Format(string text) { var result = ParseScript( text, flags: Flags.EnableExpressionChaining); // Can't pretty print a script with errors. if (result.HasError) { return(text); } return(PrettyPrintVisitor.Format(result.Root, result.Before, result.After, text)); }
private static void CFGReducibility_DominatorTree_PrettyPrinter_Demonstration() { string fpath = @"..\..\..\CodeSamples\reducibilityBadSample.txt"; astRoot = AST(fpath); if (astRoot == null) { return; } var tacodeVisitor = new TACodeVisitor(); astRoot.Visit(tacodeVisitor); var prettyPrinter = new PrettyPrintVisitor(); astRoot.Visit(prettyPrinter); var cfg = new ControlFlowGraph(tacodeVisitor.Code); var domTree = new DominatorTree(cfg); Console.WriteLine("###### CFG Reducibility(#59 by APC TEAM) based on DominatorTree(#56 by ДВП)"); Console.WriteLine("###### and PrettyPrinter(#5 by APC TEAM) DEMONSTARTION:"); Console.WriteLine("###### Sample 1:"); Console.WriteLine(prettyPrinter.Text); Console.WriteLine("###### Dominator Tree Matrix:"); Console.WriteLine(domTree.ToString()); Console.WriteLine($"###### CFG is reducible: {cfg.IsReducible}"); Console.WriteLine($"###### CFG depth is: {cfg.Depth}"); fpath = @"..\..\..\CodeSamples\reducibilityGoodSample.txt"; astRoot = null; astRoot = AST(fpath); if (astRoot == null) { return; } tacodeVisitor = new TACodeVisitor(); astRoot.Visit(tacodeVisitor); prettyPrinter = new PrettyPrintVisitor(); astRoot.Visit(prettyPrinter); cfg = new ControlFlowGraph(tacodeVisitor.Code); domTree = new DominatorTree(cfg); Console.WriteLine("###########################################"); Console.WriteLine("###### Sample 2:"); Console.WriteLine("###### Program text from PrettyPrinter:\n"); Console.WriteLine(prettyPrinter.Text); Console.WriteLine("###### Dominator Tree Matrix:"); Console.WriteLine(domTree.ToString()); Console.WriteLine($"###### CFG is reducible: {cfg.IsReducible}"); }
public void TestShouldCreateNoop() { var AST = BuildAST(@"var a; while false a = true;"); var expected = @"var a; "; var opt = new OptWhileFalseVisitor(); AST.root.Visit(opt); var pp = new PrettyPrintVisitor(); AST.root.Visit(pp); Assert.AreEqual(expected, pp.Text); }
public void FoldInPrintTest() { var AST = BuildAST(@" var a, b; print(4 + 5, 2 - 1, 6 / 3, 2 * 5); "); var expected = @"var a, b; print(9, 1, 2, 10);"; var opt = new OptExprAlgebraic(); AST.root.Visit(opt); var pp = new PrettyPrintVisitor(); AST.root.Visit(pp); Assert.AreEqual(expected, pp.Text); }
public void MultWithRightLeftZero() { var AST = BuildAST(@" var a, b; a = 0 * b + b * a * 0 + 5; "); var expected = @"var a, b; a = ((0 + 0) + 5);"; var opt = new OptExprMultZero(); AST.root.Visit(opt); var pp = new PrettyPrintVisitor(); AST.root.Visit(pp); Assert.AreEqual(expected, pp.Text); }
public void DivNumTest() { var AST = BuildAST(@" var a, b; a = 546 / 13; "); var expected = @"var a, b; a = 42;"; var opt = new OptExprAlgebraic(); AST.root.Visit(opt); var pp = new PrettyPrintVisitor(); AST.root.Visit(pp); Assert.AreEqual(expected, pp.Text); }
public void DivByRightOne() { var AST = BuildAST(@" var a, b; a = b / 1; "); var expected = @"var a, b; a = b;"; var opt = new OptExprMultDivByOne(); AST.root.Visit(opt); var pp = new PrettyPrintVisitor(); AST.root.Visit(pp); Assert.AreEqual(expected, pp.Text); }
public void MultAndDivByLeftRightOne() { var AST = BuildAST(@" var a, b; a = 1 * a * 1 + (1 * b / 1) * 1 / 1; "); var expected = @"var a, b; a = (a + b);"; var opt = new OptExprMultDivByOne(); AST.root.Visit(opt); var pp = new PrettyPrintVisitor(); AST.root.Visit(pp); Assert.AreEqual(expected, pp.Text); }
public void FoldComplexTest() { var AST = BuildAST(@" var a, b; a = 42 / 6 * 3 - 3 * (1 + 1) - 2; "); var expected = @"var a, b; a = 13;"; var opt = new OptExprAlgebraic(); AST.root.Visit(opt); var pp = new PrettyPrintVisitor(); AST.root.Visit(pp); Assert.AreEqual(expected, pp.Text); }
public void SubIDInPrintTest() { var AST = BuildAST(@" var a, b; print(a - a, b - b, b - a, a - a - b); "); var expected = @"var a, b; print(0, 0, (b - a), (0 - b));"; var opt = new OptExprSubEqualVar(); AST.root.Visit(opt); var pp = new PrettyPrintVisitor(); AST.root.Visit(pp); Assert.AreEqual(expected, pp.Text); }
public void SubIDTest() { var AST = BuildAST(@" var a, b; a = b - b; "); var expected = @"var a, b; a = 0;"; var opt = new OptExprSubEqualVar(); AST.root.Visit(opt); var pp = new PrettyPrintVisitor(); AST.root.Visit(pp); Assert.AreEqual(expected, pp.Text); }
public void SumWithRightZero() { var AST = BuildAST(@" var a, b; a = b + 0; "); var expected = @"var a, b; a = b;"; var opt = new OptExprSumZero(); AST.root.Visit(opt); var pp = new PrettyPrintVisitor(); AST.root.Visit(pp); Assert.AreEqual(expected, pp.Text); }
public void Visit_PlusZeroExprTest() { var source = "a = 1;\n" + "b = 1 + 0;\n" + "var1 = 0 + b;"; var trueSource = "a = 1;\n" + "b = 1;\n" + "var1 = b;\n"; var scanner1 = new Scanner(); scanner1.SetSource(source, 0); var sourceParser = new Parser(scanner1); sourceParser.Parse(); var fillParent = new FillParentVisitor(); sourceParser.root.Visit(fillParent); var scanner2 = new Scanner(); scanner2.SetSource(trueSource, 0); var trueSourceParser = new Parser(scanner2); trueSourceParser.Parse(); var plusZeroExprVisitor = new PlusZeroExprVisitor(); sourceParser.root.Visit(plusZeroExprVisitor); var printer1 = new PrettyPrintVisitor(true); var printer2 = new PrettyPrintVisitor(true); sourceParser.root.Visit(printer1); trueSourceParser.root.Visit(printer2); Console.WriteLine(printer1.Text); Console.WriteLine(printer2.Text); Assert.AreEqual(printer1.Text, printer2.Text); }
public void IfTrueTest() { var AST = BuildAST(@" var a, b; if true a = b; else a = 1; "); var expected = @"var a, b; a = b;"; var opt = new OptStatIfTrue(); AST.root.Visit(opt); var pp = new PrettyPrintVisitor(); AST.root.Visit(pp); Assert.AreEqual(expected, pp.Text); }
public void RemoveNode() { var AST = BuildAST(@" var a, b; a = a; { b = b; } "); var expected = @"var a, b; { }"; var opt = new OptAssignEquality(); AST.root.Visit(opt); var pp = new PrettyPrintVisitor(); AST.root.Visit(pp); Assert.AreEqual(expected, pp.Text); }
public void WithoutRemoveConstants() { var AST = BuildAST(@"var a; a = a + 0; a = a - 0; a = a * 1; "); var expected = @"var a; a = (a + 0); a = (a - 0); a = (a * 1);"; var opt = new OptAssignEquality(); AST.root.Visit(opt); var pp = new PrettyPrintVisitor(); AST.root.Visit(pp); Assert.AreEqual(expected, pp.Text); }
public void SumNumTest() { var AST = BuildAST(@"var b, c, d; b = true == true; while (5 == 5) c = true == false; d = 7 == 8;"); var expected = @"var b, c, d; b = true; while true c = false; d = false;"; var opt = new OptExprEqualBoolNum(); AST.root.Visit(opt); var pp = new PrettyPrintVisitor(); AST.root.Visit(pp); Assert.AreEqual(expected, pp.Text); }
public void Visit_ConstFoldingTests() { var source = "x = 50 * 10;"; var trueSource = "x = 500;"; var scanner1 = new Scanner(); scanner1.SetSource(source, 0); var sourceParser = new Parser(scanner1); sourceParser.Parse(); var fillParent = new FillParentVisitor(); sourceParser.root.Visit(fillParent); var scanner2 = new Scanner(); scanner2.SetSource(trueSource, 0); var trueSourceParser = new Parser(scanner2); trueSourceParser.Parse(); var cfv = new ConstFoldingVisitor(); sourceParser.root.Visit(cfv); var printer1 = new PrettyPrintVisitor(true); var printer2 = new PrettyPrintVisitor(true); sourceParser.root.Visit(printer1); trueSourceParser.root.Visit(printer2); Console.WriteLine(printer1.Text); Console.WriteLine(printer2.Text); Assert.AreEqual(printer1.Text, printer2.Text); }
public void Visit_DelOfDeadConditionsTests() { var source = "if(a == b){;}else{;}"; var trueSource = ";"; var scanner1 = new Scanner(); scanner1.SetSource(source, 0); var sourceParser = new Parser(scanner1); sourceParser.Parse(); var fillParent = new FillParentVisitor(); sourceParser.root.Visit(fillParent); var scanner2 = new Scanner(); scanner2.SetSource(trueSource, 0); var trueSourceParser = new Parser(scanner2); trueSourceParser.Parse(); var dodcv = new DelOfDeadConditionsVisitor(); sourceParser.root.Visit(dodcv); var printer1 = new PrettyPrintVisitor(true); var printer2 = new PrettyPrintVisitor(true); sourceParser.root.Visit(printer1); trueSourceParser.root.Visit(printer2); Console.WriteLine(printer1.Text); Console.WriteLine(printer2.Text); Assert.AreEqual(printer1.Text, printer2.Text); }
//----< constructor >------------------------------ public consoleProgram() { interp_visitor = new InterpreterVisitor(); print_visitor = new PrettyPrintVisitor(); }