Пример #1
0
 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));
 }
Пример #2
0
        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));
        }
Пример #3
0
        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));
        }
Пример #4
0
 public override Productions.TerminalBase Build(Productions.GrammarBuilder builder) =>
Пример #5
0
 public abstract Productions.TerminalBase Build(Productions.GrammarBuilder builder);
Пример #6
0
        public override Productions.TerminalBase Build(Productions.GrammarBuilder builder)
        {
            var symbol = expr.Build(builder);

            return(Build(builder, symbol));
        }