Совместим ли Ruby2Ruby с ParseTree? - PullRequest
2 голосов
/ 26 января 2011
require 'ruby2ruby'
require 'parsetree'

code = "puts(var)"
sexp = SexpProcessor.new.process(ParseTree.translate(code))
 # => s(:fcall, :puts, s(:array, s(:vcall, :var)))
code = Ruby2Ruby.new.process(sexp)
 # => UnknownNodeError: Bug! Unknown node-type :fcall to Ruby2Ruby

Есть ли какой-нибудь способ перевести Sexps из ParseTree обратно в код ruby?

Я начал писать код, который будет выполнять этот перевод, но я хочу знать, существует ли он уже.Другая проблема заключается в том, что Ruby2Ruby помещает множество ненужных скобок в арифметические операции (например, от 4+3-2+-2**4 до (((4 + 3) - 2) + -(2 ** 4)), обе работают одинаково).Есть ли способ их удалить?

Ответы [ 2 ]

2 голосов
/ 27 января 2011

Я не уверен, что это работает для вас, потому что вы, похоже, хотите разобрать код ruby ​​из строк, но если вы действительно хотите источник запуска кода, вы можете сделать:

$ irb
?> require 'rubygems'
=> true 
?> require 'parse_tree'
=> true 
?> require 'parse_tree_extensions'
=> true 
?> require 'ruby2ruby'
=> true 
?> def calc; 4+3-2+-2**4; end
=> nil 
?> puts method(:calc).to_ruby
def calc
  (((4 + 3) - 2) + -(2 ** 4))
end

Хотя это добавляет интервал, который вы не хотели.

1 голос
/ 27 января 2011

Я думаю, что они должны быть совместимыми, так как они написаны одним и тем же человеком , но иногда появляются ошибки (как можно увидеть в этом вопросе , который показал несовместимость междудве жемчужины одного автора).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...