Fla*_*ius 6 algorithm parsing programming-languages compiler-theory
我有一组S
"小"树S[i]
,我需要找到它们在更大的内部的位置, 这些树被用作模式以在更大的树中找到匹配的子树T
.我知道S
在开始构建之前T
(这是一个解析树),所以我正在考虑使用切割平面方法来匹配节点(因为解析器生成CST).
中的树S
不是相同的AST T
- 想想XPath与XML - S
保存XPath 的树表示,T
而是源代码的实际AST - 我需要映射i
和匹配节点的向量T
.
但是我不确定我会使用的算法的名称.
基本上我知道我想要做的,感觉就像一个" 分而治之的树"用栈,我持有可能的候选人进行匹配,在LALR解析器每班我重复堆栈的顶部,消除考生i
从S[i]
其中无论如何都不会匹配,并且在减少后我从堆栈中弹出.最初,所有成员S
都是可能的候选人.
请注意:这只是AST,ASG是另一个故事......
附录
这是一个解析树T
.
解析函数将以规范形式(也表示为树)存储在其中,知道我称之为"树路径"的列表S
.但它们看起来不像parsetree,它们有自己的语言可供表示,类似于XPath.
用于获取具有变量返回值的所有函数的树路径示例:
function[body[return[expr[@type="variable"]]]]]
Run Code Online (Sandbox Code Playgroud)