从Ruby块中提取AST

是否可以从Ruby本身获取块的AST?

我已经看过ParseTree和ruby_parser,但他们似乎都对Ruby 1.9.2有粗略的支持(从我读过的内容)。 我需要一些适合1.9.2的东西。

开膛器包含在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。

Interesting Posts