メインコンテンツまでスキップ

JSON 配列によるコード表現

 Calcium で "Hello, World." を出力するプログラムは、以下のようになります。

[
[
1, // ブロックレベル。Python におけるインデントの深さと同じ。
[], // 任意の要素。現在は使用しません。
"expr", // コマンド名。何を実行する文なのかを表します。この例は「式文」です。
["call", ["var", "print"], ["Hello, World."]] // コマンドの引数。後述します。
],
[1, [], "end"] // プログラムの最後には必ず "end" コマンドがあります。
]

上記と等価な Python コードは:

print("Hello, World.")

です。

ブロックレベル

次の Python コードでは、制御文によってインデントが1つ深くなっています。

if answer is 42:
pass

Calcium の JSON 配列中では、先頭の整数がその役割を果たします。

[1, [], "ifs"],
[2, [], "if", ["is", ["var", "answer"], ["num", "42"]]],
[3, [], "pass"],
[1, [], "end"]

JSON 中の空白文字は意味を持たないため、整数でインデントを表します。

コマンド

Calcium では1つ1つの文が「コマンド」として扱われます。例えば if, for, while といった命令文があります。基本的な Python の文をサポートしています。

Calcium における式は少し特殊です。配列の形を取り、その先頭要素が種類を表します。 変数は ["var", "answer"] となります。