Sorcerer 基于抽象语法树生成Ruby代码

Sorcerer是Jim Weirich开发的Ruby代码生成器,能够基于Ripper类的抽象语法树(例如S表达式)。

例子

sexp = [:binary,
           [:var_ref, [:@ident, "a", [1, 0]]],
           :+,
           [:var_ref, [:@ident, "b", [1, 4]]]]
puts Sorcerer.source(sexp)

会生成

a + b

Sorcerer需要用到的S表达式可以用Ripper生成。下面的代码效果类似:

sexp = Ripper::SexpBuilder.new("a + b").parse
puts Sorcerer.source(sexp)

选项

无选项

默认状态下,sorcerer会输出单行代码。

例如,给定以下代码:

sexp = Ripper::SexpBuilder.new("def foo; bar; end").parse

然后下面的代码:

puts Sorcerer.source(sexp)

会生成单行代码:

def foo; bar; end

多行输出

使用multiline选项可以实现多行输出。

例如,同样是上面举的代码,使用:

puts Sorcerer.source(sexp, multiline: true)

会得到多行输出:

def foo
bar
end

缩进

默认状态下,sorcerer的多行输出没有缩进。添加indent选项会添加缩进。

例如:

puts Sorcerer.source(sexp, indent: true)

会生成带缩进的代码:

def foo
  bar
end

调试输出

使用debug选项

puts Sorcerer.source(sexp, debug: true)

许可

MIT

相关链接

  • 项目主页
  • Git仓库地址
  • Issue/Bug
  • 持续集成

Sorcerer 基于抽象语法树生成Ruby代码_第1张图片


编译 SegmentFault

你可能感兴趣的:(jimweirich,代码生成,sexp,ast,ruby)