GetDirectDelegates() public method

public GetDirectDelegates ( ) : IList
return IList
Beispiel #1
0
        /** Create NFA, DFA and generate code for grammar.
         *  Create NFA for any delegates first.  Once all NFA are created,
         *  it's ok to create DFA, which must check for left-recursion.  That check
         *  is done by walking the full NFA, which therefore must be complete.
         *  After all NFA, comes DFA conversion for root grammar then code gen for
         *  root grammar.  DFA and code gen for delegates comes next.
         */
        protected virtual void GenerateRecognizer( Grammar grammar )
        {
            string language = (string)grammar.GetOption( "language" );
            if ( language != null )
            {
                CodeGenerator generator = new CodeGenerator( this, grammar, language );
                grammar.CodeGenerator = generator;
                generator.Debug = Debug;
                generator.Profile = Profile;
                generator.Trace = Trace;

                // generate NFA early in case of crash later (for debugging)
                if ( Generate_NFA_dot )
                {
                    GenerateNFAs( grammar );
                }

                // GENERATE CODE
                generator.GenRecognizer();

                if ( Generate_DFA_dot )
                {
                    GenerateDFAs( grammar );
                }

                IList<Grammar> delegates = grammar.GetDirectDelegates();
                for ( int i = 0; delegates != null && i < delegates.Count; i++ )
                {
                    Grammar @delegate = (Grammar)delegates[i];
                    if ( @delegate != grammar )
                    {
                        // already processing this one
                        GenerateRecognizer( @delegate );
                    }
                }
            }
        }