2011-06-17 9 views
2

私は、既に使用されている既存のPrologプログラムと同じ入力ファイルを使用するプログラムをC++で作成しています。C++での良い解析方法

ファイルは、これらのようになります。

expr1(t,[f,g]). 
expr1(q,[]). 
expr1(r,[e]). 

expr2(a). 
expr2(b). 
expr2(e). 

expr2(a,r). 
expr2(b,d). 
expr2(e,z). 

ようなファイルを解析するいくつかの方法は何ですか?私はBoost Spiritについて読んだことがあります..誰もこれについて考えていますか?あるいは、標準のC/C++ライブラリを使ってそれを行う方法ですか?アイデアは素晴らしいだろう。

ありがとうございます。

+0

「純粋なC++」を定義してください! BoostライブラリはC++で書かれています。彼らはあなたのためにすべての努力をしています。独自のパーサを一から書きたい場合は、それを行ってください! –

+0

私は自分の投稿を編集します:)。私のプログラムは最終的にBoostを持たないクラスター上で実行されるので、インストールするように要求しなければならないでしょう。したがって、C/C++の標準的なライブラリが望ましいでしょう。 – ale

+0

C++標準で定義されている実際のライブラリはかなり薄いです。http://en.wikipedia.org/wiki/C%2B%2B_Standard_Libraryクラスタに外部ライブラリがある場合は、追加で追加するといいでしょう。 – totowtwo

答えて

2

FlexBisonで何が問題になっていますか?これは、生成されたコードがライブラリとは独立しているという利点があります。 Webkit用のJavascriptパーサのようなものに設定ファイルを構文解析するのと同じくらい簡単なことに使用されます。あなたが使用できるProlog文法を見つけるかもしれません。

+0

解決策としてマークされています。私は、コンパイラの初めにFlex/Bisonを使用しただけで、この問題に使用することは考えていませんでした。ありがとうございました。 – ale

4

これは、手書きの再帰的降下パーサーにとって完璧な仕事のようです。余分な依存関係がなく、簡単に書くことができ、将来のメンテナーにとっては簡単です。

+2

* C++プログラミング言語*があれば、Stroustrupは第6章で再帰的降下パーサを書く方法を示します。計算機用ですが、すべてのステップがあります。 – John

1

私はブーストスピリットを提案していませんが、実際にはそれよりもはるかに複雑です。ブーストスピリットには何も問題はありません。それは本当に強力で、うまくやっていますが、多くの学習を必要とし、コンパイル時間を大幅に増やす可能性があります。

私は、まともなパーサを書いた手が良い選択肢であるとJörgenに同意しますが、文脈自由なパーサが必要なようには見えないので、正規表現パーサで十分かもしれません。その場合は、新しいC++ 0x標準で導入された新しいregexライブラリを見てみることをお勧めします。

関連する問題