Ejemplo n.º 1
0
 public virtual void SortGrammarFiles()
 {
     //Console.Out.WriteLine( "Grammar names " + GrammarFileNames );
     Graph<string> g = new Graph<string>();
     foreach ( string gfile in GrammarFileNames )
     {
         GrammarSpelunker grammar = new GrammarSpelunker( inputDirectory, gfile );
         grammar.Parse();
         string vocabName = grammar.TokenVocab;
         string grammarName = grammar.GrammarName;
         // Make all grammars depend on any tokenVocab options
         if ( vocabName != null )
             g.AddEdge( gfile, vocabName + CodeGenerator.VocabFileExtension );
         // Make all generated tokens files depend on their grammars
         g.AddEdge( grammarName + CodeGenerator.VocabFileExtension, gfile );
     }
     List<string> sorted = g.Sort();
     //Console.Out.WriteLine( "sorted=" + sorted );
     GrammarFileNames.Clear(); // wipe so we can give new ordered list
     for ( int i = 0; i < sorted.Count; i++ )
     {
         string f = (string)sorted[i];
         if ( GrammarExtensions.Any( ext => f.EndsWith( ext, StringComparison.OrdinalIgnoreCase ) ) )
             AddGrammarFile( f );
     }
     //Console.Out.WriteLine( "new grammars=" + grammarFileNames );
 }