1

代数式を解析できるプログラムを作ります。
例:
<?php echo cal ('5*5+2*2'); ?>
私のプログラムは、最初に 5 を 5 で、2 を 2 で乗算し、次にそれらを加算することを認識します。PHPではなく、自分で分析したい。

4

2 に答える 2

1

再帰下降パーサーを検討することをお勧めしますが、1980年代半ばに最後にこれを行って以来、状況は進んでいるようです。すべての背後にある理論を理解したいのであれば、ParsingExpressionGrammarが今の道のりのようです。

理論についてあまり気にすることができなかった場合、それは問題ありません。理論を実装すると、とにかく再帰下降パーサーを作成することになりますので、それを行うことができます:-)

于 2010-11-21T05:57:22.683 に答える
0

「中置」式を取得し、スタックを使用して、それを「前置」または「後置」式に変換して、演算の順序 (括弧、累乗、乗算または除算、加算または減算) を決定できます。

たとえば、式 ([5][ * ][5][ + ][2][ * ][2]) は、後置式 [5][5][ * ][2][2][ に変換されます。 * ][ + ]。この「接尾辞」式は、「5 と 5 を乗算し、2 と 2 を乗算して加算する」と読み取ることができ、演算の順序が保持されます。

「接頭辞/接尾辞」の考え方を考える別の方法は、複数のスタックの考え方です。数字の 5 に遭遇したら、それをプライマリ スタックにプッシュします。乗算シンボルに遭遇したら、セカンダリ スタックに格納します。次の 5 つに到達したら、それをプライマリ スタックにプッシュし、セカンダリ スタックからすべてのアイテムをポップして、プライマリ スタックにプッシュします。

演算子とオペランドを正しい順序で配置したら、スタックから項目をポップして評価するだけです。

大学のコンピューター サイエンス 102 コースでこの問題を見つけたのを覚えています。あなたは楽しみのためにこれをやっていますか、それとも単にそれを理解しようとしていますか?

于 2010-11-21T06:04:16.957 に答える