从 Ruby 块中提取 AST
是否有可能从 Ruby 本身获取一个块的 AST?
我已经研究过 ParseTree 和 ruby_parser,但它们似乎都对 Ruby 1.9.2 提供了粗略的支持(根据我读到的内容)。我需要一些与 1.9.2 配合良好的东西。
Is it possible to grab the AST of a block from Ruby itself?
I've had a look at both ParseTree and ruby_parser, but they both seem to have sketchy support (from what I've read) for Ruby 1.9.2. I need something that works well with 1.9.2.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Ripper 开箱即包含在 MRI 1.9 中。
在 1.8 中,Ruby 通过遍历 AST 来执行代码,因此可以获得给定方法/块的 AST。在 1.9 中情况并非如此;代码首先被解析,然后转换为YARV字节码,然后执行。翻译步骤后不保留源,也不保留 AST,并且后者是不可逆的;因此你无法获得 1.9 中某个区块的 AST。
Ripper is included in MRI 1.9 out of the box.
In 1.8, Ruby executes the code by traversing the AST, so it is possible to get the AST for a given method/block. In 1.9 it is not so; the code is first parsed, then converted to YARV bytecode, and then executed. Not the source, nor AST is kept after the translating step, and the latter is not reversible; hence you cannot get the AST for a block in 1.9.