河野真治 @ 琉球大学情報工学です。

In article <061216160110.M0173818@utogw.gssm.otsuka.tsukuba.ac.jp>, kuno@gssm.otsuka.tsukuba.ac.jp writes
> > 速度的に全然違うそうです。まぁ、テーブル読み込みのインタプリタ
> > と比べても仕方ないだろうとは思うんだけど。
>   速度が問題になるのかなあ。CPUがこんなに速くなってるのに。

lookup table だと分岐予測を不可能にするので、その意味でも
思ったより、影響します。

ただ、時間がかかるのは最適化の方なので、パーサが速くなっても
ねぇ。と普通は思うんだけど... 実は、そうではないです。

最近は、ソースが結構巨大。特に、

    include ファイルがでかい

つまり、ソース自体が小さくて、最適化もさしてかからないんだが、
無駄な include をがんがん読む。この部分の速さは重要です。
特に、

    C++

で顕著です。C++ でなくても、オブジェクト指向に書くと構造体と
クセサが増えるし。あと、inline ですね。使うか使わないかに
変わらず、include するしかないので。

gcc 4.0 は、preprocessor builtin でもあるので、その効果もあり
構文解析が速くなっているようです。

C++ のコンパイルの地獄の遅さに閉口している人は結構いると思う。

>   いや、初心者がささっと作れるようにするのにはLALRパーサジェネレー
> タがいいと私は思ってますよ。でもプロ(級)がメンテするGCCならツー
> ル入ってるより全部コードの方が楽なのかなと想像します。もう構文解
> 析なんてどうでもいいからツール捨てるために書き直したとか。

LALRかどうかは、BNFからはわかりませんよね。あと曖昧性を自明
に解決しないので、エラーが出たと言って騒ぐ初心者が後をたたな
いという致命的な欠点があります。無理して取ると、汚くなるし。

さらに、構造体の構文解析とかをyaccでやらせてみるとわかるんですが、
文法の自由度が高すぎて、つい、top down に書いて、わけがわからなく
なってしまう。再帰下降法の方が、bottom upに書くしかないので、
文法構築のとっかかりが良いようです。


---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科