public RxNode <LetterId> Quantified(RxQuantified <TLetter> node, Func <RxMatch <TLetter>, ICollection <LetterId> > context)
 {
     return(new RxQuantified <LetterId>(node.Inner.Visit(this, context), node.Min, node.Max));
 }
示例#2
0
 public object Quantified(RxQuantified <TLetter> node, Func <RangeSet <TLetter>, object, RangeSet <TLetter> > context)
 {
     node.Inner.Visit(this, context);
     return(null);
 }
示例#3
0
        NfaState <TLetter> IRegexVisitor <TLetter, NfaState <TLetter>, NfaState <TLetter> > .Quantified(RxQuantified <TLetter> node, NfaState <TLetter> context)
        {
            for (var i = 0; i < node.Min; i++)
            {
                context = node.Inner.Visit(this, context);
            }
            var target = context;

            if (node.Max.HasValue)
            {
                for (var i = node.Min; i < node.Max.Value; i++)
                {
                    target = node.Inner.Visit(this, context);
                    context.AddEpsilonTransition(target);
                    context = target;
                }
            }
            else
            {
                // kleene closure
                var innerStart = this.Create();
                context.AddEpsilonTransition(innerStart);
                target = this.Create();
                innerStart.AddEpsilonTransition(target);
                var innerEnd = node.Inner.Visit(this, innerStart);
                innerEnd.AddEpsilonTransition(innerStart);
            }
            return(target);
        }
示例#4
0
 RxNode <TLetter> IRegexVisitor <TLetter, SymbolId, RxNode <TLetter> > .Quantified(RxQuantified <TLetter> node, SymbolId context)
 {
     return(node.Inner.Visit(this, context));
 }