如何从 C 级代码访问 Ruby AST?

Posted

技术标签:

【中文标题】如何从 C 级代码访问 Ruby AST?【英文标题】:How do I access the Ruby AST from C level code? 【发布时间】:2010-09-06 01:15:11 【问题描述】:

我知道Ruby 1.8 AST 是在运行时使用一个大的 switch 语句进行遍历的,许多事情,比如在类或父模块中调用方法,都需要解释器在树上上下查找。在Ruby C 扩展中访问这个AST 有直接的方法吗?是否涉及 Ruby 扩展 API,还是需要直接破解内部数据结构?

【问题讨论】:

【参考方案1】:

一个好的起点可能是阅读 ParseTree 库的源代码,它可以让您从 ruby​​ 了解和处理 AST。

【讨论】:

【参考方案2】:

感谢您的提示。你是对的 - ParseTree 似乎是唯一一个对 AST 进行任何操作的代码,除了它实际上是用 RubyInline 编写的。

所以,这是 Ruby 和 C 代码之间的奇怪混合。不过读起来很有趣。

当然,另一个参考是 Ruby 本身的 eval.c。

这需要对两者进行相当多的阅读,才能理解它。

【讨论】:

嘿!出于兴趣,你在写什么? :)

以上是关于如何从 C 级代码访问 Ruby AST?的主要内容,如果未能解决你的问题,请参考以下文章

使用 RecursiveASTVisitor 访问 Clang AST 时确定 Stmt 的父函数节点

使用 ruby​​、Sinatra 和 Mandrill 如何从 api 调用访问单个元素并打印为 HTML?

如何从 Ruby 中的实例方法访问受保护的类方法?

用Ruby(TCPServer)创建的简单服务器,如何从另一个IP访问?

从 Ruby 中包含的文件中访问变量

IOS 如何从其子级访问 uipageviewcontroller?