コード例 #1
0
ファイル: TreeUtils.cs プロジェクト: sandwwraith/mathlogic
        /// <summary>
        /// Проверяет два синтаксических дерева на сходство, игнорируя вертикальные "цепочки" и скобки.
        /// </summary>
        public static bool Same(this IParseTree tree1, IParseTree tree2)
        {
            tree1 = tree1.Collapse();
            tree2 = tree2.Collapse();

            if (tree1.ChildCount == 0 || tree2.ChildCount == 0) return tree1.GetText() == tree2.GetText();
            if (tree1.ChildCount != tree2.ChildCount) return false;

            for (int i = 0; i < tree1.ChildCount; i++)
            {
                if (!tree1.GetChild(i).Same(tree2.GetChild(i))) return false;
            }
            return true;
        }
コード例 #2
0
ファイル: TreeUtils.cs プロジェクト: sandwwraith/mathlogic
        private bool Match(IParseTree tree, IParseTree localTree)
        {
            tree = tree.Collapse();
            localTree = localTree.Collapse();
            if (localTree.ChildCount == 0) return CompareWrite(localTree.GetText(), tree);
            if (tree.ChildCount != localTree.ChildCount) return false;

            for (int i = 0; i < tree.ChildCount; i++)
            {
                if (!Match(tree.GetChild(i), localTree.GetChild(i))) return false;
            }

            return true;
        }