예제 #1
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));
        }
예제 #2
0
파일: ProdDef.cs 프로젝트: mrfichtn/opal
        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));
        }