2005 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
2014 1 2 3 4 5 6 7 8 9 10 11 12
2015 1 2 3 4 5 6 7 8 9 10 11 12
2016 1 2 3 4 5 6 7 8 9 10 11 12
2017 1 2 3 4 5 6 7 8 9 10

ホーム

2013年02月18日

Photoshop 1.0.1のソースコードが公開されましたね。
自分もちょっと見させてもらったんですけど、Pascalで
書かれてて、ちょっとビックリしました。でも、思い返せば、
このころのMacの公式言語はPascalでしたね。MPW Pascal
ってヤツでしょうかね。アセンブラが大量に使われている
ところも時代を感じさせます。

この前紹介したsl3.cからの流れで、小さい言語処理系の
ことをいろいろと見て回ってるんですけど。そうなると
Pascalっていうのは必ず出てくるんですね。

Pascalのサブセットでいうと御大Wirth氏によるPascal-S
っていうのがあります:

http://www.friends-of-fpc.org/view/Pascal-S_Interpreter

どうもHTMLがぶっ壊れてるらしく、Free Pascal向けの
ソースは以下のところにあります:

http://www.friends-of-fpc.org/research/InterpreterProgramming/pascal-s/pascals.pas

文章を読むと、かなり計算資源が乏しい時代に授業で使う
ために作られたそうです。サブセットといってもかなり
フルに近い感じです。

そのあとしばらくして、Let's Build A Compilerという
ドキュメントを見つけました:

http://compilers.iecc.com/crenshaw/

今回の主眼はこのドキュメントの紹介にあります。

1988年に書きはじめられたもので、Pascalを使って
コンパイラを作ろうという内容です。1988年というとまだ
DOSのころですね。使われているPascalもTurbo Pascalの
ようです。

このチュートリアルの特徴は、LL(1)の再帰下降解析に話を
絞って、なおかつアセンブラを吐き出すコンパイラを作る
というところにあります。ターゲットはMC68000です。

PascalというとP-codeというバイトコードにコンパイル
して仮想機械で動かすという話もあるんですけど、著者は
アセンブラを吐き出すことにこだわります。

まだ読んでる途中なんですけど、非常に実践的に書かれて
います。最初は1文字のトークンを解析するところから
はじまります。たとえば:

aibece

というのは

a if b endif c end

というふうに解析します。そこから徐々にコンパイラを
育てていきます。

チュートリアルの中で語られる著者の問いかけが非常に
印象的です。「どうして巷のコンパイラのテキストは
あんなにも難しいのか?」と。「再帰下降でも十分実用的な
コンパイラが作れるじゃないか」と。

著者はコンピュータ科学の専門家ではありません。そうした
立場から、コンパイラのテキストが難しくなる理由をいくつか
あげています:

* メモリが少なく、何度もパスを通す必要があったから。
* 一般化にこだわっているから。
* 最適化に重点を置くから。
* 分割コンパイルなどをサポートするから。
* そして、教える側が難しいやり方に慣れてしまったから。

確かに、コンパイラのテキストは眠くなるのが多いです。
オートマトンとか出てきたり。

一方、このチュートリアルは実践的です。再帰下降解析
なのでわかりやすく、コンパイラを徐々に育ててもそう
難しくはなりません。

lex/yaccやANTLRといったツールを使うのもいいんですけど。
それはそれでツールのことを勉強する必要があります。
再帰下降ならコードをガリガリ書くだけです。

そんなわけで、コンパイラの本を読むと眠くなっちゃう
自分のような人間にはピッタリのチュートリアルといえます。

今となってはPascalは馴染みの薄い言語かもしれません。
でも、Cとそんなに大きな違いがあるわけでもありません。
読めば意外とわかるものです。

本家Permlink


Copyright © 1905 tko at jitu.org

バカが征く on Rails