cast_expression未満か以上かに関わらず、常に変数はアドレスを積むように設計変更

cast_exoression未満か以上かによって、
変数に関するスタックに積む値をアドレスか、即値か、にルール分けする設計だと問題があることに
気づいたので、設計変更した。
スタックには変数に関しては常にアドレスを積むように設計変更。

cast_expression以上に即値を積むアイディアだと、
unary_expression
    : & cast_expression
の場合において、
アドレス参照を(単純な仕組みだけで)機能させる方法が存在しないので、これを実装できない。
また、
primary_expression
    : ( expression )
というルールを上手く実現できない。
primary_expression は、終端記号直前の非週単記号で、ほとんど終端記号のような立場なのだが、
それはもちろん cast_expression よりもずっと下に位置する。すなわち
cast_expression
    : primary_expression
の上下関係となる。
すなわち、 ( expression ) は即値であってはマズいのである。
(cast_expression未満は間接参照アドレスで、以上は即値というルールが破綻してしまう)

ようするに、cast_expressionを境に、未満がアドレス・以上が即値なルール(設計)は、
根本的に間違えていた。

primary_expressin : ( expression ) を正しく機能させるには、
cast_expressionの上下どちら側かに関わらず、変数に関するは(スタックに積まれる値は)、
常に間接参照アドレスが積まれてる必要がある。

そして、再び「左辺値とは何か?」を再考察すると、
すなわち左辺値は実質的には、
「スタックに積まれてる値がアドレスか?、即値か?」という違いに過ぎないことに気づいた。
例として、
additive_expression
    : additive_expression + multiplevative_expresion
では、結果は即値としてスタックに積まれる。
即値ならば右辺値という単純なルールなので、だから結果は右辺値となる。
一方、
unary_expression
    : * cast_expression
であれば、これは結果はアドレスとしてスタックに積まれる。アドレスなので左辺値となる。
(int **a; の場合での **a; だとしても、これは結果はアドレスが積まれる。
 なぜなら、変数参照は、間接参照の次元が0だとしても、内部的には間接参照として読み書きされる。
 従って int a; であっても x = a; の a の値は、間接参照によって読み書きされる。
 すなわちスタックへはアドレスが積まれる。アドレスなので左辺値となる)

しかしながら、
スタックに積まれた数値だけを見ても、それがアドレスなのか、即値なのかは判断不可能である。
アドレスも即値も結局は数値でしかない。
そこで各ノードの状態に対応するスタックに対して、数値がアドレスか?即値か?に関する名札を、
なんらかの方法で持たせる必要がある。
そこで Var を使う。メンバー変数として Var->is_lvalue を追加した。
is_lvalue は ECに作成すべきか、Varに作成すべきかで迷ったが、
設計的には EC に作成した方が綺麗かもしれない。
なぜなら、いわばECが勝手に行う計算であるtranslate_ec()の際に、
ECの都合による、スタックへの一時保存の方法が、間接方式か、直接方式かは、
Var(変数スペック)側の知る由では無いだろうから。
それはECがECを処理する場合だけ必要とする情報なのだから、本来はECが持つべき(管理すべき)情報。

しかし、実際には Var->is_lvalue とした。
理由は単純で、EC木の中をVar(変数スペック)をリーフ側からルート側へと伝搬させる際に、
Varが全ての情報を持っていた方が、伝搬させる際のコピー作業の手間を簡単に済ませられるから。
また、EC木を解析してく段階で、左辺値・右辺値の状態は、必ず伝搬させる必要がある。
伝搬を忘れると、問題が生じる。(おそらく見つけにくいバグとして)
ならば、そのような伝搬忘れを防ぐためにも、
Var->is_lvalue として、Varへ含めてしまった方が作り易いだろう。と考えた為。

今回のコミットによって、
int型のポインター p へ、 int x のアドレスを代入して、それを *p による間接参照で参照する。
という基本的な部分が動作するようになった。
現状では以下のようなテストコードが、辛うじてコンパイル・動作できる程度の状態にまで至った:

float pad[2000];

int x = 1234;
x = 23456;
int *p;

p = &x;

asm("fixA" = *p);
asm("junkApi_putStringDec('\1', fixA, 11, 0);");