【发布时间】:2012-08-18 21:21:31
【问题描述】:
我正在寻找允许使用选择器在 AST 上搜索给定语言的语言/库(即“/function(int, int)”以查找具有给定签名的所有函数或“namespace(name=xxx)/method( name=yyy*)" 以查找给定命名空间中以 yyy 开头的所有方法)。
我知道总是有可能将 AST 转换为 XML 并使用 XPath / XQuery,但我正在寻找内置或易于与语言集成的东西。
【问题讨论】:
-
如果你发现了这样的野兽,我会很惊讶;对于您希望搜索的各种语言,它必须具有类似编译器的前端,否则它不知道什么是签名,更不用说参数类型是什么了。 (你说“与语言无关”)。
-
...这里对 AST 的强调是什么?您希望他们来自哪里?
-
我不希望为所有语言提供一种最终解决方案(我认为这样的事情现在是谷歌的内部项目),所以是的,我对部分、有限和近似感兴趣解决方案
-
AST 可以作为外部解析器的产品给出,也可以由同一个库生成,没关系。我正在寻找统一搜索 AST 的能力
-
您假设所有 AST 都共享一些通用格式。我认为从 PL 的源代码生成的 AST 会根据用于生成该 AST 的工具而有所不同,我想任何用于为一种语言生成 AST 的工具可能还包含一个工具来操作/检查生成的 AST由它(或不是)。你有什么特定的 AST 生成工具吗?
标签: search language-agnostic metaprogramming abstract-syntax-tree