Обнаружение ошибок при разборе Rubi Ripper
Кто-нибудь выяснил, как обнаруживать ошибки, когда в библиотеку Ruby ripper передается искаженный ввод?
ruby-1.9.2-p180 :002 > Ripper.sexp("array[1 2]")
=> [:program, [:@int, "2", [1, 8]]]
ruby-1.9.2-p180 :003 >
Я немного покопался в источниках и обнаружил #compile_error, #warning, #warn и #yydebug, но пока не ясно, как заставить работать любой из этих методов. Без сомнения, здесь есть простой ответ.
1 ответ
Мне кажется, я где-то читал, что расширение ruby ripper все еще находится в активной разработке, поэтому я не удивлюсь, если еще никто не удосужился подключить #compile_error, #warning или #warn.
Ripper # yydebug работает в Ruby 1.9.3, и он может работать в 1.9.2, и я просто что-то делал не так. Но он выводит отладочную информацию, только небольшая часть которой будет связана с ошибкой.
Это один простой способ обнаружения ошибок:
require 'ripper'
require 'pp'
class SexpBuilderPP < Ripper::SexpBuilderPP
def on_parse_error(*)
raise "parse error!"
end
end
while input = $stdin.gets
pp SexpBuilderPP.new(input).parse
end
Есть несколько событий, которые содержат "error" в имени: on_alias_error, on_assign_error, on_class_name_error, on_param_error и on_parse_error.