言語仕様
– 文字列
– 整数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の処理順序が重要