2016-04-10 10 views
0

ocamlを使用していくつかの算術式を処理しています。すべての算術式が "1 + 2 *(2-5)"のような文字列の場合無駄なカッコを排除するためにocamlを使用する方法を知りたい。OCamlを使用して算術式を簡略化する

たとえば、 "(2 *(1-8))"のような文字列を取得した場合、 "2 *(1-8)"を出力する必要があります。

ありがとうございました。

答えて

2

OCamlは単なるプログラミング言語であり、シンボリックな代数システムではありません。だから、あなたはOCamlで汎用言語と同様にこれを解決するでしょう。

完全な解決策は、表現をツリーに解析し、ツリーを歩いて出力を生成することです。このためには、あなたの文字列を字句解析し(おそらくStrモジュールを使用することができます)、トークンを解析する必要があります。あなた自身のパーサを簡単にコーディングすることができます。あるいは、実際には完全に実行して、ocamlyaccのようなパーサジェネレータを使用することができます。

算術式の再括弧で囲むという比較的単純な問題については、"shunting yard"アルゴリズムのバリアントを使用することができます。これは本質的に正規表現である括弧なし(RPN)形式を計算します。