public static void PrintPyramid(ParseForest tree) { // if (!force) return; ParseTreeNode[, ,] P = tree.P; int n = tree.n, r = tree.r; for (int k = n - 1; k >= 0; k--) { foreach (int i in 1.to(n - k)) { "\t".LogAnd(); string retval = ""; foreach (int nonterminals in 1.to(r)) { NonTerminalSymbol nt = (NonTerminalSymbol)nonterminals; if (P[i, k, nonterminals].match && nt != NonTerminalSymbol.comma) { retval += (retval == "" ? "" : ",") + (nt == NonTerminalSymbol.colon ? ":" : nt.ToString()); } } (retval.Length > 10 ? "*" : retval).LogAnd(); } "".Log(); } foreach (int i in 1.to(n)) { ("\t" + tree.a[i]).LogAnd(); } "".Log(); // is valid? if (tree.Count == 0) { "".Log(); //"is NOT a member of language".Log(); } else if (tree.Count == 1) { "IS a member of language as a ".Log(tree.SentenceType.ToString()); } else { "is a member of language but ambiguous, with".Log(tree.Count + " interpretations"); } }
public RulesListItemModel(NonTerminalSymbol rule) { Rule = rule.ToString(); First = Join(rule.First); Follow = Join(rule.Follow); }
// ExtensionMethods ///////////////////////// public static string PrintPyramid(this ParseForest tree, bool force = false) { string retval = Environment.NewLine; ParseTreeNode[, ,] P = tree.P; int n = tree.n, r = tree.r; for (int k = n - 1; k >= 0; k--) { foreach (int i in 1.to(n - k)) { retval += "\t"; //string retval = ""; foreach (int nonterminals in 1.to(r)) { NonTerminalSymbol nt = (NonTerminalSymbol)nonterminals; if (P[i, k, nonterminals].match && nt != NonTerminalSymbol.comma) { retval += (retval == "" ? "" : ",") + (nt == NonTerminalSymbol.colon ? ":" : nt.ToString()); } } retval += (retval.Length > 10 ? "*" : retval); } retval += Environment.NewLine; } foreach (int i in 1.to(n)) { retval += ("\t" + tree.a[i]); } retval += Environment.NewLine; // is valid? if (tree.Count == 0) { retval += Environment.NewLine; } else if (tree.Count == 1) { retval += "IS a member of language as a " + tree.SentenceType.ToString(); } else { retval += "is a member of language but ambiguous, with" + tree.Count + " interpretations"; } return(retval); }