2016-04-05 3 views
0

grammar.yファイルを使用してCパーサを生成するためにbisonとflexを使用しました。これは約10秒で正しくコンパイルされます。 C++出力を得るために私のバイソンとフレックス引数を変更しましたが、正しい結果が得られましたが、文法のCPP結果をコンパイルして出力するのに約1分かかりました。 誰でもこの問題を解決するためのアイデアはありますか? 文法ファイルは約6000行です。bisonとlex文法の作成が遅い

答えて

1

C++コードの複雑さによっては、C++コンパイルが糖蜜として遅くなることはよくあることです。 C++コンパイラには、多くの作業が含まれています。 Cコンパイラよりも多くの作業が必要です。私はいくつかのC++コードを持っており、数分かかると、RAMのギグに近い、噛み付く。

bisonが6000行ルールセットから吐き出すロボで生成されたLALR(1)パーサーでは、それはまったく予想外の結果ではありません。パーサーからの実行時パフォーマンスが重要でない場合は、ロボ生成文法ファイルの-O最適化オプションを削除することで、スピードアップできます。おそらく少し速くなるでしょう。

また、コンパイラを更新することもできます。最近のリリースでは、gccの性能が顕著に向上しています。古いgccを使用している場合は、改善が見られるかもしれません。

ようこそC++。

+0

私はC++プログラマーではないが、プリコンパイル済みヘッダーのMSVCの概念を理解している(プリコンパイラはすべてのクラスをアセンブルする)ので、文法ファイルの外側ですべての型/クラス定義を保持すれば、クラスアセンブリとしてのコンパイルは変更されませんか? –

+0

@PaulOgilvie:あらかじめコンパイルされたヘッダーは、Bison/Lexコンパイルとほとんど差がない可能性があります。 –

関連する問題