式を書く:中置、後置、前置
-
05-07-2019 - |
質問
私のタスクは、(変数、単項演算子、二項演算子を使用した)インフィックス表記法で式を読み取り、メモリに保存するアプリを(残念ながらCで)書いてから評価することです。また、正当性のチェックを実行する必要があります。
例:
3 *(A + B)-(-2-78)* 2 +(0 * A)
すべての値を取得したら、プログラムで計算する必要があります。
質問は: これを行うための最良の方法は何ですか?(最適化と検証付き)
ツリーのベースとして選択すべき表記法
式をツリーとして表現すべきですか?もしそうなら、私は簡単にそれを最適化することができます(0または他のsmthを返すノードをドロップするだけです)。
乾杯、
解決
上記のグレッグヒューギルによるコメントで提案されているリンクには、必要なすべての情報が含まれています。
独自の記述を主張する場合、
- a 再帰降下パーサーは、おそらく最も簡単な方法です。
- それ以外の場合は、Bisonのようなツールを使用できます(Cで作業しているため)。 このチュートリアルは、FlexとBison(またはLex)を操作する上で見た中で最高です/ Yacc)
" expression evaluator" Codeprojectで-トピックに関する記事がたくさんあります。
先ほどM4プログラムの式評価者に出会いました。コードを調べて、どのように機能するかを確認できます。 Google Codesearchのこのリンクは私が見たバージョンです。
他のヒント
ソリューションに課せられる要件に関する質問のヒント:
残念なことにCで
したがって、ここでのいくつかの提案は許されないかもしれません。それにもかかわらず、これは解決するのが非常に複雑な問題であり、これを行うためにCコードにリンクできる適切な既存のライブラリを見つけることをお勧めしますはるかに 。これにより、コードを機能させるために必要な時間と労力が削減され、継続的なメンテナンスの労力が削減されます。もちろん、ライセンスについて考える必要がありますが、適切な解析/評価ライブラリが「そこに」ない場合は驚かされます。これでうまくいく可能性があります。