Pascal-Sのコードリーディング

http://www.moorecad.com/standardpascal/pascals.html
にある、初学者向け簡略版PASCALであるところの
Pascal-Sのソースコードを読んでいるのだが、ぼちぼち明日あたりで一区切りにしたいので、いまわかっていることを簡単にまとめておく。日本語情報もほとんどないので、未来の誰かが検索してくれる可能性もあるし。

まず、そもそもPascalのソースをほとんど読んだことがなかった*1ので、Pascalの文法をちゃんと理解するのに苦心した。文法がきちんとまとまっているサイトをうまく見つけられなかったので、図書館からこの本

PASCAL (情報処理シリーズ)

PASCAL (情報処理シリーズ)

  • 作者: K.イェンゼン,N.ヴィルト,A.B.ミケル,J.F.マイナー,Kathleen Jensen,Niklaus Wirth,原田賢一
  • 出版社/メーカー: 培風館
  • 発売日: 1993/12/01
  • メディア: 単行本
  • 購入: 1人 クリック: 4回
  • この商品を含むブログを見る
を借りてきて、ときどき参照する。

そして、Pascalの文法がだいたいわかったところで、さらに気づいたのが、手続き型のこういう言語でグローバル変数を参照しまくるソースは読むのがしんどい!ということ。当たり前といえば当たり前なのだろうが、Javaが染みついた体には苦役である。

あと、変数名や関数名で略称を使っていて、いまいち何なのかよくわからず苦労した。後輩が書いてきたソースだったらたぶんシバキ倒すレベル。tabがtableでbegsysがbegin-symbolsとか、厳しい・・・

以下、読む人の参考のため、だいたいどの辺から読むとよいか列挙する。

  1. 1834行目からmainのプログラム。まず、ここから最後までざっと見る
  2. 1887行目から"insymbol"という関数が出てくる。こいつが、単語を読み取る関数で、378行目あたりに書いてある。ここはそんな難しくない。1906行目まで、プログラムの冒頭部分の解釈。
  3. 1907行目からenterという関数で前処理のようなことをして、1940行目のblockという関数に行く。このblockというのが実はソースの大半を占めるでかい関数で、たぶん文法解析からP-codeの出力までをやっていると思うのだが、これについては明日考える。
  4. 1941行目からは終わりの処理。1962行目のinterpretというのが要するにインタープリタで、P-codeとして配列に格納されている処理をcase文で分岐させ64パターンの処理を実行する、というもの。P-codeマシンなので、マシン語がどこかに出てくることはない。そりゃそうと言えばそうなのだが、そういうローレベルなところがどうなっているのか個人的には興味がある。

今日はそんなところで。

*1:中学生のころDelphiが欲しかったけど買えなかったのを思い出した