private Nonterminal Map(RuleExpr rule) { if (!Rules.TryGetValue(rule, out var mapped)) { mapped = new Nonterminal(rule.Name); Rules.Add(rule, mapped); mapped.Body = Map(mapped, rule.Body); } return(mapped); }
public Grammar From(RuleExpr startSymbol) { return(new Grammar(Map(startSymbol))); }