private static Nfa machine() { Nfa nfa = Alloc.NewNfa(MakeNfa.spec); Nfa nfa2 = nfa; BitSet states = MakeNfa.gen.GetStates(); MakeNfa.spec.current_token = Tokens.EOS; MakeNfa.gen.Advance(); if (Tokens.END_OF_INPUT != MakeNfa.spec.current_token) { nfa2.Next = MakeNfa.rule(); MakeNfa.ProcessStates(states, nfa2.Next); } while (Tokens.END_OF_INPUT != MakeNfa.spec.current_token) { states = MakeNfa.gen.GetStates(); MakeNfa.gen.Advance(); if (Tokens.END_OF_INPUT == MakeNfa.spec.current_token) { break; } nfa2.Sibling = Alloc.NewNfa(MakeNfa.spec); nfa2 = nfa2.Sibling; nfa2.Next = MakeNfa.rule(); MakeNfa.ProcessStates(states, nfa2.Next); } nfa2.Sibling = Alloc.NewNfa(MakeNfa.spec); nfa2 = nfa2.Sibling; nfa2.Next = Alloc.NewNfa(MakeNfa.spec); Nfa next = nfa2.Next; next.Edge = ''; next.Next = Alloc.NewNfa(MakeNfa.spec); next.SetCharSet(new CharSet()); next.GetCharSet().add((int)MakeNfa.spec.BOL); next.GetCharSet().add((int)MakeNfa.spec.EOF); next.Next.SetAccept(new Accept(null)); for (int i = 0; i < MakeNfa.spec.States.Count; i++) { List <Nfa> list = MakeNfa.spec.state_rules[i]; list.Add(next); } return(nfa); }