Пример #1
0
        private RxNode <TLetter> ComputeRx()
        {
            var regex = default(RxNode <TLetter>);

            using (var enumerator = this.tokens.Values.GetEnumerator()) {
                if (!enumerator.MoveNext())
                {
                    throw new InvalidOperationException("No terminals have been defined");
                }
                regex = enumerator.Current;
                while (enumerator.MoveNext())
                {
                    regex = new RxAlternation <TLetter>(enumerator.Current, regex);
                }
            }
            return(regex);
        }
 public RxNode <LetterId> Alternation(RxAlternation <TLetter> node, Func <RxMatch <TLetter>, ICollection <LetterId> > context)
 {
     return(new RxAlternation <LetterId>(node.Left.Visit(this, context), node.Right.Visit(this, context)));
 }
Пример #3
0
        NfaState <TLetter> IRegexVisitor <TLetter, NfaState <TLetter>, NfaState <TLetter> > .Alternation(RxAlternation <TLetter> node, NfaState <TLetter> context)
        {
            var left = this.Create();

            context.AddEpsilonTransition(left);
            var right = this.Create();

            context.AddEpsilonTransition(right);
            var target = this.Create();

            node.Left.Visit(this, left).AddEpsilonTransition(target);
            node.Right.Visit(this, right).AddEpsilonTransition(target);
            return(target);
        }
Пример #4
0
 public object Alternation(RxAlternation <TLetter> node, Func <RangeSet <TLetter>, object, RangeSet <TLetter> > context)
 {
     node.Left.Visit(this, context);
     node.Right.Visit(this, context);
     return(null);
 }
Пример #5
0
 RxNode <TLetter> IRegexVisitor <TLetter, SymbolId, RxNode <TLetter> > .Alternation(RxAlternation <TLetter> node, SymbolId context)
 {
     return(node.Left.Visit(this, context) ?? node.Right.Visit(this, context));
 }