Ripper::Filter
Ripper :: Filter类
Parent:Object
该类只处理扫描仪事件,这些事件按“正确”顺序(与输入相同)分派。
公共类方法
new(src, filename = '-', lineno = 1) Show source
创建一个新的Ripper :: Filter实例,将参数src,filename和lineno传递给Ripper :: Lexer.new
词法分析器仅供内部使用。
# File ext/ripper/lib/ripper/filter.rb, line 23
def initialize(src, filename = '-', lineno = 1)
@__lexer = Lexer.new(src, filename, lineno)
@__line = nil
@__col = nil
end
公共实例方法
column() Show source
当前令牌的列号。该值从0开始。此方法仅在事件处理程序中有效。
# File ext/ripper/lib/ripper/filter.rb, line 44
def column
@__col
end
filename() Show source
输入的文件名。
# File ext/ripper/lib/ripper/filter.rb, line 30
def filename
@__lexer.filename
end
lineno() Show source
当前令牌的行号。该值从1开始。此方法仅在事件处理程序中有效。
# File ext/ripper/lib/ripper/filter.rb, line 37
def lineno
@__line
end
parse(init = nil) Show source
启动解析器。 init是一个数据累加器,并传递给下一个事件处理程序(从Enumerable#inject开始)。
# File ext/ripper/lib/ripper/filter.rb, line 51
def parse(init = nil)
data = init
@__lexer.lex.each do |pos, event, tok|
@__line, @__col = *pos
data = if respond_to?(event, true)
then __send__(event, tok, data)
else on_default(event, tok, data)
end
end
data
end
私有实例方法
on_default(event, token, data) Show source
当某些事件处理程序未定义时调用此方法。 事件是:on_XXX,令牌是扫描的令牌,数据是数据累加器。
此方法的返回值传递给下一个事件处理程序(从Enumerable#inject开始)。
# File ext/ripper/lib/ripper/filter.rb, line 71
def on_default(event, token, data)
data
end