2009-02-27 10 views
3

まず、問題点について説明し、次にライブラリの観点から見ていきます。パーサー:テンプレートファイル内の数式を解析する

私のアプリケーションでは、常に利用可能な一連の変数があります。たとえば、TOTAL_ITEMS、PRICE、CONTRACTS、ETC(約15件)などです。アプリケーションのクライアントは、これらの変数を使用して特定の計算を実行して表示したいと考えています。今まで、私は常に計算にそれらの計算を追加しています。これはバットの痛みです。テンプレートを作成することでより一般的なものにしたいと考えています。このテンプレートでは、アプリケーションが解析して計算する一連の数式を指定できます。画面はそれを表示するように、

total_cost = CONTRACTS*PRICE*TOTAL_ITEMSといくつかのメタ日:

total_cost = CONTRACTS*PRICE*TOTAL_ITEMS 

だから、テンプレートファイルに定義するユーザのためにそのような何かをしたい:ここでは

は1ケースでありますに。したがって、彼らは画面で数式を指定します。ファイルにはこのような数式が数多く含まれています。

今、私は2つのlibraiesで探しています: Spiritmatheval

誰もが参照、例、リンクだけでなく、このタスクのためのより良い何提言を行うだろうか?

質問が不明な場合は教えてください。私はそれをさらに明確にしようとします。 yaccbisonを使用して簡単なパーサを生成し、あなたのコードに統合するためにあまりにも難しいことではありませんように

おかげで、

サーシャ

+0

これは、Euphoriaで書かれたようですね...それはあなたのユースケースの問題ですか? – joshperry

+0

その問題は何ですか? –

+0

私は主な問題はユーフォリアが必要だと思います! :-) –

答えて

0

固定数の変数を使用している場合は、パーサーを呼び出すために少し余裕があるかもしれません。スピリットはクールですが、私はプロジェクトでそれを使いたいと思っています。

私はおそらく、文字列をトークン化(すべての変数はint型と仮定)名をキーあなたの変数のマップを作成します:

map<const char*,int*> vars; 
vars["CONTRACTS"] = &contracts; 
... 

次に、実際の計算を行うために、単純な接尾辞電卓機能を使用しています。

編集:

がMathEvalを見ると、正確に何をしたいやっているようです。変数を設定し、それらの変数を使用して数学関数を評価します。なぜ構文解析ツールのレベルでソリューションを作成したいのかはわかりません。 MathEvalが満たしていない要件がありますか?

+0

まあ、私は多くの異なる演算子( - + * /)を使用する必要があるように少し難しいかもしれません - 数式は30の定数を使用することができます、いくつかの繰り返しがあります。 –

+0

どちらの図書館も私の要求を満たしていますが、私が言うことができる限り、問題は拡張性と複雑性です。 –

0

が見えます。

+0

それでは、スピリットに行かないのはなぜですか?外部ツールへの依存度がより低くなります(yaccや友人よりもSpiritが少ないと考えています) – Anonymous

+0

精神とyaccの関係では、私は確かにブーストのために行くでしょう。しかし、私はまた、mathevalはあまり複雑ではない文法のために軽量で使いやすいことも理解しています。ありがとう –

0

私はmathevalについて知りませんが、boost :: spiritはそれをかなり効率よく行うことができます:thereを参照してください。

テンプレートのメタプログラミングに興味がある場合は、Boost::Protoを調べることができますが、になります。