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

标签 objective-c clang abstract-syntax-tree

<分区>

我正在 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/

相关文章:

ios - 如何在 UIWebView 中获取检测到的数字

ios - 无法设置 ImageView

xcode - 如何编译和链接附加源代码而不将其显式包含到项目中?

c++ - 如何使用 Clang 从 C++ 字符串生成 AST?

objective-c - 核心数据合并两个托管对象上下文

iphone - 尝试改变不可变对象(immutable对象)错误

objective-c - 可以将新的 Clang Objective-C 文字重定向到自定义类吗?

c++ - 修改嵌套lambda中捕获的参数 : gcc vs clang?

c - 带有 clang 的多个源文件的 AST

c++ - Boost.Spirit将表达式转换为AST