protected virtual Productions.TerminalBase Build( Productions.GrammarBuilder grammarBuilder, Productions.TerminalBase symbol) { var name = symbol.Name + NameSuffix; var found = grammarBuilder.TryFind(name, out var id, out var isTerminal); if (!found) { return(grammarBuilder.MissingSymbol(new Identifier(this, name))); } return(!isTerminal ? new Productions.NonTerminalSymbol(this, name, id) : new Productions.TerminalSymbol(this, name, id)); }
public Productions.ITerminals Build(Productions.GrammarBuilder builder) { if (Right.Count == 0) { return(new Productions.EmptyTerminals()); } if (Right.Count == 1) { return(new Productions.SingleTerminal(Right[0].Build(builder))); } var terms = new Productions.TerminalBase[Right.Count]; for (var i = 0; i < terms.Length; i++) { terms[i] = Right[i].Build(builder); } return(new Productions.Terminals(terms)); }