M Grammer で C++ をパース(改訂)
4/1 の日記からバージョンアップ。
- 関数の中身も結構パースできるように
- 変数定義に対応
- if, switch, while, for 等対応
- enum に対応
- 配列に対応
一応、再度リンク。
でも、比較演算の < がなぜかパースできないんですよねぇ・・・。> を含めて他の演算子はパースできるのに。
bool operator< とかは普通にパースできるし、template はまだ対応してないから template の <> と混乱することもないはずだし・・・。
なんでだろう?
おまけ
すげぇ言語だなぁ、C++ は。if 文の条件式中で変数定義できるとか初めて知った。
if(int x = 0); struct { int x, y; } const z[] = { { 0, 0 }, { 0, 1 } }; const long static int long volatile x; long volatile long const int register *const & p = &x;
過去の互換性のためとはいえ、こんな文法残すか。