@ruby.exe -Ku racc <文法ファイル名>

Windows での、Racc文法ファイルの文字コードの扱いについて、前の項(Windowsで 1.9.1 と Racc とスクリプトエンコーディング - Rubyとか Illustratorとか SFとか折紙とか)の機序もう少し詳しく見てみる、「るびま」を参考に。

文法ファイルには UTF-8文字が混じっているという状況

まず、「-Ku」の無い場合

  1. racc <文法ファイル名>
  2. Windowsが racc.bat を探し当ててそれを実行
  3. ruby.exe racc <文法ファイル名> を実行
    1. racc は拡張子無しの Rubyスクリプト (専ら raccライブラリ本体を load する)
    2. magic comment なし、コマンドラインオプションも、環境変数 RUBYOPTも、shebang の -K もないので、script encoding は US-ASCII
    3. それはそれとして default_external もオプション等での明示的な指定が無い、すると locale
      1. それは Windows-31J(Encoding::Windows_31J)
    4. 一方 default_internal は nil
  4. <文法ファイル名>ファイルを読む、default_external = Windows-31J と想定
    1. UTF-8文字列が出てきたら、想定が違うとエラー

「-Ku」付きの場合

  1. racc -Ku <文法ファイル名>
  2. Windowsが racc.bat を探し当ててそれを実行
  3. ruby.exe -Ku racc <文法ファイル名> を実行
    1. racc は拡張子無しの Rubyスクリプト (専ら raccライブラリ本体を load する)
    2. magic comment なしなので、コマンドラインオプションの -Ku をみて sctipt encoding は UTF-8
    3. それはそれとして default_external も、オプションの -Ku をみて UTF-8
    4. 一方 default_internal は nil。こっちは -Kオプションを見ない
  4. <文法ファイル名>ファイルを読む、default_external = UTF-8 と想定
    1. UTF-8文字列が出てきても大丈夫
  5. default_internal が nil なので、文法ファイル文字列は内部的にも UTF-8 (externalと同じ)

こんな感じかな、間違ってないよね。
前項では、スクリプトエンコーディングという言葉を出したけど、微妙に適切ではなかったかも。