class Ripper

Ripper 是一个 Ruby 脚本解析器。

您可以通过事件驱动的方式从解析器获取信息。例如抽象语法树或 Ruby 程序的简单词法分析。

用法

Ripper 提供了一个简单的接口,可以将您的程序解析为符号表达式树(或 S 表达式)。

理解解析器的输出可能具有挑战性,建议使用 PP 来格式化输出,以便于阅读。

require 'ripper'
require 'pp'

pp Ripper.sexp('def hello(world) "Hello, #{world}!"; end')
  #=> [:program,
       [[:def,
         [:@ident, "hello", [1, 4]],
         [:paren,
          [:params, [[:@ident, "world", [1, 10]]], nil, nil, nil, nil, nil, nil]],
         [:bodystmt,
          [[:string_literal,
            [:string_content,
             [:@tstring_content, "Hello, ", [1, 18]],
             [:string_embexpr, [[:var_ref, [:@ident, "world", [1, 27]]]]],
             [:@tstring_content, "!", [1, 33]]]]],
          nil,
          nil,
          nil]]]]

您可以在上面的示例中看到,表达式以 :program 开头。

从这里开始,方法定义在 :def,后跟方法的标识符 :@ident。在方法标识符之后是括号 :paren 和参数下的 :params

接下来是方法体,从 :bodystmt 开始(stmt 表示语句),其中包含方法的完整定义。

在本例中,我们只是返回一个 String,所以接下来我们有一个 :string_literal 表达式。

在我们的 :string_literal 中,您会注意到两个 @tstring_content,这是字面量部分,分别对应 Hello, !。两个 @tstring_content 语句之间是一个 :string_embexpr,其中 *embexpr* 是嵌入的表达式。我们的表达式由一个局部变量组成,或者说是一个 var_ref,其标识符(@ident)是 world

资源

要求

许可证

Ruby 许可证。