Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
ParserDataPrinter.cs
Go to the documentation of this file.
1 #region License
2 /* **********************************************************************************
3  * Copyright (c) Roman Ivantsov
4  * This source code is subject to terms and conditions of the MIT License
5  * for Irony. A copy of the license can be found in the License.txt file
6  * at the root of this distribution.
7  * By using this source code in any fashion, you are agreeing to be bound by the terms of the
8  * MIT License.
9  * You must not remove this notice from this software.
10  * **********************************************************************************/
11 #endregion
12 
13 using System;
14 using System.Collections.Generic;
15 using System.Linq;
16 using System.Text;
17 using Irony.Parsing;
18 using Irony.Parsing.Construction;
19 
20 namespace Irony.Parsing {
21  public static class ParserDataPrinter {
22 
23  public static string PrintStateList(LanguageData language) {
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)");
28  sb.AppendLine();
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());
35  //LRItems
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());
40  }
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);
48  }
49  }
50  sb.Append(" Transitions: ");
51  bool atFirst = true;
52  foreach (BnfTerm key in state.Actions.Keys) {
53  ParserAction action = state.Actions[key];
54  var hasTransitions = action.ActionType == ParserActionType.Shift || action.ActionType == ParserActionType.Operator;
55  if (!hasTransitions)
56  continue;
57  if (!atFirst) sb.Append(", ");
58  atFirst = false;
59  sb.Append(key.ToString());
60  sb.Append("->");
61  sb.Append(action.NewState.Name);
62  }
63  sb.AppendLine();
64  sb.AppendLine();
65  }//foreach
66  return sb.ToString();
67  }
68 
69  public static string PrintTerminals(LanguageData language) {
70  StringBuilder sb = new StringBuilder();
71  foreach (Terminal term in language.GrammarData.Terminals) {
72  sb.Append(term.ToString());
73  sb.AppendLine();
74  }
75  return sb.ToString();
76  }
77 
78  public static string PrintNonTerminals(LanguageData language) {
79  StringBuilder sb = new StringBuilder();
80  foreach (NonTerminal nt in language.GrammarData.NonTerminals) {
81  sb.Append(nt.Name);
82  sb.Append(nt.FlagIsSet(TermFlags.IsNullable) ? " (Nullable) " : string.Empty);
83  sb.AppendLine();
84  foreach (Production pr in nt.Productions) {
85  sb.Append(" ");
86  sb.AppendLine(pr.ToString());
87  }
88  }//foreachc nt
89  return sb.ToString();
90  }
91 
92  }//class
93 }//namespace
readonly ProductionList Productions
Definition: NonTerminal.cs:67
static string PrintStateList(LanguageData language)
readonly ParserActionTable Actions
Definition: ParserData.cs:40
static string PrintNonTerminals(LanguageData language)
Describes a language.
Definition: LanguageData.cs:23
readonly NonTerminalList NonTerminals
Definition: GrammarData.cs:29
static string PrintTerminals(LanguageData language)
GrammarData GrammarData
Definition: BnfTerm.cs:102
readonly TerminalList Terminals
Definition: GrammarData.cs:28