Go言語でつくるインタプリタ

[cover photo]
  • 2018年06月 発行
  • 316ページ
  • ISBN978-4-87311-822-2
  • フォーマット Print PDF ePub mobi
  • 原書: Writing An Interpreter In Go

オライリー・ジャパンで書籍を購入:
定価3,672円

Ebook Storeで電子版を購入:
価格2,938円

本書は、Go言語でプログラミング言語のインタプリタを作りながら、プログラミング言語とそのインタプリタについて学ぶ書籍です。
順を追ってコードを示し、C言語風の構文を持つ言語「Monkeyプログラミング言語」のインタプリタを組み立てていきます。字句解析器、構文解析器、評価器を作りながら、ソースコードをトークン列に、トークン列を抽象構文木に変換し、その抽象構文木を評価し実行する方法を学びます。さらに、インタプリタに新しいデータ型を導入し、組み込み関数を追加して、言語を拡張していきます。付録では構文マクロシステムについても扱います。
本書では、Go言語標準のツールキット以外のサードパーティライブラリやフレームワークは使用せず、0行のコードからはじめて、完動するインタプリタができあがるところまでを体験します。その過程を通じて、プログラミング言語とインタプリタの仕組みを実践的に学ぶことができます。

関連書籍

Go言語によるWebアプリケーション開発
アンダースタンディング コンピュテーション
言語実装パターン
コンピュータシステムの理論と実装
入門 自然言語処理

訳者まえがき
はじめに

1章 字句解析
    1.1 字句解析
    1.2 トークンを定義する
    1.3 字句解析器(レキサー)
    1.4 トークン集合の拡充と字句解析器の拡張
    1.5 REPLのはじまり

2章 構文解析
    2.1 構文解析器(パーサー)
    2.2 パーサージェネレータじゃないの?
    2.3 Monkey言語のための構文解析器を書く
    2.4 構文解析器の第一歩:let文
    2.5 return文の構文解析
    2.6 式の構文解析
        2.6.1 Monkeyにおける式
        2.6.2 トップダウン演算子順位解析(Pratt構文解析)
        2.6.3 用語
        2.6.4 ASTの準備
        2.6.5 Pratt構文解析器の実装
        2.6.6 識別子
        2.6.7 整数リテラル
        2.6.8 前置演算子
        2.6.9 中置演算子
    2.7 Pratt構文解析の仕組み
    2.8 構文解析器の拡張
        2.8.1 真偽値リテラル
        2.8.2 グループ化された式
        2.8.3 if式
        2.8.4 関数リテラル
        2.8.5 呼び出し式
        2.8.6 TODOの削除
    2.9 読み込み―構文解析―表示―繰り返し

3章 評価
    3.1 シンボルに意味を与える
    3.2 評価の戦略
    3.3 Tree-Walkingインタプリタ
    3.4 オブジェクトを表現する
        3.4.1 オブジェクトシステムの基礎
        3.4.2 整数
        3.4.3 真偽値
        3.4.4 null
    3.5 式の評価
        3.5.1 整数リテラル
        3.5.2 REPLを完成させる
        3.5.3 真偽値リテラル
        3.5.4 null
        3.5.5 前置式
        3.5.6 中置式
    3.6 条件分岐
    3.7 return文
    3.8 中止! 中止! 間違い発見! あるいはエラー処理
    3.9 束縛と環境
    3.10 関数と関数呼び出し
    3.11 ゴミを片付けているのは誰か

4章 インタプリタの拡張
    4.1 データ型と関数
    4.2 文字列
        4.2.1 字句解析器における文字列の対応
        4.2.2 文字列の構文解析
        4.2.3 文字列の評価
        4.2.4 文字列結合
    4.3 組み込み関数
        4.3.1 len
    4.4 配列
        4.4.1 字句解析器で配列に対応する
        4.4.2 配列リテラルの構文解析
        4.4.3 添字演算子式の構文解析
        4.4.4 配列リテラルの評価
        4.4.5 添字演算子式の評価
        4.4.6 配列のための組み込み関数を追加する
        4.4.7 配列の試運転
    4.5 ハッシュ
        4.5.1 ハッシュリテラルの字句解析
        4.5.2 ハッシュリテラルの構文解析
        4.5.3 オブジェクトをハッシュ化する
        4.5.4 ハッシュリテラルを評価する
        4.5.5 ハッシュの添字式を評価する
    4.6 グランドフィナーレ

付録 マクロシステム
    A.1 マクロシステム
    A.2 Monkeyのためのマクロシステム
    A.3 クオート(quote)
    A.4 アンクオート(unquote)
        A.4.1 木を歩く
        A.4.2 unquote呼び出しの置換
    A.5 マクロ展開
        A.5.1 macroキーワード
        A.5.2 マクロリテラルの構文解析
        A.5.3 マクロを定義する
        A.5.4 マクロを展開する
        A.5.5 お馴染みのunlessマクロ
    A.6 REPLを拡張する
    A.7 マクロの夢をみよう

参考資料
索引

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]