|
> insert date" "time;↓
>
> と書いてみたらどうなるでしょうか? 今度は date や time の キーワードは引
> 用符で囲まれていませんから、 先程の様なことはないはずです。 が、今度は文
> 字列が挿入されるどころか 「マクロエラー」になるはず(*1)です。 それは
> 「insert コマンドは文字列の引数を 1つだけ取る」というルールがあるからで
> す(*2)。
これなんですが、マクロ文のコマンド (命令) のオペランドを解析するときには、
左から右へ、演算子の優先度を考慮しながら、評価されて行きます。
トークンに演算子を忘れるとそのトークンは無視される仕様みたいです。
if ( 1 == 0 1 == 1 ){
message date;
}
endmacro;
上の例からもわかるように 1 == 0 を評価して、それを無視して次のトークンと
演算子を評価してしまいます。1 == 1 は true です。
#i = 1 2 3;
#j = 1 2 + 3;
#k = 1 + 2 3;
message str(#i) + ", " + str(#j) + ", " + str(#k);
endmacro;
これで動きが見えてきます。
#k では、1 を評価して + を評価して 2 を評価しますが、
次に演算子が無いので、 2 を無視して、3 を評価します。
ここで二項演算子は、1 + 3 = 4 となります。
|
|