5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 目標の設定 .. 字句解析 .. 5.4.1 共通マクロの定義 .. 5.4.2 Token クラスの実装 .. 5.4.3 TokenStream クラスの実装 .. 5.4.4 字句解析の実装 .. 構文解析 .. 5.5.1 AST を考える .. 5.5.2 構文解析クラスの実装方針 .. 5.5.3 メソッドの実装 .. 意味解析 .. 5.6.1 意味解析の実装方法 .. 5.6.2 Parser クラスの修正 . 5.6.3 解析メソッドの修正 .. コード生成 .. 5.7.1 LLVM 旧の生成手順 . 5.7.2 コード生成クラスの実装方針 .. 5.7.3 メソッドの実装 . main の作成 . 5.8.1 入力ソースコード名と出力ソースコード名の受け取り . 5.8.2 各種初期化と作成した各クラスの呼び出し .. コンバイルと動作確認 .. 5.9.1 コンノヾイ丿レ .. 5.9.2 動作確認 mem2reg の適用と組み込み関数の導入 .. 5.10.1 mem2reg の適用 . 5.10.2 組み込み関数 . JIT をやってみる .. 5.11.1 LLVM での引 T.. 5.11.2 組み込み関数のリンクをプログラム中で行う .. Metadata を埋め込みたい場合 . 5.12.1 5.12.2 5.12.3 Metadata の生成 . setMetadata による Metadata の付与 . IRBuiIder のメソッドによる Metadata の付与 .. 目次 .. 59 .. 60 .. 60 … 61 .. 62 .. 65 … 69 .. 69 .. 80 .. 97 .. 97 .. 98 .. 99 .. 108 .. 108 .. 109 … 1 10 … 126 … 126 … 128 … 132 … 132 … 133 … 135 … 13 5 … 136 .. 140 .. 140 .. 146 … 152 ... 152 .. 154 … 1 56 Ⅵ 1
目次 3.4 ツールの種類と確認 .. 3.4.1 Clang .. 3.4.2 Ⅲ .. 3.4.3 llvm-as.. 3.4.4 Ⅱ ( .. 3.5 opt.. 3.5.1 llvm-link .. 3.5.2 llvm-objdump.. 3.5.3 llvm-config . 第 4 章 LLVM 旧 4.1 本章の概要と目的 .. 4.2 LLVM 旧の特徴 .. 4.3 LLVM 旧の構成 .. 4.4 LLVM の型と LLVM アセンブリの主な命令 .. 4.4.1 型分類 . 4.4.2 終端命 . 4.4.3 ニ項演算子 .. 4.4.4 ヒ、ツト演算子 . 4.4.5 合成演算子 . 4.4.6 メモリアクセス演算子 .. 4.4.7 型変換演算子 .. 4.4.8 その他の命令 .. 4.5 基本的な LLVM の中間表現 .. 4.6 条件文 .. 4.7 ループ文 .. 4.8 合成型へのアクセス .. 4.9 Metadata . 5 2 2 2 2 3 3 3 3 3 3 3 3 3 4 4 4 5 2 第 5 章フロントエンドの作成 5.1 本章の概要 .. 5.2 構文規則の定義… 6 6 5 5 5 Ⅵ
目次 目 はしがき . 第 1 章はじめに 1.1 本書の構成 .. 1.2 この本で何ができるようになるの ? .. 1.3 本書の目的とターゲット層 本書を読むにあたって必要となるもの . 1.4 1.4.1 必須なもの .. 1.4.2 あったほうがよいもの .. 1.5 本書内の記載について .. 第 2 章コンバイラと LLVM 2.1 一般的なコンバイラのお話 .. 2.2 LLVM プロジェクト .. LLVM のサブプロジェクト . 2.2.1 LLVM Core . 2.2.2 Clang. 2.2.3 2.2.4 LLDB . 2.2.5 compiler-rt.. 2.2.6 第 3 章環境構築 3.1 本章の概要と構成 . 3.2 環境 .. 3.3 インストール .. 3.3.1 ビルドに必要なパッケージのインストール .. 3.3.2 LLVM のピルドとインストール .. 3.3.3 ハスの設定 . 1 2 2 2 3 3 3 4 6 6 7 7 9 9 0 0 1 1 3 - 1 1 1 1 1 つな