スタック指向

逆ポーランド記法

すでに気づかれた方もいらっしゃると思いますが,Postscript は「逆ポーラン ド記法」で記述されます.何が逆なのかといえば,たとえば,fortranで "Hello World" という文字列を標準出力に表示するときは,

write(6,*) 'Hello World'
というように,「命令→その対象」といったような順番で記述されますが, Postscriptでは
100 100 moveto (Hello World) show
というように「対象→命令」といった順番で書かれます. このような記法の場合 スタックというものを使うと効率的に処理でき, Postscriptもスタックを使っています.

オペランドスタック

Postscriptではオペランドはオペランドスタックに積まれていきます. オペランドとは命令の対象物のことで,"3+9"の場合,"+"オペレータで "3"と"9"がオペランドです. ですから,"/Msaka 100 200"というようにオペランドを記述した 場合,オペランドスタックには上から順に,

200
100
/Msaka
といった具合に積み重ねられ,さらに"300 (takeshi)"というオペランドの記述 を追加すると,オペランドスタックは
(takeshi)
300
200
100
/Msaka
というような状態になります.そしてオペレータ(実行可能なオブジェクト) はこのスタックの上から順にオペランドを取得していきます. たとえば,このようなオペランドスタックの状態のとき,"show"オペレータを 実行すると,"show"はオペランドスタックの一番上の"(takeshi)"を引っ張り出して その文字列を紙に描くので,オペランドスタックは次のような状態になります.
300
200
100
/Msaka

では,実際にインタプリタで試してみましょう.


前坂たけし(msaka@ep.sci.hokudai.ac.jp)