AARASS-REGI拡張命令表現仕様
この記事ではAARASS-REGIの拡張命令表現の仕様を述べる。
1章. 概要
1.1 概要
AARASS-REGI拡張命令表現は、プログラマーにフレンドリーでないAARASS-REGIのコア命令表現を多少扱いやすくするための拡張である。
1.2 単純拡大性
AARASS-REGI拡張命令表現は、コア命令表現の単純な拡張になっていなければならない。即ちすべてのコア命令表現は拡張命令表現でもなくてはならない。
2章. 追加される概念
AARASS-REGI拡張命令表現を理解するためには、コア命令表現にはなかった概念が一部必要になる。
2.1 行
拡張命令表現では新たに「行」という概念が導入される。
行はBNFでは以下のように定義される。
<行>:=<命令>|<ラベル表現><命令>
直実装は複数のラベル表現を一つの行につけることを許してもよい。即ち
<行>:=<命令>|<ラベル表現><行>
などとなるように拡張してもよい。
なお、コア命令表現についての仕様の記事で述べた通り、この仕様は命令ファイルの書式やパーサーの仕様には言及しないため、実際に「行」をファイル上の「行」として定義することは義務ではない。同様にラベル表現と命令の間に区切り文字を用いるかどうか、用いるとしたら何を用いるかなども実装が定めてよい。
コア命令表現の仕様で、プログラムを命令の列としていたところ拡張命令表現としていたところ、拡張命令表現ではプログラムは行の列となる。命令も行の一種だからこれは単純拡大性に違反しないことに注意せよ。
2.2 ラベル
ラベルはコア命令表現でプログラムを書く際、「継続の表現」を書くためにプログラムの行数をいちいち数えねばならないという問題を解消するため、行にタグをつけるものである。
概念としてのラベルは「ラベル表現」と「ラベル値」という2つからなる。
ラベル表現とは行につけたタグの事である。
ラベル値とは「値の表現」や「継続の表現」として「タグをつけた行番号」を呼び出すことである。
実装はラベル表現として付けるタグの形式を自由に定めてよいし、「ラベル値」の表現としてタグそのものを用いることにしてもよいし、適当な接頭詞、接尾辞をつけたり外したりしたものを用いることにしてもよい。
3章.追加される表現
「値の表現」および「継続の表現」の両方に以下を追加する。
3.1 ラベル値
2.2で解説した通りである。
3.2 プログラムカウンタ値
値及び継続の表現にプログラムカウンタ(PC)の値を用いることが許される。仕様上命令実行中のPCは常に「命令のあった行番号+1」だから、この表現は静的にコンパイルできることに注意せよ。