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;

過去の互換性のためとはいえ、こんな文法残すか。