public override Productions.TerminalBase Build(Productions.GrammarBuilder builder) { if (builder.TryFind(name.Value, out var id, out var isTerminal)) { return(isTerminal ? new Productions.TerminalSymbol(name, id) : new Productions.NonTerminalSymbol(name, id)); } return(builder.MissingSymbol(name)); }
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)); }
public override Productions.TerminalBase Build(Productions.GrammarBuilder builder) =>
public abstract Productions.TerminalBase Build(Productions.GrammarBuilder builder);
public override Productions.TerminalBase Build(Productions.GrammarBuilder builder) { var symbol = expr.Build(builder); return(Build(builder, symbol)); }