■文法解説
本解説は「超小型記号言語 eZ8版 Ver0.1」の文法解説です。

(0)概要
ﾏｲｸﾛBASICのｴﾃﾞｨﾀを使ってﾌﾟﾛｸﾞﾗﾑを作成するため、各行には行番号を付けます。
ただし、この行番号は実行時には無視されます。(注)以下の説明では行番号を省略して表記します
作成したﾌﾟﾛｸﾞﾗﾑは、ﾏｲｸﾛBASICのﾀﾞｲﾚｸﾄﾓｰﾄﾞから、超小型記号言語ｲﾝﾀﾌﾟﾘﾀ(5632番地)を起動する実行されます。
 >=5632
実行終了すると、ﾏｲｸﾛBASICのﾀﾞｲﾚｸﾄﾓｰﾄﾞに戻ります。

(1)数値、数式、数値出力
数値は2バイトの符号なし10進数(0～65535)のみで、数値の前には#記号を付けます。
数式は逆ポーランド記法のため
<数値1><数値2><演算子>
となります。たとえば
 #12 #34 + .
は、12と34がスタック(最大6段)にPUSHされた後、記号(+)で12+34を計算し、記号(.)により計算結果46を出力するプログラムです。
なお、実行途中に数値をキーボードから入力する場合は、数値の代わりに記号(?)を使います。

(2)データエリア
512ワードのデータエリアがあります。
<数値1><数値2>!
で、<数値1>を、<数値2>が示す番地のデータエリアに書込みます。
逆に、データエリアから数値を読出す場合は
<数値1>@
とします。これで<数値1>が示す番地のデータが、スタックにPUSHされます。

(3)変数、配列
本言語の一番の特徴ですが、アルファベット大文字(A～Z)を数値(0～25)と等価に扱います。この仕組みを利用することで
<数値><変数名>!
という書式で、変数に数値を代入することができます。たとえば、変数Cに数値1000を代入するには
 #1000 C !
としますが、実際には2番地に数値1000を書き込んでいて、次の式と等価です。
 #1000 #2 !
変数の値を読出する場合は
<変数名>@
とします。
変数Z(25番地)以後のデータエリア(26～511番地)は配列として使用可能です。たとえば、配列Z(10)に5を代入するには
 #5 Z #10 + !
とします。

(4)演算子
次の演算子が使用できます。
+-*/(算術演算子)、%(除余)、<>=(比較演算子)、&|^(論理演算子のAND、OR、NOT)
NOT以外は2項演算子で、スタックからPULLした2個のデータを演算し、結果をスタックに1個PUSHします。
比較演算は比較の結果が真なら65535、偽なら0の値を取ります。
NOTのみ単項演算子でスタックの増減はありません。

(5)条件分岐、ラベル
条件分岐命令は次の書式です。
<数値1><数値2><比較演算子><分岐先ラベル名>]
ラベル名はアルファベット小文字(a～z)で、比較結果が真(1)なら同じラベル名のラベルへジャンプし、偽(0)ならジャンプしません。
たとえば、N>100のときラベルaへジャンプさせるには
 #100 N@ > a]
とします。なお、分岐先のラベルは次の書式です。
[<ラベル名>
ｼﾞｬﾝﾌﾟ先のラベルであれば
 [a
となります。

(6)文字列出力、コメント
文字列出力は、文字列を記号(")で囲みます。改行する場合は後に記号(;)を付けます。
コメント文字列は、文字列を小括弧で囲みます。
文字コードによる1文字出力は、文字コードの後に記号(\)を付けます。

(7)実行終了
プログラム末で実行終了となります。
以上
