構文解析器のリファクタリング

開始記号 translation_unit を syntax_tree へ名前変更。

構文解析の非終端記号を整理。
jmptbl を Array ベースで書き換えて、さらに拡張項目を追加

従来は name と fpos のみを扱っていたが、
next_memcalc.bison.y に向けて、項目を刷新するために拡張項目を追加した。
拡張項目分は現状では使われてない。（組み込んであるが、使用はしていない状態）

内部的に、jmptbl の単位要素は以下のようになっている。

struct JmpTblUnit {
        char* name;
        size_t name_len;
        int64_t fpos;
        int64_t pcpos;
        struct Node* node;
};

fpos は、現状のプログラム上で動作させるための互換。
fpos は next_memcalc.bison.y では使用されない。そのタイミングで廃止予定。

name の他に、name_len が追加された。
これは name の一致確認を、より高速に行うための補助数値。

node には、ジャンプ先の Node のアドレスを保存し、
pcpos には、その Node の時点でのプログラムカウンター的な数値を保存しようと考えてる。

すなわち、next_memcalc.bison.y では、
任意の Node を calcnode() することで、ジャンプ等を実現しようと考えてる。
また、この方法によって同様にユーザー定義関数や、また、
変数への関数ポインターの代入等も実装できるはずだと考えている。

現状の name 検索は:
    name_len の一致確認 -> name の一致確認
で行っている。
将来的には
    ハッシュの一致確認 -> name_len の一致確認 -> name の一致確認
で行うように書き換えたい。

これを実装すれば、規模の大きいソースの場合でも、ラベル検索のオーバーヘッドを小さくできる。

しかしながら、ハッシュテーブル関数等を書くのが面倒なのと、
現状の規模の小さなソースしかsampleに無い状態では、あまり効果が実感できなさそうなので、
もっと問題が表面化した頃にハッシュ化したほうが感動が大きそうなので、これは後回しになるはず。