4

flexは UTF-8 入力をサポートしていないようです。スキャナーが非 ASCII 文字を検出すると、それが EOF であるかのようにスキャンを停止します。

Flex に UTF-8 文字を強制的に使用させる方法はありますか? 実際にUTF-8文字と一致させたくないので、「。」を使用するときにそれらを食べてください。パターン。

なにか提案を?

編集

最も簡単な解決策は次のとおりです。

任意 [\x00-\xff]

「.」の代わりに「ANY」を使用します。私のルールで。

4

2 に答える 2

7

私はこれを自分で調べ、Flex メーリング リストを読んで、誰かが考えているかどうかを確認しました。Flex に Unicode を読み取らせるのは複雑な作業です...

UTF-8 エンコーディングを実行できます。他のほとんどのエンコーディング (16 秒) では、オートマトンを駆動する大規模なテーブルが作成されます。

これまでの一般的な方法は次のとおりです。

私が行ったことは、単一の UTF-8 文字に一致するパターンを単純に記述することでした。これらは次のようなものですが、UTF-8 仕様を読み直したいと思うかもしれません。これはかなり前に書いたものだからです。
もちろん、単一の文字だけでなく Unicode 文字列が必要なため、これらを組み合わせる必要があります。

UB [\200-\277] %% 
[\300-\337]{UB}                   { do something } 
[\340-\357]{UB}{2}                { do something } 
[\360-\367]{UB}{3}                { do something } 
[\370-\373]{UB}{4}                { do something } 
[\374-\375]{UB}{5}                { do something }

メーリングリストより引用。

さらに詳しく調べた後、UTF-8 サポート用の適切なパッチを作成することを検討するかもしれません。上記の解決策は、大きな .l ファイルでは維持できないようです。そして本当に醜いです!同様の範囲を使用して「.」を作成できます。すべての ASCII および UTF-8 文字に一致する代わりのルールですが、それでもかなり醜いです。

お役に立てれば!

于 2009-05-28T16:03:54.103 に答える
1

negatet 文字クラスを記述することも役立つ場合があります。

[\n \t] WITESPACE を返します。[^\n \t] NON_WHITESPACE を再実行

于 2009-06-30T13:34:15.643 に答える