internal Nfa.Nfa BuildNfa() { Nfa.Nfa[] alt_nfa = chains.Select(it => RegexChainTraits.BuildNfa(it)).ToArray(); if (alt_nfa.Length == 1) { return(alt_nfa.Single()); } else { var nfa = new Nfa.Nfa(); alt_nfa.ForEach(it => nfa.StartNode.ConnectTo(it.StartNode, NfaEdge.CreateEmpty())); // accepting nodes have no outgoing edges mergeNodes(alt_nfa.Select(it => it.Accepting()).Flatten().Where(it => !it.ConnectedTo.Any()).ToArray()); return(nfa); } }
public override string ToString() { return(chains.Select(it => RegexChainTraits.ToString(it)).Join("|")); }
internal AltRegex ToCaseComparison(StringCaseComparison caseComp) { return(new AltRegex(chains.Select(it => RegexChainTraits.ToCaseComparison(it, caseComp)))); }