2008-08-17 84 views
2

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

回答

1

一个好的起点可能是读取ParseTree库的来源,它可以让你从ruby中弄到AST并且弄乱AST。

1

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

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

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

这将需要一点点的阅读两个,让我的头。

+0

嘿!出于兴趣,你在写什么? :) – horseyguy 2009-08-10 20:54:15