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