Пример #1
0
 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);
 }
Пример #2
0
        /// <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());
        }