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