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 );
}