[プログラミング言語の作り方] グループ化の()対応を実装

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