Antlr3.Tool.Grammar.ImportGrammar C# (CSharp) Method

ImportGrammar() public method

public ImportGrammar ( Antlr.Runtime.IToken grammarNameToken, string label ) : void
grammarNameToken Antlr.Runtime.IToken
label string
return void
        public virtual void ImportGrammar( IToken grammarNameToken, string label )
        {
            string grammarName = grammarNameToken.Text;
            //[email protected]("import "+gfile.getName());
            string gname = grammarName + GrammarFileExtension;
            TextReader br = null;
            try
            {
                string fullName = Tool.GetLibraryFile( gname );
                if (!File.Exists(fullName))
                {
                    gname = grammarName + AltGrammarFileExtension;
                    fullName = Tool.GetLibraryFile(gname);
                }

                //FileReader fr = new FileReader( fullName );
                //br = new BufferedReader( fr );
                br = new StringReader( System.IO.File.ReadAllText( fullName ) );
                Grammar delegateGrammar = null;
                delegateGrammar = new Grammar( Tool, gname, composite );
                delegateGrammar.label = label;

                AddDelegateGrammar( delegateGrammar );

                delegateGrammar.ParseAndBuildAST( br );
                delegateGrammar.AddRulesForSyntacticPredicates();
                if ( !ValidImport( delegateGrammar ) )
                {
                    ErrorManager.GrammarError( ErrorManager.MSG_INVALID_IMPORT,
                                              this,
                                              grammarNameToken,
                                              this,
                                              delegateGrammar );
                    return;
                }
                if ( this.type == GrammarType.Combined &&
                     ( delegateGrammar.name.Equals( this.name + grammarTypeToFileNameSuffix[(int)GrammarType.Lexer] ) ||
                      delegateGrammar.name.Equals( this.name + grammarTypeToFileNameSuffix[(int)GrammarType.Parser] ) ) )
                {
                    ErrorManager.GrammarError( ErrorManager.MSG_IMPORT_NAME_CLASH,
                                              this,
                                              grammarNameToken,
                                              this,
                                              delegateGrammar );
                    return;
                }
                if ( delegateGrammar.grammarTree != null )
                {
                    // we have a valid grammar
                    // deal with combined grammars
                    if ( delegateGrammar.type == GrammarType.Lexer && this.type == GrammarType.Combined )
                    {
                        // ooops, we wasted some effort; tell lexer to read it in
                        // later
                        LexerGrammarTemplate.SetAttribute( "imports", grammarName );
                        // but, this parser grammar will need the vocab
                        // so add to composite anyway so we suck in the tokens later
                    }
                }
                //[email protected]("Got grammar:\n"+delegateGrammar);
            }
            catch ( IOException ioe )
            {
                ErrorManager.Error( ErrorManager.MSG_CANNOT_OPEN_FILE,
                                   gname,
                                   ioe );
            }
            finally
            {
                if ( br != null )
                {
                    try
                    {
                        br.Close();
                    }
                    catch ( IOException ioe )
                    {
                        ErrorManager.Error( ErrorManager.MSG_CANNOT_CLOSE_FILE,
                                           gname,
                                           ioe );
                    }
                }
            }
        }
Grammar