Ruby2Ruby与ParseTree兼容吗?

Ruby2Ruby与ParseTree兼容吗?,ruby,Ruby,有没有办法将Sexps从ParseTree转换回ruby代码 我开始写一些代码来进行翻译,但我想知道这是否已经存在。另一个问题是Ruby2Ruby在算术运算中放入了大量不必要的括号(如4+3-2+-2**4到((4+3)-2+-(2**4)),两者都是等效的)。有什么方法可以删除它们吗?我认为它们应该是兼容的,正如它们所写的那样,但有时会出现bug(从同一作者的两个gem之间的不兼容中可以看出)。我不确定这是否适用于您,因为您似乎想从字符串中解析ruby代码,但是,如果您确实想要运行代码的源代码

有没有办法将Sexps从ParseTree转换回ruby代码


我开始写一些代码来进行翻译,但我想知道这是否已经存在。另一个问题是Ruby2Ruby在算术运算中放入了大量不必要的括号(如
4+3-2+-2**4
((4+3)-2+-(2**4))
,两者都是等效的)。有什么方法可以删除它们吗?

我认为它们应该是兼容的,正如它们所写的那样,但有时会出现bug(从同一作者的两个gem之间的不兼容中可以看出)。

我不确定这是否适用于您,因为您似乎想从字符串中解析ruby代码,但是,如果您确实想要运行代码的源代码,可以执行以下操作:

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。您只是想找到运行代码的源代码吗?在探索文件“parse_tree_extensions.rb”时,我发现了一个名为
Unifier
的类,该类将sexp转换为Ruby2Ruby的可读文件。如果我添加
require'unified_ruby',我的代码现在就可以工作了;调用Ruby2Ruby后,sexp=Unifier.new.process(sexp)
。谢谢你的提示。
$ 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