コード例 #1
0
ファイル: SyntaxParse.cs プロジェクト: RonNewcomb/complish
        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);
 }
コード例 #3
0
ファイル: Program.cs プロジェクト: RonNewcomb/complish
        // 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);
        }