類別 Ripper::Filter

此類別只處理掃描器事件,這些事件會以「正確」順序傳送(與輸入相同)。

公開類別方法

new(src, filename = '-', lineno = 1) 按一下以切換來源

建立新的 Ripper::Filter 執行個體,將參數 srcfilenamelineno 傳遞給 Ripper::Lexer.new

詞法分析器僅供內部使用。

# File ext/ripper/lib/ripper/filter.rb, line 24
def initialize(src, filename = '-', lineno = 1)
  @__lexer = Lexer.new(src, filename, lineno)
  @__line = nil
  @__col = nil
  @__state = nil
end

公開執行個體方法

column() 按一下以切換來源

目前記號的欄位號碼。此值從 0 開始。此方法僅在事件處理常式中有效。

# File ext/ripper/lib/ripper/filter.rb, line 46
def column
  @__col
end
filename() 按一下以切換來源

輸入的檔案名稱。

# File ext/ripper/lib/ripper/filter.rb, line 32
def filename
  @__lexer.filename
end
lineno() 按一下以切換來源

目前記號的行號碼。此值從 1 開始。此方法僅在事件處理常式中有效。

# File ext/ripper/lib/ripper/filter.rb, line 39
def lineno
  @__line
end
parse(init = nil) 按一下以切換來源

啟動剖析器。init 是資料累加器,並傳遞給下一個事件處理常式(如同 Enumerable#inject)。

# File ext/ripper/lib/ripper/filter.rb, line 59
def parse(init = nil)
  data = init
  @__lexer.lex.each do |pos, event, tok, state|
    @__line, @__col = *pos
    @__state = state
    data = if respond_to?(event, true)
           then __send__(event, tok, data)
           else on_default(event, tok, data)
           end
  end
  data
end
state() 按一下以切換來源

目前記號的掃描器狀態。此值是零個或多個 Ripper::EXPR_* 常數的按位元 OR。

# File ext/ripper/lib/ripper/filter.rb, line 52
def state
  @__state
end

私人執行個體方法

on_default(event, token, data) 按一下以切換來源

當某些事件處理常式未定義時,會呼叫此方法。event 是 :on_XXX,token 是已掃描的記號,而 data 是資料累加器。

此方法的傳回值會傳遞給下一個事件處理常式(如同 Enumerable#inject)。

# File ext/ripper/lib/ripper/filter.rb, line 80
def on_default(event, token, data)
  data
end