类 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_*
常量的按位或运算。
# 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