是否有可能从 Ruby 本身获取一个块的 AST?
我已经研究过 ParseTree 和 ruby_parser,但它们似乎都对 Ruby 1.9.2 提供了粗略的支持(根据我读到的内容)。我需要一些与 1.9.2 配合良好的东西。
Ripper 开箱即包含在 MRI 1.9 中。
ruby-1.9.2-p180 :004 > require 'ripper'
=> true
ruby-1.9.2-p180 :005 > Ripper.sexp("def a; end")
=> [:program, [[:def, [:@ident, "a", [1, 4]], [:params, nil, nil, nil, nil, nil], [:bodystmt, [[:void_stmt]], nil, nil, nil]]]]
在 1.8 中,Ruby 通过遍历 AST 来执行代码,因此可以获得给定方法/块的 AST。在 1.9 中情况并非如此;代码首先被解析,然后转换为YARV字节码,然后执行。翻译步骤后不保留源,也不保留 AST,并且后者是不可逆的;因此你无法获得 1.9 中某个区块的 AST。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)