2

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

4

2 回答 2

1

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

于 2008-08-17T22:36:13.103 回答
0

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

因此,这是 Ruby 和 C 代码之间的奇怪混合。非常有趣的阅读,虽然。

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

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

于 2008-08-18T12:11:19.837 回答