つまりC++は変態的言語ということで
細かい補足
...
2. CYK法、Earley法、GLR法、などの "directional / deterministic" ではないけれど万能な手法、も知られています。ただ、遅いのでプログラミング言語に対してはあまり使われません。設計者が文法自分で決められるんだから、"directional / deterministic" に収まるように文法作ればいいじゃないみたいな。GLRは最近使われてるのかな。どうなんだろ。
こないだ2chでGLR法によるC++パーザの試みについて知ったんですが,どうなんでしょう.
- http://pc11.2ch.net/test/read.cgi/tech/1192201659/264- GCCについて part8
- http://citeseer.ist.psu.edu/440034.html Irwin and Churcher, A Generated Parser of C++ (2001)
- http://www.cosc.canterbury.ac.nz/research/RG/svg/ U. of Canterbury, Software Visualisation Group
やや古いと言えば古い.著者らはソースコードの評価指標の可視化を研究してて,既存の大規模な(〜250万行)C++ソースを分析するためにパーザが欲しかったんだが,GCCはとっ散らかり過ぎて可視化ツールへの転用が困難で,自分でGLR法により書いたらしい.酷く複雑なC++を仕様書の文法通りに*1扱えるのがGLR法でうれしかった点だとか.速度は「きちんと計ってないけど,まぁまぁ」とかよく分からん書き方.ISO/IEC 14882:1998準拠で,その後の進展(TR1やC++ 0xへのアップデート)は特にないし,オープンソースでもないようだ.
他にググって見つけたのはこれ:
- http://www.cs.berkeley.edu/~smcpeak/elkhound/ Elkhound: A GLR Parser Generator and Elsa: An Elkhound-based C++ Parser
- http://www.cubewano.org/oink/ 上のやつを一部に含むプロジェクト
こっちはBSDライセンスで公開されている.しかし自分でいじる時間など無い!