Как бы я перекомпилировал AST Риппера обратно в код Ruby? - PullRequest
6 голосов
/ 02 февраля 2011

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 и ruby2ruby раньше делали это, но я хотел бы использовать Ripper в качестве моего парсера. (Ruby 1.9 может даже поставляться с такой библиотекой, но я изо всех сил пытаюсь найти документацию даже на самом Ripper) *

1 Ответ

4 голосов
/ 03 февраля 2011

См. " Колдун ".Это хорошо работает, но я нашел ошибку при разборе методов.Если вы добавите src.emit("; ") ниже строки 301 файла "lib / sorcerer / resource.rb", это будет исправлено.Но вы можете найти больше, если вы решите использовать это.Удачи.

...