public void TreeToCode() { var root1 = CreateSampleTree(); root1.Children[0].Add(new Node("X"), 2); root1.Children[2].Add(new Node("Y"), 0); var writer1 = new TreeToCode(); root1.Accept(writer1); System.Console.WriteLine(writer1.Output); //new TreeToCode().execute(root); var document = Parser.Parse("resources/input/TypeCobol/FUNCTION.rdz.cbl", Compiler.DocumentFormat.RDZReferenceFormat); var columns = document.Results.ProgramClassDocumentSnapshot.TextSourceInfo.ColumnsLayout; var program = document.Results.ProgramClassDocumentSnapshot.Program; var root = program.SyntaxTree.Root; root.Get("program.data-division.working-storage").Add(new Node("codegen", false), 1); var writer = new TreeToCode(document.Results.TokensLines); root.Accept(writer); System.Console.WriteLine(writer.Output); }
/// <summary>Generates code</summary> /// <param name="tree">Root of a syntax tree</param> /// <param name="table">Table of symbols</param> /// <param name="columns">Columns layout</param> public void Generate(Root tree, SymbolTable table, ColumnsLayout columns = ColumnsLayout.FreeTextFormat) { Actions = new List<Action>(); // STEP 1: modify tree to adapt it to destination language tree.Accept(this); var groups = new List<string>(); foreach (var action in Actions) { if (action.Group != null && groups.Contains(action.Group)) continue; action.Execute(); if (action.Group != null) groups.Add(action.Group); } // Console.WriteLine(tree.Root.ToString()); // STEP 2: convert tree to destination language code var converter = new TreeToCode(Input, columns); tree.Accept(converter); converter.WriteInputLinesUntilEnd(); Writer.Write(converter.Output.ToString()); Writer.Flush(); // Console.WriteLine(converter.Output.ToString()); }