Axiom.Compiler.Framework.PrologCodeParser.ConvertBinaryTreeToCodeDOM C# (CSharp) Метод

ConvertBinaryTreeToCodeDOM() публичный Метод

public ConvertBinaryTreeToCodeDOM ( BinaryTree tree ) : PrologCodeTerm
tree BinaryTree
Результат Axiom.Compiler.CodeObjectModel.PrologCodeTerm
        public PrologCodeTerm ConvertBinaryTreeToCodeDOM(BinaryTree tree)
        {
            // Clause
            if (tree.Name == ":-")
            {
                PrologCodeClause term = new PrologCodeClause();
                if (tree.Left != null)
                {
                    ArrayList goals = new ArrayList();
                    tree.Flatten(tree.Right, ref goals);
                    foreach (BinaryTree goal in goals)
                    {
                        term.Goals.Add(ConvertGoalBinaryTreeToCodeDOM(goal));
                    }
                    term.Head = (PrologCodePredicate)ConvertBinaryTreeToCodeDOM(tree.Left);
                    return term;
                }
                // Headless clause
                else
                {
                    // process headless clause here
                    PrologCodeHeadlessClause hClause = new PrologCodeHeadlessClause();
                    ArrayList goals = new ArrayList();
                    tree.Flatten(tree.Right, ref goals);
                    foreach (BinaryTree goal in goals)
                    {
                        hClause.Goals.Add(ConvertGoalBinaryTreeToCodeDOM(goal));
                    }
                    return hClause;
                }
            }
            else if (tree.Name == ".")
            {
                return ConvertBinaryListToCodeDOM(tree);

            }
            // Variable
            else if (Char.IsUpper(tree.Name[0]))
            {
                if (tree.Left != null || tree.Right != null)
                {
                    ParserError("Something was not parsed right. Variable has arity > 0", 0, 0);
                }
                PrologCodeVariable var = new PrologCodeVariable(tree.Name);
                return var;
            }
            else
            {
                return ConvertGoalBinaryTreeToCodeDOM(tree);
            }
            //return null;
        }

Usage Example

Пример #1
0
        private void GetFile(string filename, ref string expected, ref string result)
        {
            StreamReader sr = new StreamReader(filename);

            PrologCodeParser parser = new PrologCodeParser();

            parser.Scanner = new PrologScanner(sr);

            PrologCodeTerm term = parser.ConvertBinaryTreeToCodeDOM(parser.Term(1200));
            sr.Close();

            StreamReader codefile = new StreamReader(filename);
            string originalCode = codefile.ReadLine();
            codefile.Close();
            string exp = originalCode.Replace(" ", "").Replace(".", "");
            string res = term.ToString().Replace(" ", "").Replace(".", "");

            expected = exp;
            result = res;
        }