Как бы я перекомпилировал 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" это будет исправлено. Но вы можете найти больше, если вы решите использовать это. Удачи.