Esempio n. 1
0
 /// <summary>
 /// Export the content of the given LR state to the specified writer
 /// </summary>
 /// <param name="writer">The writer to export with</param>
 /// <param name="state">The LR state to export</param>
 /// <param name="grammar">The associated grammar</param>
 private static void ExportLRState(TextWriter writer, Hime.SDK.Grammars.LR.State state, Grammar grammar)
 {
     writer.WriteLine();
     writer.WriteLine("State {0}:", state.ID);
     writer.WriteLine("\tContexts:");
     foreach (Hime.SDK.Grammars.Symbol symbol in state.Transitions)
     {
         Terminal terminal = symbol as Terminal;
         if (terminal != null)
         {
             ROList <int> contexts = state.GetContextsOpenedBy(terminal);
             foreach (int context in contexts)
             {
                 writer.WriteLine("\t\tOn {0} opening context {1}: {2}", terminal, context, grammar.GetContextName(context));
             }
         }
     }
     writer.WriteLine("\tTransitions:");
     foreach (Hime.SDK.Grammars.Symbol symbol in state.Transitions)
     {
         writer.WriteLine("\t\tOn {0} shift to {1}", symbol, state.GetChildBy(symbol).ID);
     }
     writer.WriteLine("\tItems:");
     foreach (Item item in state.Items)
     {
         writer.WriteLine("\t\t" + item.ToString(true));
     }
     writer.WriteLine("\tConflicts:");
     foreach (Conflict conflict in state.Conflicts)
     {
         ExportLRConflict(writer, conflict);
     }
 }