基本的な構文
行とコメント
一行は、;「セミコロン」で終わる物とし、
#「シャープ」または//「スラッシュ二つ」以降、改行まではコメントとして扱われます。
/* と */ に囲まれた部分は、ブロックコメントとして扱われます。
改行は、CR(0D)、LF(0A)、CRLF(0D,0A)の並びを自動的に判別します。(混在も可)
文字列
文字列は、"「ダブルクォーテーション」または'「シングルクォーテーション」でくくります。
'「シングルクォーテーション」でくくった場合には、内部の文字列は全てそのまま指定した事になりますが、
"「ダブルクォーテーション」でくくった場合には、\「エンマーク」に続く文字で、特別な文字の指定ができます。
文字列の格納形式は、後述の文字コード変換を行った後そのままの形式で置かれます。
終端記号(\0など)は付きません。
数値
整数 32ビットの値 -2147483648~2147483647の範囲で指定できます。
0で始まる数値は、8進数として扱われます。
0xで始まる数値は、16進数として扱われます。
小数 double
他未実装
真偽値
true(真)、false(偽)の二つが定義されています。
繰り返し
loop(繰り返し回数)が利用できます。
loop()は、関数としての実装なので、{}内はイベントハンドラとしての実行になります。
イベントハンドラ実行の際、イベント変数として$resultに繰り返し回数が入ります(0~)。
例: 0~9までの数値を表示
loop(10){
println($result);
}
条件付分岐
if (条件)
if (条件) else
if (条件) elseif (条件)
if (条件) elseif (条件) else の形式が利用できます。
elseifは別名として、elsif 、elif 、else ifも許されます。
ifとelseifは、条件が真の場合にブロック内を実行します。
elseは、上記条件のいずれにも一致しなかった場合に、ブロック内を実行します。
if文は関数としての実装ではないため、イベントハンドラとしての実行にはなりません。
例:
if (a == 1){
println("aは1です");
} elseif (a == 2){
println("aは2です");
} else if (a == 3){
println("aは3です");
} else {
println("aは1,2,3ではありません");
}
条件付分岐2
switch (式){
case 条件
文1
文2
break;
default
break;
}
式を評価し、case条件に一致した部分の文を実行します。
一致した条件がない場合には、default部分の文を実行します。(defaultが存在しない場合は何もしない)
defaultを除く(defaultは必ず最後に評価されるため)case文は、上から順に比較されていきます。
条件には、数値、文字列、変数のいずれかが指定できます。
switch文は関数としての実装ではないため、イベントハンドラとしての実行にはなりません。
例:
switch (a){
default:
println("aは1,2,3ではありません");
break;
case 1:
println("aは1です");
break;
case 2:
println("aは2です");
break;
case 3:
println("aは3です");
break;
}
条件付繰り返し
while (条件)
while文は関数としての実装ではないため、イベントハンドラとしての実行にはなりません。
条件が真の間、ブロック内を実行し続けます。
※以下の例ならば、loop()を利用した方が速いです。
例: 1を10回表示
a = 0;
while (a < 10){
println("1");
a = (a + 1);
}
条件付繰り返し2
do ~ while (条件)
do ~ while文は関数としての実装ではないため、イベントハンドラとしての実行にはなりません。
条件が真の間、ブロック内を実行し続けます。
例: 1を10回表示
a = 0;
do {
println("1");
a = (a + 1);
} while (a < 10);
条件付繰り返し3
do ~ until (条件)
do ~ until文は関数としての実装ではないため、イベントハンドラとしての実行にはなりません。
条件が真になるまで、ブロック内を実行し続けます。
例: 1を10回表示
a = 0;
do {
println("1");
a = (a + 1);
} until (a >= 10);
配列展開
foreach (変数)
与えられた変数が配列ならば、要素の回数分ブロック内を実行し続けます。
foreach()は、関数としての実装なので、{}内はイベントハンドラとしての実行になります。
イベントハンドラ実行の際、イベント変数として以下が設定されます。
$result['key'] 配列のインデックス、または連想配列の添字
$result['value'] 配列の要素
文字コード
mongoose内部で処理する文字コードは、全てUTF16で統一されます。
それ以外の文字コードに関しては、指定を三つの部分に分けて行います。
一つは、スクリプトソースの文字コード。
他に、入力時の文字コードと出力時の文字コードの指定が存在します。
デフォルトでは全て、実行時のOSで指定されているロケールに従います。
スクリプトソースの文字コードは、#@srccode に続く文字列で指定します。
複数指定は認められません。また、指定よりも前に判別が必要な文字列が存在した場合に、
意図した動作になりませんので、できるだけファイル先頭部に近い位置に書いてください。
例:
#!/usr/bin/mongoose
#@srccode Shift_JIS
出力文字コードは、#@outcode に続く文字列で指定できます。
出力文字コードのデフォルトは、Windows版が Shift-JIS。linux版では EUC-JPです。
#!/usr/bin/mongoose
#@outcode EUC-JP
入力文字コードは、#@incodeに続く文字列で指定できますが、 未実装
それとは別に実行の際、動的に設定することもできます。(設定の方法は各入出力系によります)
なお、現在指定可能な文字コードは、以下の通りです。
x-sjis, sjis, SHIFT-JIS, SHIFT_JIS
EUC-JP, EUC_JP, EUCJP
ISO-2022-JP
UTF-8, UTF8
UTF-16, UTF-16LE, UTF-16BE, UTF16, UTF16LE, UTF16BE
