問題をより単純なステップに分解することを検討してください。たとえば、文字列を評価するために、与えられた元の問題ステートメント
4 5.2 + 5.7 / 6.1 5 - -
一度にすべてを行うのは非常に困難です。問題を扱いやすい部分に分解することをお勧めします。1 つの分解は次のとおりです。
文字列をトークンに分割します。
トークンで動作するインタープリターを開発します。
この内訳は、この種の問題を解決するための標準的なアプローチです。PLAIのような本では、パート 2 のやり方が説明されています。パート 2 は難しくありません。数値のスタックを維持します。トークンを歩くと、次のようになります。
数字が表示されたら、それをスタックにプッシュします。
演算子が表示された場合は、スタックから 2 つの数値をポップし、演算子でそれらを操作して、結果をスタックにプッシュします。
このプロセスは、逆ポーランド記法 ( RPN ) 電卓の心臓部です。
最初の問題も、正規表現などのツールを使って遊ぶ気があればそれほど難しくありません。正規表現は、文字列のパターンを検出し、文字列を断片に分割できます。たとえば、次の例は、文字列をスペースの境界に沿って一連の単語に分割する方法を示しています。
var s = "hello this is a test";
var pieces = s.split(" ");
あなたの目的のために、文字列は常に適切な間隔で配置されるとは限らないため、数値と演算子の境界に沿って分割する必要があります。トークン化を希望どおりに機能させるには、正規表現パターンを試す必要があります。
あなたが解決しようとしている問題は、実際には初心者向けの資料ではありません。この問題は、コンピュータ サイエンスの 2 学期の学生、つまり、プログラムの設計方法や他の同様のカリキュラムを既に受講している学生に与えられるもので、その学生は自分の好きなプログラミング言語をすでに完全に知っているという前提があります。他の人から例をコピーして貼り付けずにプログラムを作成できない場合は、その問題を解決するためのバックグラウンドがまだありません。最初に簡単な問題を解いて、言語を指で理解してから、この問題に戻ってください。