算法的名称匹配的子树Ast
-
28-10-2019 - |
题
我有一套 S
的"小型"树 S[i]
我需要找到自己的位置里面的一个更大的 这是用来作为模式,以找到匹配的子树在一个更大的 树 T
.我知道的 S
在我开始建造 T
(这是一个分析树),所以我在考虑采用一个 切割面的方法 相匹配的节点,因为我去(如分析程序产生的科技委员会).
树木在 S
是不一样的Ast作 T
-想想XPath与XML的 S
保持树的代表Xpath,同时 T
是的实际AST的源代码-我需要地图之间 i
和一矢量的匹配的节点的 T
.
但是我不确定有关名字的算法我会使用。
基本上我知道我想要做什么,这感觉就像一个"除et impera 对于树木"一堆在那里我保持可能的候选人相匹配,在每个移的LALR parser我重复的顶部叠和消除候选人 i
从 S[i]
这不符,无论如何,后一减少我从栈。在开始所有的成员从 S
都可能的候选人。
请注意:这只是关于AST,ASG是另一个故事...
增编
这里是一个分析树 T
.
分析功能将意识到的名单有什么我呼叫"treepath",在规范形式,还表示为树木,存在 S
.但他们不会看起来像但是,他们有自己的语言来表示,类似于XPath。
例treepath获得所有的职能,必须为返回值的一个变量:
function[body[return[expr[@type="variable"]]]]]
- 那么,什么我应该寻找在现有文献的?
- 其他任何建议?
- 都已经在那里的语言可以查询元附加说明的树木这样吗?一个开放源码C(而不是C++)图书馆将是理想的。
解决方案
1)S树木作为XPath对应于一些T树木。为什么不建造的T树木,然后模式匹配他们吗?
2)如果你想到匹配模式反对的结构,可以设想编制的模式为某种类型的国家机,即过渡时给予片树匹配的反对。如果国家机器没有进入接受的状态,你已经找到匹配。如果你有一个以上的模式,每个人可以视为一个国家机和可以运行"平行"(通过模拟)。使这种有效率,计算交叉产品的所有国家机器;现在只有一个,只有一过渡发生时每次输入。这主意我打电话"模式产品"和你看到的东西喜欢在各种有效的匹配器.一个接近你想要做什么的 网环算法, ,其跟踪的"模式"的动作为数据输送给它的变化。
其他提示
它可能是值得寻找到JXPath: http://commons.apache.org/jxpath/ 我不知道该用什么语言,你的目标,但它可能是值得的射击。
无论如何,我的第一冲动,如果我不得不尝试和实施这样的事情就是找到一种方法"列化"两树木,并减少问题的一个简单的字符串匹配。