しょぼいマシンで自作プログラミング言語を作ってみる (20)
UTF-32での字句解析にあたって(3)
字句解析の前の文字コード検知。サポート対象を変更。
文字コードの検知において、UTF-7のサポートは外しました。
その代わり、UTF-16、UTF-32がサポート対象となりました。
UTF-16、UTF-32においてはBOM有無、エンディアンの大小問わずにサポートします。
UTF-16の検知はちょいと甘いかもしれませんが、不正なサロゲート文字の有無、対向エンディアンの改行コードの有無、対向エンディアンのASCIIコードの数などを元に判定すれば、それなりには判定できた感じです。
ということで、現在、gallop言語がサポートするソースファイルの文字コードは以下です。
ASCII
UTF-8BOM無
UTF-8BOM有
UTF-16 BE BOM無
UTF-16 BE BOM有
UTF-16 LE BOM無
UTF-16 LE BOM有
UTF-32 BE BOM無
UTF-32 BE BOM有
UTF-32 LE BOM無
UTF-32 LE BOM有
ソース文字列のUTF-32BEへの変換
ファイルなり標準入力なりから入力されたバイト配列。それをUTF-32BE BOM無へ変換する処理を追加しました。
トークン構造体の修正
字句解析の結果となるトークン情報を格納する構造体。そのメンバも当然修正対象です。
UTF-32文字列を保持するようにしました。
トークンの中に改行が含まれているかどうか判定するメソッドもありますが、UTF-32配列の入力ストリームを利用して判定するようにしました。
とりあえず、今回の記事はここまで。次回もUTF-32での字句解析について触れることになるかと思います。