1

Ruby のリッパー ライブラリに不正な形式の入力が与えられたときにエラーを検出する方法を見つけた人はいますか?

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 が見つかりましたが、これらのメソッドを機能させる方法はまだ明確ではありません。ここにいくつかの簡単な答えがあることは間違いありません。

4

1 に答える 1

1

ruby ripper 拡張機能がまだ活発に開発されていることをどこかで読んだ気がするので、#compile_error、#warning、または #warn をまだ誰も接続していなくても驚かないでしょう。

Ripper#yydebug は Ruby 1.9.3 で動作し、1.9.2 でも動作する可能性がありますが、私は何か間違ったことをしていました。ただし、デバッグ情報が出力されますが、エラーに関連するものはごくわずかです。

これは、エラーを検出する簡単な方法の 1 つです。

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

名前に「エラー」を含むイベントがいくつかあります: on_alias_error、on_assign_error、on_class_name_error、on_param_error、および on_parse_error。

于 2011-10-19T23:10:24.710 に答える