言語仕様
– 文字列
– 整数123, 実数123.4
– グローバル変数、変数の値の参照
– 代入演算子(=)
– print関数でカンマ区切りで複数の引数指定
– 複数文は、セミコロンで区切る
– // から行末まではコメント
– 足し算、引き算
– 掛け算、割り算
– 符号
– グループ化の()対応
### source.3
a = (5-2) * 3;
print("a = (5-2) * 3 = ", a);
b = 2 * (3 - 5);
print("b = 2 * (3 - 5) = ", b);
### parser.js
function paren(){
var op;
while(op = accept(tokens, "(")){
var right = comma();
console.log();
op += expect(tokens,")");
return right;
}
return value();
}
printなどの関数がleftに来る場合は、opが()になるが、計算上の()の場合は、opはreturnされない。
その場合の()で囲む場合は、tokens.shift()の直前で処理をする
L ASTのleftとrightの処理順序が重要