0

私はネットビーンズを使用していますが、まだ初心者です。メインクラスでは、文字列である必要がある式を入力する必要があり、変換された接尾辞も表示する必要があります。次に、Stack クラス、checkExpression クラス、Convert クラスの 3 つのクラスです。これらの 3 つのクラスに何を入れればよいかわかりません。私を助けてください。ありがとう :)

4

1 に答える 1

1

クラスは、再利用可能なさまざまなコンポーネントを分離するのに適しているため、クラスごとにそのようなコンポーネントを 1 つ持つ必要があります。私はこのようにします:

  • Stackパーサー スタックを表すクラスです。シンボルをスタックにプッシュしたり、取得したりするためのメソッドがあります。
  • ConvertStack文字列を変換するためのクラスを使用するクラスです。これには、大きなループで次のことを行うメソッドが含まれています (それらのいくつかは別のメソッドにあります)。

    • 入力文字列からトークンを取得する
    • トークンをスタックに追加します (Stackクラスによって提供されるメソッドを使用)
    • 最後から 2 番目のトークンが演算子 (または最後から 3 番目と最後のトークンが(and )) の場合、最後の 3 つのトークンを後置形式の文字列に置き換えます (たとえば、`[..., "1", "+" を置き換えます)。 , "2"] with [..., "1 2 +"])

    その後、スタックを返します。また、文字列を読み取って変換し、を使用して結果をチェックし、結果またはエラー メッセージを出力Convertするメソッドが含まれます。mainCheckExpression

  • CheckExpression結果のスタックに 1 つの要素 (結果) しかないかどうかをチェックすることによって、文字列が完全に変換されたかどうかをチェックするメソッドを含むクラスを作成します。

これは、純粋な左結合文法を想定しているため、たとえば、3 + 4 * 5は として解析されます(3 + 4) * 5(ただし、3 + (4 * 5)も として解析されます3 + (4 * 5))。

純粋な左連想パーサーとして実装しても問題ないのか、クラスを構造化するその方法が良いのか、先生に尋ねてみてはいかがでしょうか? あなたの最終成績の 50% は多いので、彼/彼女からより具体的な何かを得ることができるはずです。

于 2013-03-31T14:12:25.160 に答える