класс Ripper::Filter
Этот класс обрабатывает только события сканера, которые вызываются в «правильном» порядке (в том же порядке, что и во входных данных).
Открытые методы класса
# 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
Лексический анализатор предназначен только для внутреннего использования.
Открытые методы экземпляра
# File ext/ripper/lib/ripper/filter.rb, line 46 def column @__col end
Номер столбца текущего токена. Отсчёт начинается с 0. Этот метод действителен только в обработчиках событий.
# File ext/ripper/lib/ripper/filter.rb, line 32 def filename @__lexer.filename end
Имя файла входных данных.
# File ext/ripper/lib/ripper/filter.rb, line 39 def lineno @__line end
Номер строки текущего токена. Отсчёт начинается с 1. Этот метод действителен только в обработчиках событий.
# 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).
# File ext/ripper/lib/ripper/filter.rb, line 52 def state @__state end
Состояние сканера для текущего токена. Это значение представляет собой побитовое ИЛИ нуля или более констант Ripper::EXPR_*.
Закрытые методы экземпляра
# File ext/ripper/lib/ripper/filter.rb, line 80 def on_default(event, token, data) data end
Этот метод вызывается, если обработчик какого-либо события не определён. event — это :on_XXX, token — просканированный токен, а data — накопитель данных.
Возвращаемое этим методом значение передаётся следующему обработчику событий (как в Enumerable#inject).
Ruby Core © 1993–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.