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

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

SorcererJim 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)

会生成单行代码:

deffoo; bar; end


多行输出

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

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

puts Sorcerer.source(sexp, multiline: true)

会得到多行输出:

deffoo

bar

end


缩进

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

例如:

puts Sorcerer.source(sexp, indent: true)

会生成带缩进的代码:

deffoo

 bar

end


调试输出

使用debug选项

puts Sorcerer.source(sexp, debug: true)

相关文章
|
10月前
|
算法 测试技术 API
如何用Ruby语言提高代码的可读性和可维护性
在软件开发过程中,代码的可读性和可维护性是非常重要的因素。一旦代码变得难以理解和修改,就会导致开发速度变慢、bug增多以及团队合作效率下降。在本篇博客中,我们将探讨一些使用Ruby编程语言的技巧和最佳实践,以提高代码的可读性和可维护性。
59 1
|
2月前
|
JSON 监控 数据可视化
局域网管理软件的Ruby代码实践
使用Ruby进行局域网管理的实践,包括安装`net-ping`库进行设备扫描、利用`packetgen`监控流量、执行文件备份自动化任务和数据可视化,以及通过HTTP提交数据。示例代码展示了Ruby在局域网管理中的灵活性和效率。
281 5
|
2月前
|
存储 JavaScript 编译器
这款国产中文编程火了!通过文言文编译生成Python、JS、Ruby代码!
这款国产中文编程火了!通过文言文编译生成Python、JS、Ruby代码!
211 0
|
10月前
|
安全 JavaScript 程序员
Ruby 代码清洁之道 (翻译)
Ruby 代码清洁之道 (翻译)
|
10月前
|
Java Linux 应用服务中间件
在 Ruby on Rails 应用程序中重用 Java 代码
在 Ruby on Rails 应用程序中重用 Java 代码
|
Java Ruby 容器
java调用ruby代码
问题: 最近在做一个应用的时候碰到了一个问题。客户端需要调用服务器端传回的脚本信息,然后执行。其中脚本类型包括ruby。而java中调用ruby的代码大致如下: 1 String jrubyCode="puts 'hello world'"; 2 ScriptEngineManager ...
1286 0