2011-06-26 16 views
0

Boost Spirit Qiパーサーの文法はすばらしく、私はそれらを常に小さなもののために使います。しかし、別々の文法を作ってみたいという時があります。個別にコンパイルされたboost :: spirit :: qi文法を作成する方法はありますか?

これは、適切な文法を組み込み、1つのコンパイルで#1つのコンパイルを簡単に行うことができます。しかし、これにより、コンパイル時間が屋根を通過し始める。同様に他の欠点もある。

個別にコンパイルされた文法を作成する方法はありますか?言い換えれば、ヘッダーファイルに文法のインターフェースを定義し、テンプレートを実装し、別のコンパイル単位で特定のIteratorのインスタンス化を行い、完全なテンプレートを持たずに別のIteratorの文法を使用できるようにしますコンパイル時に定義を見ることができます。言い換えれば、文法を規則で間接的に使用できるようにしたいのですが、です。

このようなことは可能ですか?そうであれば、どうやってそれをやりますか?

答えて

1

これはSpiritに固有のものではなく、むしろC++ 101とは思えません。いくつかの文法を作成する必要がある場合は、作成する文法を定義する対応するヘッダーファイルを含める必要があります。あなたがしたいことは、文法コンストラクタのコンパイルを別々のコンパイル単位に分けることです。これがどのように行われるかは、スピリット計算の例(mini_cなど)を参照してください。これはあなたのコンパイル時間を守ります。

+0

ありがとうございました。 mini_cの例はこれを行う方法を実際に示していますが、実装が "header"ファイル(たとえば、mini_cc.hppの文の文法)にどのように残っているかによって捨てられます。実際には、それらのヘッダー内の文法コンストラクターは、単一の別個のコンパイル単位(たとえば、文の文法の場合はmini_cc.cpp)にのみ含まれ、インスタンス化されます。私はちょうど十分に近く見ていなかった。 – wjl

関連する問題