示例#1
0
        /***************************************************************
         *    Function: thompson
         *    Description: High level access function to module.
         *    Deposits result in input CSpec.
         **************************************************************/
        public void thompson
        (
            CLexGen lexGen,
            CSpec spec,
            CInput input
        )
        {
            int  i;
            CNfa elem;
            int  size;

            /* Set member variables. */
            reset();
            Set(lexGen, spec, input);

            size = m_spec.m_states.Count;
            m_spec.m_state_rules = new Vector[size];
            for (i = 0; i < size; ++i)
            {
                m_spec.m_state_rules[i] = new Vector();
            }

            /* Initialize current token variable
             *       and create nfa. */
            /*m_spec.m_current_token = m_lexGen.EOS;
             *    m_lexGen.advance();*/

            m_spec.m_nfa_start = machine();

            /* Set labels in created nfa machine. */
            size = m_spec.m_nfa_states.size();
            for (i = 0; i < size; ++i)
            {
                elem         = (CNfa)m_spec.m_nfa_states.elementAt(i);
                elem.m_label = i;
            }

            /* Debugging output. */
      #if (DO_DEBUG)
            {
                m_lexGen.print_nfa();
            }
      #endif

            if (m_spec.m_verbose)
            {
                System.Console.WriteLine("NFA comprised of "
                                         + (m_spec.m_nfa_states.Count + 1)
                                         + " states.");
            }

            reset();
        }