Обнаружение ошибок при разборе 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.

Другие вопросы по тегам