<分区>
我正在 Objective C 中寻找可以从可修改的 Objective C 代码中创建 AST 的东西。如果它也实现了 AST 的访问者模式,那就太好了。基本上是在寻找类似 NRefactory 的东西适用于 C#。
目前我正在研究 CLang,这是我唯一能够通过谷歌搜索到的看起来接近我想要的东西。如果任何有 CLang 经验的人都可以插话,那就太好了。
我也对付费解决方案持开放态度。
谢谢!
<分区>
我正在 Objective C 中寻找可以从可修改的 Objective C 代码中创建 AST 的东西。如果它也实现了 AST 的访问者模式,那就太好了。基本上是在寻找类似 NRefactory 的东西适用于 C#。
目前我正在研究 CLang,这是我唯一能够通过谷歌搜索到的看起来接近我想要的东西。如果任何有 CLang 经验的人都可以插话,那就太好了。
我也对付费解决方案持开放态度。
谢谢!
最佳答案
您提出问题一周后,零回复。
如果您找到可以让您解析和转换 ObjectiveC 代码的 ObjectiveC 工具,我会感到很惊讶。一般来说,这样的工具真的很难构建,而且有 在 ObjectiveC 中没有明显的需求。
Clang 似乎是处理 AST 的一个选项,但它显然不是用 ObjectiveC 编码的。我没有任何直接经验,但我知道 Clang 会解析 ObjectiveC 并构建 AST。我想你可以修改 AST,但我不知道你是否可以从中重新生成 ObjectiveC 代码;我听说您可以从 Clang AST 为已解析的 C++ 程序生成 C++ 代码。 (Clang 是一个非常难以构建的工具;看看它的悠久历史)。
如果 Clang 不行,您可以考虑我们的 DMS Software Reengineering Toolkit . DMS,给定一个明确的语言描述将解析,为该语言构建 ASTs,让你检查/修改 AST 程序,和/或应用 source-to-source transformations使用指定语言(在您的情况下为 ObjectiveC)的表面语法编写,并用该语言重新生成有效源代码,包括在解析期间收集的注释。
DMS 有 many language descriptions ,包括 C、Java、C++(包括 C++11)、COBOL、PHP 等。目前没有针对 ObjectiveC 的描述,但 DMS 旨在简化提供此类语言描述的过程,这些描述可能从我们已经有了。与构建解析/转换/ pretty-print 制(这一切真的都很难构建!)相比,定义语言前端是一项非常小的任务。
2012 年 6 月 8 日编辑:(提问后 9 个月,没有其他回复) DMS 现在有一个 ObjectiveC front end .您可以在此处查看 DMS 为小型 ObjectiveC 代码生成的解析树:https://stackoverflow.com/a/10749970/120163是的,DMS 可以从此类(修改后的)树中重新生成有效的 ObjectiveC 源代码。
关于objective-c - 具有可修改 AST 的 Objective C 解析器(如 C# 的 NRefactory),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7878969/