我如何将Ripper的AST重新编译回Ruby代码?

Jon*_*ock 6 ruby abstract-syntax-tree ruby-ripper

Ripper是Ruby 1.9附带的解析库.它将Ruby代码转换为AST,如下所示:

pp Ripper.sexp("def foo; yield :a; return 1 end")

#=>

[:program,
 [[:def,
   [:@ident, "foo", [1, 4]],
   [:params, nil, nil, nil, nil, nil],
   [:bodystmt,
    [[:yield,
      [:args_add_block,
       [[:symbol_literal, [:symbol, [:@ident, "a", [1, 16]]]]],
       false]],
     [:return, [:args_add_block, [[:@int, "1", [1, 26]]], false]]],
    nil,
    nil,
    nil]]]]
Run Code Online (Sandbox Code Playgroud)

是否有一个库可以使用这个AST并将其转换回Ruby代码?

ruby_parser和ruby2ruby曾经这样做,但我想使用Ripper作为我的解析器.(Ruby 1.9甚至可能附带这样的库,但是我甚至在Ripper本身也很难找到文档)

Gui*_*nal 5

见“巫师”。这很有效,但我在解析方法时发现了一个错误。如果您src.emit("; ")在文件“lib/sorcerer/resource.rb”的第 301 行下方添加,这将被修复。但是,如果您决定使用它,您可能会发现更多。祝你好运。