UTF-8 文字入力を読み取るための flex (字句スキャナー) を作成するにはどうすればよいですか?
-
06-09-2019 - |
質問
のようだ フレックス UTF-8入力をサポートしていません。スキャナーは非 ASCII 文字を検出すると、EOF であるかのようにスキャンを停止します。
flex に UTF-8 文字を強制的に食べる方法はありますか?私はそれが実際にUTF-8チャーに一致することを望んでいません、「。」を使用するときにそれらを食べるだけです。パターン。
なにか提案を?
編集
最も単純な解決策は次のようになります。
任意 [\x00-\xff]
「 'の代わりに「任意」を使用します。私のルールで。
解決
私はこれについて自分自身で調べており、誰かがそれを考えているかどうかを確認するために 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文字に合わせてルールを置き換えますが、それでもむしろ醜いです。
お役に立てれば!
他のヒント
negatetのcharacterclassも役立つかもしれない書き込みます:
\ n \ tの】リターン空白。 [^ \ n個の\ t]はretrun NON_WHITESPACE