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); }
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++); }