当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Ripper类用法及代码示例


本文简要介绍ruby语言中 Ripper类 的用法。

Ripper 是一个 Ruby 脚本解析器。

您可以使用基于事件的样式从解析器获取信息。 Ruby 程序的抽象语法树或简单词法分析等信息。

用法

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

理解解析器的输出可能是一个挑战,建议您使用 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 1.9(仅支持 CVS HEAD)

  • bison 1.28 或更高版本(其他 yacc 不起作用)

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Ripper类。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。