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 许可证。