Exemple #1
0
 public void If(string condition, Action thenBody, Action?elseBody = null)
 {
     writer.Block($"if ({condition})", thenBody);
     if (elseBody != null)
     {
         writer.Block($"else", elseBody);
     }
 }
Exemple #2
0
        private void Switch(IReadOnlyList <string> inlines, IndentWriter outlines)
        {
            var start = 0;

            for (; start < inlines.Count; ++start)
            {
                if (inlines[start] == "\t\t\tswitch(node.Symbol.ID)")
                {
                    break;
                }
            }

            outlines.Block("switch(node.Symbol.ID)", () =>
            {
                for (start += 2; start < inlines.Count; ++start)
                {
                    var line = inlines[start];

                    if (line == "\t\t\t}")
                    {
                        outlines.Indend("default:", () =>
                        {
                            outlines.WriteLine("throw new NotImplementedException();");
                        });
                        break;
                    }

                    line = line.Replace("visitor.", "return (T)");
                    line = line.Replace(" break;", string.Empty);
                    line = line.TrimStart('\t');

                    outlines.WriteLine(line);
                }
            });
        }
Exemple #3
0
 private void Virtual(string line, IndentWriter outlines)
 {
     line = line.Substring(1); // remove '\t'
     line = line.Replace(" {}", string.Empty);
     line = line.Replace("public virtual void", "protected virtual object");
     line = line.TrimStart('\t');
     outlines.Block($"{line}", () =>
     {
         outlines.WriteLine($"return VisitChildren(node).FirstOrDefault();");
     });
 }
Exemple #4
0
        public void Dump(IWriter writer)
        {
            var output = new IndentWriter();

            output.Block($"grammar {Grammar.Name}", () =>
            {
                PpSet(output, "options", false, Grammar.OptionList);
                PpSet(output, "terminals", true, Grammar.Terminals);
                PpSet(output, "rules", true, Grammar.Nonterminals);
            });

            output.Dump(writer);
        }
Exemple #5
0
 private static void PpSet(IndentWriter writer, string name, bool separate, IEnumerable <Symbol> members)
 {
     writer.Block(name, () =>
     {
         var more = false;
         foreach (var item in members)
         {
             if (separate && more)
             {
                 writer.WriteLine();
             }
             PpAnySymbol(writer, item);
             more = true;
         }
     });
 }