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)); }
public object Quantified(RxQuantified <TLetter> node, Func <RangeSet <TLetter>, object, RangeSet <TLetter> > context) { node.Inner.Visit(this, context); return(null); }
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); }
RxNode <TLetter> IRegexVisitor <TLetter, SymbolId, RxNode <TLetter> > .Quantified(RxQuantified <TLetter> node, SymbolId context) { return(node.Inner.Visit(this, context)); }