メニュー

インタプリタの作り方 -言語設計/開発の基本と2つの方式による実装-

発売日: 2023/9/26 ISBN: 9784295017875 全文検索: 非対応
★★★★★ ★★★★★ 0件
※本書はEPUB(固定レイアウト型)で作成されております。検索機能や文字列のコピーがご利用できません。

●言語を書く
本書はインタープリタのプログラミングを材料に、プログラミング言語の開発を学ぶものです。プログラミング言語を構成する「字句解析」「式評価」「制御フロー」「関数」などの要素、さらに本書では「クロージャ」「スーパークラス」「ガベージコレクション」などモダンな言語における定番の要素も取り扱います。
現代における言語の開発はプログラミングのテクニックだけでなく、様々なツールを駆使して見通しよく進めることが可能です。本書は筆者の豊富な開発経験をもとに、その基本的な技法や知識を学ぶことができます。
●2つの実装による解説
ここでは、Loxという本書用に考案されたモダンな仕様の言語を想定し、それをもとにインタプリタを実装します。インタプリタはJavaおよびC言語で作られた仮想マシン(VM)を使って動作するため、開発者は言語開発のコアとなる部分を集中的に実装することになります。まず、Javaを使ったLoxの実装(jlox)で基本的な部分を作り、その後はC言語を使ってパフォーマンスや高度な動作を考慮した実装(clox)に進みます。また、執筆者の豊富なプログラミング経験による解説は、ときに言語の歴史に触れ、ときにコンピュータサイエンスのエッセンスにも言い及ぶもので、読み応えがあります。
●言語開発は怖くない
本書は、言語の開発に興味がある方、プログラミングの知識や技術をさらに磨きたい方、コンピュータの処理系を詳しく知りたい方に最適な書籍です。言語開発は難易度の高さから敬遠されがちな技術分野ですが、本書ではそれらがじつはさまざまな要素の集合体であることを紹介し、シンプルな技術の積み重ねとして、楽しんで学べるものとなっています。

※この商品は固定レイアウトで作成されており、タブレットなど大きいディスプレイを備えた端末で読むことに適しています。また、文字列のハイライトや検索、辞書の参照、引用などの機能が使用できません。
購入前にお使いの端末で無料サンプルをお試しください。
目次プレビュー
  • クレジット・正誤情報
  • 謝辞
  • 目次
クレジット・正誤情報
謝辞
目次
  • 第1章 はじめに
    • 1.1 なぜこれを学ぶのか
    • 1.2 この本の構成
    • 1.3 第1のインタプリタ
    • 1.4 第2のインタプリタ
  • 第2章 領域の地図
    • 2.1 言語のパーツ
    • 2.2 ショートカットと別ルート
    • 2.3 コンパイラとインタプリタ
    • 2.4 我らの旅
  • 第3章 Lox言語
    • 3.1 Hello, Lox
    • 3.2 高いレベルの言語
    • 3.3 データの型
    • 3.4 式(Expressions)
    • 3.5 文(Statements)
    • 3.6 変数
    • 3.7 制御の流れ
    • 3.8 関数
    • 3.9 クラス
    • 3.10 標準ライブラリ
  • 第4章 字句解析(スキャニング)
    • 4.1 インタプリタのフレームワーク
    • 4.2 字句とトークン
    • 4.3 正規言語と正規表現
    • 4.4 Scannerクラス
    • 4.5 字句を認識する
    • 4.6 もっと長い字句
    • 4.7 予約語と識別子
  • 第5章 コードを表現する
    • 5.1 文脈自由文法
    • 5.2 構文木を実装する
    • 5.3 構文木を使う
    • 5.4 プリティプリンタ(に似たもの)
  • 第6章 式の構文を解析する
    • 6.1 多義性と構文解析のゲーム
    • 6.2 再帰下降の構文解析
    • 6.3 構文エラー
    • 6.4 パーサを接続する
  • 第7章 式を評価する
    • 7.1 値を表現する
    • 7.2 式を評価する
    • 7.3 ランタイムエラー
    • 7.4 インタプリタを接続する
  • 第8章 文と状態
    • 8.1 文(ステートメント)
    • 8.2 グローバル変数
    • 8.3 環境
    • 8.4 代入
    • 8.5 スコープ
  • 第9章 制御フロー
    • 9.1 チューリングマシンについて(簡単に)
    • 9.2 条件付きの実行
    • 9.3 論理演算子
    • 9.4 whileループ
    • 9.5 forループ
  • 第10章 関数
    • 10.1 関数コール
    • 10.2 ネイティブ関数
    • 10.3 関数宣言
    • 10.4 関数オブジェクト
    • 10.5 return文
    • 10.6 ローカル関数とクロージャ
  • 第11章 解決と束縛
    • 11.1 静的スコープ
    • 11.2 意味解析
    • 11.3 Resolverクラス
    • 11.4 解決した変数を解釈する
    • 11.5 解決エラー
  • 第12章 クラス
    • 12.1 OOPとクラス
    • 12.2 クラス宣言
    • 12.3 インスタンスを作る
    • 12.4 インスタンスのプロパティ
    • 12.5 クラスのメソッド
    • 12.6 this
    • 12.7 オブジェクトの構築と初期化
  • 第13章 継承
    • 13.1 スーパークラスとサブクラス
    • 13.2 メソッドを継承する
    • 13.3 スーパークラスのメソッドを呼び出す
    • 13.4 まとめ
  • 第14章 バイトコード
    • 14.1 バイトコード?
    • 14.2 手始めに
    • 14.3 命令のチャンク
    • 14.4 チャンクの逆アセンブル
    • 14.5 定数
    • 14.6 行情報
  • 第15章 仮想マシン
    • 15.1 命令を実行する機械
    • 15.2 値のスタックを操作する
    • 15.3 算術演算
  • 第16章 オンデマンドの字句解析
    • 16.1 インタプリタを始動する
    • 16.2 トークンを1個ずつ
    • 16.3 Loxの字句文法
    • 16.4 識別子とキーワード
  • 第17章 式をコンパイルする
    • 17.1 シングルパスのコンパイル
    • 17.2 トークンを解析する
    • 17.3 バイトコードを出力する
    • 17.4 前置式を解析する
    • 17.5 中置式を解析する
    • 17.6 プラットパーサ
    • 17.7 チャンクのダンプを取る
  • 第18章 値の型
    • 18.1 タグ付き共用体
    • 18.2 Loxの値とCの値
    • 18.3 動的に型付けされる数値
    • 18.4 2つの型を追加する
  • 第19章 文字列
    • 19.1 値とオブジェクト
    • 19.2 構造体継承
    • 19.3 文字列
    • 19.4 文字列演算
    • 19.5 オブジェクトを解放する
  • 第20章 ハッシュ表
    • 20.1 バケットの配列
    • 20.2 衝突処理法
    • 20.3 ハッシュ関数
    • 20.4 ハッシュ表の構築
    • 20.5 文字列のインターン化
  • 第21章 グローバル変数
    • 21.1 文(ステートメント)
    • 21.2 変数宣言
    • 21.3 変数を読む
    • 21.4 代入
  • 第22章 ローカル変数
    • 22.1 ローカル変数の表現
    • 22.2 ブロック文
    • 22.3 ローカル変数を宣言する
    • 22.4 ローカル変数を使う
  • 第23章 前後にジャンプする
    • 23.1 if文
    • 23.2 論理演算子
    • 23.3 while文
    • 23.4 for文
  • 第24章 コールと関数
    • 24.1 関数オブジェクト
    • 24.2 コンパイルして関数オブジェクトを作る
    • 24.3 コールフレーム
    • 24.4 関数宣言
    • 24.5 関数コール
    • 24.6 return文
    • 24.7 ネイティブ関数
  • 第25章 クロージャ
    • 25.1 クロージャオブジェクト
    • 25.2 上位値(upvalue)
    • 25.3 上位値オブジェクト
    • 25.4 上位値を閉じ込める
  • 第26章 ごみ集め
    • 26.1 到達可能性
    • 26.2 マーク&スイープによるごみ集め
    • 26.3 ルートにマークを付ける
    • 26.4 オブジェクト参照をトレースする
    • 26.5 使わないオブジェクトをスイープする
    • 26.6 ごみを、いつ集めるか
    • 26.7 GCのバグ
  • 第27章 クラスとインスタンス
    • 27.1 クラスオブジェクト
    • 27.2 クラス宣言
    • 27.3 クラスのインスタンス
    • 27.4 Get式とSet式
  • 第28章 メソッドと初期化子
    • 28.1 メソッド宣言
    • 28.2 メソッド参照
    • 28.3 this
    • 28.4 インスタンス初期化子
    • 28.5 呼び出しの最適化
  • 第29章 スーパークラス
    • 29.1 メソッドを継承する
    • 29.2 スーパークラスを格納する
    • 29.3 スーパーコール
    • 29.4 完成した仮想マシン
  • 第30章 最適化
    • 30.1 性能を計測する
    • 30.2 より高速なハッシュ表探針
    • 30.3 NaNボクシング
    • 30.4 その次は?
  • I 文法
  • II 式と文
  • I READMEの概要
  • II 主な参考文献
索引
奥付

まだレビューが投稿されていません