【问题标题】:AST with selectors [closed]带有选择器的 AST [关闭]
【发布时间】: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


【解决方案1】:

这个很实用:https://live.gnome.org/GObjectIntrospection/

以及 gcc 插件 dehydra:https://developer.mozilla.org/en-US/docs/Dehydra LLVM 有一堆项目:http://llvm.org/ProjectsWithLLVM/

这是理论上的:http://www.complang.org/colm/,但可能很有趣。

另请参阅此线程,关于使用 OWL/语义网络进行查询的主题: http://lists.w3.org/Archives/Public/semantic-web/2012Aug/0077.html

【讨论】:

  • COLM 非常聪明的解析,专注于解析硬语言。但我不相信它提供任何成熟的解析器,更不用说符号表等了。
【解决方案2】:

http://cs.nyu.edu/~lharris/content/programquerylangs.html

当我玩这种东西时,我最初的重点是专门面向 Java,也使用 Eclipse AST 工具。这与语言无关,而且我知道的大多数工具也不是。

但是,它确实包含了一些项目链接(我只玩过其中两个,而且很长一段时间都没有),这些链接可能会给你一些想法,尽管我不清楚你想要从什么样的信息答案。 AST 本身与实现紧密相关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 2017-01-27
    • 2015-08-05
    • 2016-03-08
    • 2016-12-24
    • 2014-08-08
    • 1970-01-01
    相关资源
    最近更新 更多