Как бы я перекомпилировал AST Риппера обратно в код Ruby?

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 ответ

Решение

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

Другие вопросы по тегам