コロニーと規則
コロニー宣言
コロニー宣言 ::= "*" 識別子 改行+ リソース+ (マクロ|規則集合)+
| "%" 識別子 改行+ リソース+ (マクロ|規則集合)+
%
は組み込みコロニーの宣言に使用し、コロニー名に対応するデフォルト規則が、コード生成の段階で末尾に追加されるようになっています。
リソース
リソース ::= リテラル 改行
任意の型のリテラルを初期リソースとして書くことができます。
マクロ
1 サイクルの中で規則と同じように実行されるので、マクロは規則の一種と考えても構いません。
マクロはあくまでデバッグを支援するためのシステムです。
マクロ ::= "@debug" 識別子? 改行
| "@sleep" int型リテラル 改行
debug
マクロ
そのコロニーのリソースキューの状態をデバッグ出力します。
リソースキューに文字列 Hello
と 10
がある状態で以下が実行されると
@debug
以下が標準出力に出力されます。
["Hello", 10]
また、ダブルクォート省略型の文字列を引数に与えると
@debug test
先頭にその文字列が付加された状態で出力されます。
test ["Hello", 10]
sleep
マクロ
以下で 1000 ミリ秒 (= 1 秒) の間プログラムを停止させることができます。
@sleep 1000
規則
規則集合 ::= 先頭の規則 以降の規則*
先頭の規則 ::= "." 規則 改行
以降の規則 ::= "|" 規則 改行
規則 ::= カンマ区切りの連続条件式 出力先 カンマ区切りの出力式?
カンマ区切りの連続条件式 ::= 連続条件式 ("," 連続条件式)*
カンマ区切りの出力式 ::= 出力式 ("," 出力式)*
条件式
連続条件式 ::= 条件式
| "[" カンマ区切りの条件式 "]"
カンマ区切りの条件式 ::= 条件式 ("," 条件式)*
条件式 ::= 式
出力式
出力式 ::= 式