【发布时间】:2010-09-06 01:15:11
【问题描述】:
我知道Ruby 1.8 AST 是在运行时使用一个大的 switch 语句进行遍历的,许多事情,比如在类或父模块中调用方法,都需要解释器在树上上下查找。在Ruby C 扩展中访问这个AST 有直接的方法吗?是否涉及 Ruby 扩展 API,还是需要直接破解内部数据结构?
【问题讨论】:
标签: c ruby tree interpreter
我知道Ruby 1.8 AST 是在运行时使用一个大的 switch 语句进行遍历的,许多事情,比如在类或父模块中调用方法,都需要解释器在树上上下查找。在Ruby C 扩展中访问这个AST 有直接的方法吗?是否涉及 Ruby 扩展 API,还是需要直接破解内部数据结构?
【问题讨论】:
标签: c ruby tree interpreter
一个好的起点可能是阅读 ParseTree 库的源代码,它可以让您从 ruby 了解和处理 AST。
【讨论】:
感谢您的提示。你是对的 - ParseTree 似乎是唯一一个对 AST 进行任何操作的代码,除了它实际上是用 RubyInline 编写的。
所以,这是 Ruby 和 C 代码之间的奇怪混合。不过读起来很有趣。
当然,另一个参考是 Ruby 本身的 eval.c。
这需要对两者进行相当多的阅读,才能理解它。
【讨论】: