private static void expr(NfaPair pair) { NfaPair nfaPair = Alloc.NewNfaPair(); MakeNfa.cat_expr(pair); while (Tokens.OR == MakeNfa.spec.current_token) { MakeNfa.gen.Advance(); MakeNfa.cat_expr(nfaPair); Nfa nfa = Alloc.NewNfa(MakeNfa.spec); nfa.Sibling = nfaPair.start; nfa.Next = pair.start; pair.start = nfa; nfa = Alloc.NewNfa(MakeNfa.spec); pair.end.Next = nfa; nfaPair.end.Next = nfa; pair.end = nfa; } }