我有一套 S 的"小型"树 S[i] 我需要找到自己的位置里面的一个更大的 这是用来作为模式,以找到匹配的子树在一个更大的T.我知道的 S 在我开始建造 T (这是一个分析树),所以我在考虑采用一个 切割面的方法 相匹配的节点,因为我去(如分析程序产生的科技委员会).

树木在 S 是不一样的Ast作 T -想想XPath与XML的 S 保持树的代表Xpath,同时 T 是的实际AST的源代码-我需要地图之间 i 和一矢量的匹配的节点的 T.

但是我不确定有关名字的算法我会使用。

基本上我知道我想要做什么,这感觉就像一个"除et impera 对于树木"一堆在那里我保持可能的候选人相匹配,在每个移的LALR parser我重复的顶部叠和消除候选人 iS[i] 这不符,无论如何,后一减少我从栈。在开始所有的成员从 S 都可能的候选人。

请注意:这只是关于AST,ASG是另一个故事...

增编

这里是一个分析树 T.

T - the parse tree

分析功能将意识到的名单有什么我呼叫"treepath",在规范形式,还表示为树木,存在 S.但他们不会看起来像但是,他们有自己的语言来表示,类似于XPath。

例treepath获得所有的职能,必须为返回值的一个变量:

function[body[return[expr[@type="variable"]]]]]
  1. 那么,什么我应该寻找在现有文献的?
  2. 其他任何建议?
  3. 都已经在那里的语言可以查询元附加说明的树木这样吗?一个开放源码C(而不是C++)图书馆将是理想的。
有帮助吗?

解决方案

1)S树木作为XPath对应于一些T树木。为什么不建造的T树木,然后模式匹配他们吗?

2)如果你想到匹配模式反对的结构,可以设想编制的模式为某种类型的国家机,即过渡时给予片树匹配的反对。如果国家机器没有进入接受的状态,你已经找到匹配。如果你有一个以上的模式,每个人可以视为一个国家机和可以运行"平行"(通过模拟)。使这种有效率,计算交叉产品的所有国家机器;现在只有一个,只有一过渡发生时每次输入。这主意我打电话"模式产品"和你看到的东西喜欢在各种有效的匹配器.一个接近你想要做什么的 网环算法, ,其跟踪的"模式"的动作为数据输送给它的变化。

其他提示

它可能是值得寻找到JXPath: http://commons.apache.org/jxpath/ 我不知道该用什么语言,你的目标,但它可能是值得的射击。

无论如何,我的第一冲动,如果我不得不尝试和实施这样的事情就是找到一种方法"列化"两树木,并减少问题的一个简单的字符串匹配。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top