しょぼいマシンで自作プログラミング言語を作ってみる (4)
ビルドについて
ビルドするならCmakeだね
CMakeでビルドするのが主流ですね。なので、踏襲しましょう。
CMakeLists.txtに書くべきこと
具体的なファイル内容の記述は省くとして、やるべきことだけ列挙しましょうか。
必要なライブラリ群のパスの設定
CLang、LLVM、GoogleTestに関連するコマンド、ライブラリ群、ヘッダファイルのインクルードパスを特定して、変数に設定しましょう。静的ライブラリのビルドの設定
src/lib配下のソースから静的ライブラリ一つを作るようなビルドの設定をしましょう。
src/直下のgallop.cppをコンパイルしないようにする理由。これはテスト時にエントリポイントであるmain関数が含まれるファイルをコンパイルするとテストが実行されないからです。
なので、src/lib配下にファイルを作って、main関数の実処理を委譲してしまいましょう。src/lib/main/main.cppとしました。実行可能ファイルのビルドの設定
src/直下にあるgallop.cppから実行可能ファイルを作るようなビルドの設定をしましょう。コンパイル後に静的ライブラリと結合します。
前述の通り、gallop.cppがやることは非常にシンプル。src/lib/main/main.cppのmain関数を呼び出すだけです。テスト用実行可能ファイルのビルドの設定
test/配下にあるファイルからテスト用実行可能ファイルを作るようなビルドの設定をしましょう。コンパイル後に上記2で作成した静的ライブラリと結合します。
なお、テスト用実行可能ファイルのビルドはcmake.shで設定した環境変数CMAKE_BUILD_TYPEがDebugの場合のみです。
さあ、準備が整ったので実装開始
まずは文字コードの検知から
まずは文字コードを検知することから始めましょう。
と言いたいところだが?
その前に、欲しいユーティリティメソッドがあります。
デバッグダンプを取りたい
文字コード判定をするにあたって、文字列の16進コードを出力するためのデバッグダンプ関数を作っておきます。
src/lib/hexdump.cppにでも書きましょうか。
テストはtest/lib/hexdump_test.cppに書きます。
関数は主に2種類。
整数型(符号の有無を問わず、8ビット、16ビット、32ビット、64ビット)が渡されたら、16進形式の文字列を返します。8ビットを1つの単位として、それぞれのバイトの間には空白を入れます。
文字列が渡されたら、16進形式の文字列を返します。8ビットを1つの単位として、それぞれのバイトの間には空白を入れます。8文字ごとに改行を入れます。
これができたら、いよいよ文字コード検知となります。