よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

January 13, 2007 [おもひで]

[Ruby] RubyLexでパースに失敗

Ruby-GetText-Packageでは、rgettextでrubyのソースファイルからmsgidを抜け出すときにRubyLexを使っているんだけど、rubyのソースファイルに"#{Time.now.strftime("%m/%d")"}"という記述があるとSyntaxErrorになるという報告があった。

以下のようにすると再現する。

% ruby -d -rirb/ruby-lex -e 'RubyLex.new.lex'
"#{Time.now.strftime("%m/%d")}Exception `Interrupt' at /usr/lib/ruby/1.8/irb/ruby-lex.rb:85 - 
/usr/lib/ruby/1.8/irb/ruby-lex.rb:85:in `gets': Interrupt
        from /usr/lib/ruby/1.8/irb/ruby-lex.rb:85:in `set_input'
        from /usr/lib/ruby/1.8/irb/ruby-lex.rb:189:in `call'
        from /usr/lib/ruby/1.8/irb/ruby-lex.rb:189:in `buf_input'
        from /usr/lib/ruby/1.8/irb/ruby-lex.rb:104:in `getc'
        from /usr/lib/ruby/1.8/irb/slex.rb:206:in `match_io'
        from /usr/lib/ruby/1.8/irb/slex.rb:76:in `match'
        from /usr/lib/ruby/1.8/irb/ruby-lex.rb:287:in `token'
        from /usr/lib/ruby/1.8/irb/ruby-lex.rb:263:in `lex'
        from -e:1

RubyLexのバグっぽかったので念のためruby-devに報告してみた。ruby-devにメールをしたのはひさしぶりでちょっと緊張した(苦笑)。

[Ruby] RubyLexでパースに失敗(2)

バグなんだけど直らないらしい。ripper使ってはどうか、ということなんだけど、ダブルクオートをシングルクオートに直せば動くので、まぁ、使う際に気をつけてもらうことにするかな・・・。


編集