class Ripper::Filter
此类仅处理扫描器事件,这些事件以“正确的”顺序(与输入相同)分派。
Public Class Methods
Source
# 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
创建一个新的 Ripper::Filter 实例,将参数 src、filename 和 lineno 传递给 Ripper::Lexer.new
词法分析器仅供内部使用。
Public Instance Methods
Source
# File ext/ripper/lib/ripper/filter.rb, line 46 def column @__col end
当前令牌的列号。此值从 0 开始。此方法仅在事件处理程序中有效。
Source
# File ext/ripper/lib/ripper/filter.rb, line 32 def filename @__lexer.filename end
输入的파일명。
Source
# File ext/ripper/lib/ripper/filter.rb, line 39 def lineno @__line end
当前令牌的行号。此值从 1 开始。此方法仅在事件处理程序中有效。
Source
# 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
启动解析器。init 是一个数据累加器,它将被传递到下一个事件处理程序(参考 Enumerable#inject)。
Source
# File ext/ripper/lib/ripper/filter.rb, line 52 def state @__state end
当前令牌的扫描器状态。此值是零个或多个 Ripper::EXPR_* 常量的按位或。
私有实例方法
Source
# File ext/ripper/lib/ripper/filter.rb, line 80 def on_default(event, token, data) data end
当某个事件处理程序未定义时调用此方法。event 是 :on_XXX,token 是扫描的令牌,data 是一个数据累加器。
此方法的返回值将被传递到下一个事件处理程序(参考 Enumerable#inject)。