Esempio n. 1
0
        internal static Nfa Concat(IEnumerable <Nfa> coll)
        {
            Nfa nfa_result = coll.First();

            NfaNode[] end_nodes = nfa_result.Accepting().ToArray();

            foreach (Nfa nfa in coll.Skip(1))
            {
                NfaNode[] new_ends = nfa.Accepting().ToArray();
                nfa.StartNode.ConnectFrom(end_nodes, NfaEdge.CreateEmpty());
                end_nodes = new_ends;
            }

            return(nfa_result);
        }
Esempio n. 2
0
        internal int Add(bool priority, NaiveLanguageTools.MultiRegex.RegexParser.AltRegex pattern, StringCaseComparison stringComparison)
        {
            pattern = pattern.ToCaseComparison(stringComparison);
            Nfa pattern_nfa = pattern.BuildNfa();

            pattern_nfa.Accepting().ForEach(it => it.SetValue(rulesCount, priority));
            if (this.rulesCount == 0)
            {
                nfa = pattern_nfa;
            }
            else
            {
                nfa.StartNode.ConnectTo(pattern_nfa.StartNode, NfaEdge.CreateEmpty());
            }

            return(rulesCount++);
        }