全ての値をバイナリツリーにしてしまうと、switch文だけで文法をチェックできます。 エラーを発見したらthrowすることにすると、returnの値がtrueかfalseかとか 関係なくなるので、アクションとか追加できそうな雰囲気です。 ガードとか無いので、match構文なんていらない!ってところまではならないかもしれないですが、 いい感じなのではないかと。 これを使って、インタプリタや、スタックマシンへのコンパイラを作ってみると、アクションを どう追加したら良いかが分かってくると思います。 <script> function BTree(a,b,c) { this.l = a; this.op = b; this.r = c; } BTree.prototype.toString = function() { return "B("+this.l+","+this.op+","+this