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

时间:2020-03-05 18:40:13  来源:igfitidea点击:

我了解到Ruby 1.8 AST是在运行时使用大型switch语句遍历的,并且诸如在类或者父模块中调用方法之类的许多事情都涉及到解释器在树的运行过程中上下移动。有没有一种简单的方法可以在Ruby C扩展中访问此AST?它涉及Ruby扩展API,还是必须直接入侵内部数据结构?

解决方案

回答

一个好的起点可能是阅读ParseTree库的源代码,它使我们可以了解并使用ruby的AST。

回答

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

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

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

阅读这两者都需要花点时间,才能让我有所了解。