Luaに演算子を追加してみた
タイトル通りLuaに<<
,>>
演算子を追加しました。
書き換えた箇所
以下オペコード生成までがLuaバイトコード生成の部分。 演算子の追加のために仮想マシンを書き換えた。実際の挙動のためにイベント・タグメソッドを実装した。
ファイル | 意味 |
---|---|
llex.c, llex.h | 字句解析器 |
lparser.c, lparser.h | 構文解析器 |
lcode.c | オペコード生成 |
lvm.c | 仮想マシン |
ltm.c, ltm.h | イベント, タグメソッド |
Luaの構文解析器は手書き
Luaの構文解析器は手書きでパーサー生成器とか使っていない。 理由は以下が挙げらていた 。
- 生成されたコードがANSI C標準でない
- クオリティコントロールが難しい(解析時スタックオーバーフローなど)
- 再入可能ではない(解析中にパーサを呼び直すなど)
- ボトムアップ型パーサーは実行時コード生成にあまり向かない
ただ文法を記述してコードが生成されるのと違って管理コストが大きくシンタックスが成熟する前に手書きにするのはお勧めしないと書かれていた。
書いてみたのだが、自然に感じる記号を選ぶという事は難しいと思った。 また演算子を追加するとプリミティブ全てに対してサポート有無・内容を決める必要が出てくる。 この判断は表面的な文字列から逸脱してはならない。
気楽にテーブルだけで適用される<<
を追加したのだけど不自然だし扱い辛い事この上なかった。