From: KIMURA Koichi <hogemuta@...> Date: 2008-09-23T14:43:17+09:00 Subject: [ruby-dev:36478] ripper dose't recognize '__ENCODING__' keyword 木村です。 とりあえず ruby-devで訊きますが、必要があれば redmineへの登録もします。 Rubyについて Part 32 http://pc11.2ch.net/test/read.cgi/tech/1215531152/589 で触れられている require 'ripper' p Ripper.lex("puts __ENCODING__") >[Ripper FATAL] unknown token 306 (RuntimeError) なんでだろか ruby 1.9.0 (2008-08-26 revision 18849) [i686-linux] ですが、直後の590氏の推測通り、フォローすべき変更をripperでやっていない ためのようです。 現在 keywords ファイルには struct kwtable; %% __ENCODING__, {keyword__ENCODING__, keyword__ENCODING__}, EXPR_END __LINE__, {keyword__LINE__, keyword__LINE__}, EXPR_END __FILE__, {keyword__FILE__, keyword__FILE__}, EXPR_END BEGIN, {keyword_BEGIN, keyword_BEGIN}, EXPR_END と __ENCODING__ がありますが、ext/ripper/eventids2.cにある テーブル static const struct token_assoc { int token; ID *id; } token_to_eventid[] = { に __ENCODING__ に対応すると思われるものはありません。 {keyword_yield, &ripper_id_kw}, {keyword__FILE__, &ripper_id_kw}, {keyword__LINE__, &ripper_id_kw}, {keyword_BEGIN, &ripper_id_kw}, {keyword_END, &ripper_id_kw}, {tAMPER, &ripper_id_op}, とあるので、この辺に keyword__ENCODING__ のエントリを追加 してやれば良いかとも思うのですが確認していません。 少なくともこのファイルはkeywords等の変更に従って自動生成されるもの ではないようなので、手で修正する必要があると思われます。 -- 木村浩一/KIMURA Koichi I thought what I'd do was, I'd pretend I was one of those deaf-mutes or shoud I? mail kbk at kt.rim.or.jp web www.kt.rim.or.jp/~kbk/zakkicho/index.html