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

[表紙]2週間でできる! スクリプト言語の作り方

A5判/384ページ

定価(本体2,580円+税)

ISBN 978-4-7741-4974-5

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

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

こんな方におすすめ

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

著者の一言

「Java仮想マシン上でスクリプト言語 Stone を作る!」

「本書はコンパイラの入門書ですが,コンパイラだけに限らず,プログラム言語の各種の機能とそれを実現する方法の基本的な考え方を教えてくれる本です。ただし,従来の多くのコンパイラ入門書と大分違った新しい内容の本です」序文より(中田育男)

Java言語を使いスクリプト言語「Stone」を作ります。コンパイラ・言語処理系をゼロから作り上げる過程でさまざまな知識と技術を得られます。コンピュータプログラミングを根底から理解するために必ず通らなければならない14日間(と自習の5日間)は,きっとあなたの血肉になるでしょう。

この書籍に関連する記事があります!

スクリプト言語を作ったことがありますか?
Webのオンラインショップで,マウスポインタが何気なく商品写真に触れると,その商品の説明がマンガの吹き出しのように表示されることがありませんか。

本書のサンプル

本書の一部ページを,PDFで確認することができます。

本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。

サンプル画像1

サンプル画像2

目次

第Ⅰ部 基礎編

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年,朝倉書店)などがある。