9

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 和 ruby​​2ruby曾经这样做,但我想使用 Ripper 作为我的解析器。(Ruby 1.9 甚至可能附带这样一个库,但我什至很难找到关于 Ripper 本身的文档)

4

1 回答 1

6

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

于 2011-02-02T21:49:31.420 回答