代数式を解析できるプログラムを作ります。
例:
<?php
echo cal ('5*5+2*2');
?>
私のプログラムは、最初に 5 を 5 で、2 を 2 で乗算し、次にそれらを加算することを認識します。PHPではなく、自分で分析したい。
2 に答える
再帰下降パーサーを検討することをお勧めしますが、1980年代半ばに最後にこれを行って以来、状況は進んでいるようです。すべての背後にある理論を理解したいのであれば、ParsingExpressionGrammarが今の道のりのようです。
理論についてあまり気にすることができなかった場合、それは問題ありません。理論を実装すると、とにかく再帰下降パーサーを作成することになりますので、それを行うことができます:-)
「中置」式を取得し、スタックを使用して、それを「前置」または「後置」式に変換して、演算の順序 (括弧、累乗、乗算または除算、加算または減算) を決定できます。
たとえば、式 ([5][ * ][5][ + ][2][ * ][2]) は、後置式 [5][5][ * ][2][2][ に変換されます。 * ][ + ]。この「接尾辞」式は、「5 と 5 を乗算し、2 と 2 を乗算して加算する」と読み取ることができ、演算の順序が保持されます。
「接頭辞/接尾辞」の考え方を考える別の方法は、複数のスタックの考え方です。数字の 5 に遭遇したら、それをプライマリ スタックにプッシュします。乗算シンボルに遭遇したら、セカンダリ スタックに格納します。次の 5 つに到達したら、それをプライマリ スタックにプッシュし、セカンダリ スタックからすべてのアイテムをポップして、プライマリ スタックにプッシュします。
演算子とオペランドを正しい順序で配置したら、スタックから項目をポップして評価するだけです。
大学のコンピューター サイエンス 102 コースでこの問題を見つけたのを覚えています。あなたは楽しみのためにこれをやっていますか、それとも単にそれを理解しようとしていますか?