如何从 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?