x64 UEFI 対応 OS 自作入門 ~実機で動作する OS を作ってみよう~
  • まえがき
  • 第1章:準備
  • 第2章:32 ビット整数式の x64 JIT コンパイラを試作する
    • 2.1 コンパイラを自作する理由
    • 2.2 全体の処理の流れ
    • 2.3 コーディングの方針
    • 2.4 字句解析
    • 2.5 構文解析
    • 2.6 意味解析
    • 2.7 中間コード(WebAssembly)生成
    • 2.8 x64 コード生成
    • 2.9 デバッグとテストコード
    • 2.10 改善を検討すべき点
    • 2.11 参考文献・資料
  • 第3章:クロス開発環境を作る(1)
  • 第4章:UEFI アプリを自作開発環境でビルドする
    • 4.1 UEFI
      • 4.1.1 初めての UEFI アプリ
      • 4.1.2 GPT と MBR
      • 4.1.3 UEFI セットアップ画面
      • 4.1.4 FreeType の利用
      • 4.1.5 UEFI セキュアブート
    • 4.2 まとめ
    • 4.3 参考文献・資料
  • 第5章:クロス開発環境を作る(2)
  • 第6章:シングルタスク OS をデバッグ可能にする
  • 第7章:対応するデバイスを増やす
  • 第8章:マルチタスク/マルチコア対応
  • 第9章:インストーラを作る
  • 第10章:開発環境を移植する
  • 第11章:TCP/IP・印刷機能を作る
  • 第12章:GitHub サポート機能を作る
  • 第13章:日本語入力機能を作る
  • 第14章:ハイパーバイザを作る
  • あとがき
  • 索引
GitBook提供
このページ内
  1. 第2章:32 ビット整数式の x64 JIT コンパイラを試作する

2.3 コーディングの方針

第2章で作成するコンパイラ全体の開発方針は、以下の通りです。

  • POSIX 環境のツールに依存しないことと、エラー処理などを柔軟に記述したい目的で、yacc や lex などの自動生成ツールは利用しない

  • 静的ライブラリとして作成することで、アプリに組み込んで動作可能にする

  • 記号表(TP_SYMBOL_TABLE 構造体)へのポインタを関数の引数として渡すことで、グローバル変数を可能な限り排除し、動作中に再初期化(リセット)を可能にする

  • 上記項目の関連で、メモリ解放は OS に任せるのではなく、コンパイラ自身で解放可能とする

  • エラー発生時には、可能な限り abort() や exit() せず、処理を継続可能にする

  • メッセージ出力は、可能な限り fprintf() などを直書きするのではなく、専用の関数とマクロを実装して呼び出すようにする。出力先や表示内容を制御するため

  • 入力するソースコードが UTF-8 であるか、バリデーション(妥当性確認)する。BOM や NUL 文字が含まれていたら、空白で置き換える。改行は内部で LF に統一する

  • 中間生成物(構文木と WebAssembly バイナリ表現)のバリデーションを行う

  • テスト設計の方針:

    • テスト駆動開発で語られているような、プログラムの動作を非常に具体的かつ詳細にテストすることはしない。今回は、計算結果を正常値と比較する

    • スナップショット(出力されるバイナリや log など)を取得可能にし、スナップショットを比較することで、ソースコードの修正が以前の正常な動作を変えていないことを確認する

前へ2.2 全体の処理の流れ次へ2.4 字句解析

最終更新 6 年前