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]]]]
是否有一个库可以使用此AST并将其转换回Ruby代码?
ruby_parser and ruby2ruby曾经这样做,但我想使用Ripper作为我的解析器。 (Ruby 1.9甚至可能附带这样的库,但我很难在Ripper本身找到文档)
答案 0 :(得分:4)
请参阅“Sorcerer”。这很好但我在解析方法时发现了一个错误。如果在文件“lib / sorcerer / resource.rb”的第301行下面添加src.emit("; ")
,则会修复此问题。但如果你决定使用它,你可能会发现更多。祝你好运。