類別 Ripper::Filter
此類別只處理掃描器事件,這些事件會以「正確」順序傳送(與輸入相同)。
公開類別方法
new(src, filename = '-', lineno = 1) 按一下以切換來源
建立新的 Ripper::Filter
執行個體,將參數 src
、filename
和 lineno
傳遞給 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