示例#1
0
 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);
     }
 }
示例#2
0
 public override string ToString()
 {
     return(chains.Select(it => RegexChainTraits.ToString(it)).Join("|"));
 }
示例#3
0
 internal AltRegex ToCaseComparison(StringCaseComparison caseComp)
 {
     return(new AltRegex(chains.Select(it => RegexChainTraits.ToCaseComparison(it, caseComp))));
 }