あなたはおそらくJLex互換モードで動作していますか?その場合は、公式のJFlexユーザーズマニュアルから次の項目を参照してください。デフォルトでは7ビットの文字コードを入力するように見えますが、あなたが望むのは16ビット(ユニコード)です。
最初に%%
の後に行%unicode
を追加して修正できます。
出典:
入力文字が
7ビット入力文字セット(文字コード0〜127)を使用するように生成されたスキャナを原因 %の7ビットを設定します。コードが127より大きい入力文字が実行時に入力で検出された場合、スキャナはArrayIndexOutofBoundsExceptionをスローします。このためだけでなく、%unicodeディレクティブの使用を検討する必要があります。文字エンコーディングの詳細については、エンコーディングを参照してください。これはJLex互換モードのデフォルトです。
%完全 %の8ビット
両方のオプションは、生成されたスキャナは、8ビット入力文字セット(文字コード0〜255)を使用させます。実行時に入力文字に255より大きいコードの入力文字があると、スキャナはArrayIndexOutofBoundsExceptionをスローします。あなたのプラットフォームが1文字につき1バイトしか使用しない場合でも、文字のUnicode値は255より大きい場合があることに注意してください。テキストファイルをスキャンする場合は、%unicode疑似命令の使用を検討する必要があります。文字エンコーディングの詳細については、セクションEcondingsを参照してください。 0-0x10FFFF:
%ユニコード %の16ビット
両方のオプションは、生成されたスキャナは、補助コードポイントを含む完全なUnicode入力文字セットを使用することを引き起こします。 %unicodeは、スキャナが2バイトずつ読み取ることを意味しません。何が読み込まれ、キャラクターを構成するかはランタイムプラットフォームによって異なります。文字エンコーディングの詳細については、「エンコーディング」も参照してください。これは、JLex互換モード(コマンドラインオプション--jlex)が使用されていない限り、デフォルトです。
今後の参考として、ソースを引用符で囲み、自分の文章と明確に区別し、ソースへのハイパーリンクを提供してください。 – Laurence