具有可修改AST的Objective C解析器(如c#的NRefactory)

时间:2011-10-24 16:46:20

标签: objective-c clang abstract-syntax-tree

我正在寻找Objective C中的某些内容,它可以使用可修改的目标c代码创建AST。如果它还实现AST的访问者模式也会很棒。基本上寻找像NRefactory这样的东西是c#。

目前我正在调查CLang,这是我唯一能够谷歌看起来接近我想要的东西。如果有CLang经验的人可以加入,那就太好了。

我也对付费解决方案持开放态度。

谢谢!

2 个答案:

答案 0 :(得分:4)

自问题以来一周,零回复。

如果您找到一个可以解析和转换ObjectiveC代码的ObjectiveC工具,我会感到惊讶。这些工具一般很难建立,而且还有 在ObjectiveC中没有明显需求。

Clang似乎是处理AST的一种选择,但它显然没有在ObjectiveC中编码。我没有任何直接的经验,但我知道Clang会解析ObjectiveC并构建一个AST。我想你可以修改AST,但我不知道你是否可以从中重新生成ObjectiveC代码;我听说你可以从Clang AST为已解析的C ++程序生成C ++代码。 (Clang是一个非常难以构建的工具;看看它的悠久历史)。

如果Clang不这样做,您可以考虑我们的DMS Software Reengineering Toolkit。 DMS,给定明确的语言描述将解析,为该语言构建AST,让您在程序上检查/修改AST,和/或申请 source-to-source transformations使用指定语言的表面语法(在您的情况下为ObjectiveC)编写,并使用该语言重新生成有效源代码,包括在解析过程中收集的注释。

DMS有many language descriptions,包括C,Java,C ++(包括C ++ 11),COBOL,PHP等。目前没有ObjectiveC的描述,但DMS的设计使其易于提供我们已有的语言描述。与构建解析/转换/漂亮打印机器(完全 难以构建!)相比,定义语言前端是一项非常小的任务。

编辑2012年6月8日:(问题后9个月,没有其他回复) DMS现在有一个ObjectiveC front end。您可以在此处看到DMS生成的小型ObjectiveC代码解析树:https://stackoverflow.com/a/10749970/120163是的,DMS可以从这些(修改过的)树中重新生成有效的ObjectiveC源代码。

答案 1 :(得分:2)