Software Design plus 2週間でできる! スクリプト言語の作り方

著者
千葉滋ちばしげる 著
定価
2,838円(本体2,580円+税10%)
発売日
2012.2.10
判型
A5
頁数
384ページ
ISBN
978-4-7741-4974-5

概要

コンピュータ言語の学習をする際,非常に効果的なのは,自分でOSやコンパイラ,プログラミング言語を作ることです。本書は,JavaScriptやPHP,Python,Rubyのようなスクリプト言語(Lightweight Language:軽量言語)を,自分の手で作り上げる方法を解説します。しかも14日間,すなわち14ステップで高度な概念を自然に理解できるようになります(正確には,自習時間もいれて20日です!ご注意!)。普通の本ならば,後回しにしてしまう重要な概念もわかりやすく解説,サンプルコードを読みながら,自分専用のプログラミング言語を作ってみませんか?

こんな方にオススメ

  • コンピュータ言語を作ってみたい方
  • 本格的なプログラミングを学んでみたい方

目次

第Ⅰ部 基礎編

1日目 さて何を作ろうか

  • 1.1 機械語とアセンブリ言語
  • 1.2 インタプリタとコンパイラ
  • 1.3 言語処理系を作る
  • 1.4 言語処理系の構成と本書の構成

2日目 プログラミング言語をデザインする

  • 2.1 必要最小限のプログラミング言語
  • 2.2 文末のセミコロン
  • 2.3 あいまいさのない言語

3日目 トークンに分割する

  • 3.1 Token オブジェクト
  • 3.2 正規表現によるトークンの定義
  • 3.3 java.util.regexで字句解析器を作る
  • 3.4 字句解析器を動かしてみる

4日目 プログラムを表すオブジェクト

  • 4.1 抽象構文木とは?
  • 4.2 節のクラスを設計する
  • 4.3 BNFを知る
  • 4.4 構文解析と抽象構文木
  • コラム第1話「プログラムはシンプルが一番」

5日目 構文解析器を作る

  • 5.1 Stone言語の文法
  • 5.2 パーサ・コンビネータを使う
  • 5.3 作り出される抽象構文木
  • 5.4 構文解析器をテストする
  • コラム第2話「本は3ヶ月で書く!?」

6日目 インタプリタによる実行

  • 6.1 evalメソッドと環境
  • 6.2 それぞれのevalメソッド
  • 6.3 GluonJについて
  • 6.4 プログラムの実行

7日目 関数を使えるようにする

  • 7.1 文法規則を拡張する
  • 7.2 スコープとイクステント
  • 7.3 関数を実行する
  • 7.4 フィボナッチ数を計算する
  • 7.5 クロージャに対応する
  • 7.6 クロージャの実装

8日目 Java言語とつなげる

  • 8.1 ネイティブ関数
  • 8.2 ネイティブ関数を使ったプログラムを書く

9日目 オブジェクト指向言語にする

  • 9.1 クラスとオブジェクトを扱うための構文を考える
  • 9.2 クラスのための文法規則
  • 9.3 evalメソッドを実装する
  • 9.4 クロージャを使ってオブジェクトを表現する
  • 9.5 クラスを含むプログラムを動かす

10日目 やはり配列も使いたい

  • 10.1 構文解析器を拡張する
  • 10.2 全てをリバイザで実装すると
  • コラム第3話「学科長のお仕事」

第II部 高速化編

11日目 変数の読み書きを高速化する

  • 11.1 シンプルな配列で環境を実現する
  • 11.2 大域変数のための環境
  • 11.3 事前に変数の値の格納場所を決める
  • 11.4 evalメソッドを修正し高速化を完成する

12日目 オブジェクトの操作を高速化する

  • 12.1 メモリ使用量を削減する
  • 12.2 格納場所を事前に調べて高速化できるか?
  • 12.3 lookupメソッドを定義する
  • 12.4 全体を組み立てて実行する
  • 12.5 インライン・キャッシュ

13日目 中間コード・インタプリタを作る

  • 13.1 中間コードと機械語
  • 13.2 Stone仮想機械
  • 13.3 スタックによる環境の実現
  • 13.4 レジスタの利用
  • 13.5 変数の値の参照
  • 13.6 if文とwhile文
  • 13.7 関数の定義と呼び出し
  • 13.8 仮想機械語への変換
  • 13.9 仮想機械を使った実行
  • コラム第4話「内職」

14日目 静的型付き言語にして高速化

  • 14.1 変数の型を指定する
  • 14.2 型検査でバグを見つける
  • 14.3 型検査つきでプログラムを実行する
  • 14.4 省略された型を型推論でおぎなう
  • 14.5 Javaバイトコードに変換する
  • 14.6 すべてをまとめて実行する
  • コラム第5話「ツイッター」

第III部 解説編(自習時間)

15日目 字句解析器を手で書く

  • 15.1 オートマトンに直す
  • 15.2 オートマトンのプログラム
  • 15.3 正規表現の限界

16日目 構文解析のやり方

  • 16.1 正規表現とBNF
  • 16.2 構文解析のアルゴリズム
  • 16.3 LL構文解析
  • 16.4 演算子順位法とボトムアップ構文解析
  • コラム第6話「武勇伝」

17日目 Parserライブラリの中身

  • 17.1 コンビネータ・パージング
  • 17.2 パーサ・コンビネータの中身

18日目 GluonJの使い方

  • 18.1 クラスパスの設定
  • 18.2 起動時の設定
  • 18.3 GluonJ言語
  • 18.4 機能のまとめ
  • コラム第7話「続・武勇伝」

19日目 抽象構文木とデザインパターン

  • 19.1 理想の設計
  • 19.2 Interpreterパターン
  • 19.3 Visitorパターン
  • 19.4 リフレクションの利用
  • 19.5 アスペクト指向言語

プロフィール

千葉滋ちばしげる

1968年生まれ。東京工業大学 大学院情報理工学研究科教授,兼,東京大学 大学院情報理工学系研究科教授。著書に『アスペクト指向入門―Java・オブジェクト指向からAspectJプログラミングへ』(2005年,小社),『やさしいJavaプログラミング―Great Ideas for Java Programming』(2004年,アスキー),『GUIライブラリの仕組み―ソフトウェア設計のケーススタディ』(2001年,朝倉書店)などがある。