public void If(string condition, Action thenBody, Action?elseBody = null) { writer.Block($"if ({condition})", thenBody); if (elseBody != null) { writer.Block($"else", elseBody); } }
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); } }); }
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();"); }); }
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); }
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; } }); }