14 using System.Collections.Generic;
18 using Irony.Parsing.Construction;
24 StringBuilder sb =
new StringBuilder();
25 foreach (
ParserState state
in language.ParserData.States) {
26 sb.Append(
"State " + state.Name);
27 if (state.BuilderData.IsInadequate) sb.Append(
" (Inadequate)");
29 var srConflicts = state.BuilderData.GetShiftReduceConflicts();
30 if (srConflicts.Count > 0)
31 sb.AppendLine(
" Shift-reduce conflicts on inputs: " + srConflicts.ToString());
32 var ssConflicts = state.BuilderData.GetReduceReduceConflicts();
33 if (ssConflicts.Count > 0)
34 sb.AppendLine(
" Reduce-reduce conflicts on inputs: " + ssConflicts.ToString());
36 if (state.BuilderData.ShiftItems.Count > 0) {
37 sb.AppendLine(
" Shift items:");
38 foreach (var item
in state.BuilderData.ShiftItems)
39 sb.AppendLine(
" " + item.ToString());
41 if (state.BuilderData.ReduceItems.Count > 0) {
42 sb.AppendLine(
" Reduce items:");
43 foreach(LRItem item
in state.BuilderData.ReduceItems) {
44 var sItem = item.ToString();
45 if (item.Lookaheads.Count > 0)
46 sItem +=
" [" + item.Lookaheads.ToString() +
"]";
47 sb.AppendLine(
" " + sItem);
50 sb.Append(
" Transitions: ");
54 var hasTransitions = action.ActionType == ParserActionType.Shift || action.ActionType == ParserActionType.Operator;
57 if (!atFirst) sb.Append(
", ");
59 sb.Append(key.ToString());
61 sb.Append(action.NewState.Name);
70 StringBuilder sb =
new StringBuilder();
72 sb.Append(term.ToString());
79 StringBuilder sb =
new StringBuilder();
82 sb.Append(nt.FlagIsSet(TermFlags.IsNullable) ?
" (Nullable) " :
string.Empty);
86 sb.AppendLine(pr.ToString());
readonly ProductionList Productions
static string PrintStateList(LanguageData language)
readonly ParserActionTable Actions
static string PrintNonTerminals(LanguageData language)
readonly NonTerminalList NonTerminals
static string PrintTerminals(LanguageData language)
readonly TerminalList Terminals