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

# 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