當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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類。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。