私は、算術式を解析するための拡張された操車場アルゴリズムを実装してきました。アルゴリズムの1つの側面は、、、Queueおよびを維持することStackです。
私の実装では、QueuecontainsExpressionsとOperators。Stack含むOperatorsとParenthesis。_
Expressions、、、ParenthesisおよびOperatorsそれらのいずれか2つが共有インターフェイスを持つことを保証する共通点はありません。
アプローチ:
私の現在の実装は、
Expressionで構成さOperatorれていINotParanthesisます。OperatorをParanthesis実装しINotExpressionます。Queue <INotParanthesis>次に、、、およびを宣言しStack <INotExpression>ます。私はこの実装が好きではありません-これらのインターフェースは、よりクリーンなアルゴリズムコードを目的としたハックのようです。また、インターフェースは、オブジェクトではなく、オブジェクトが何であるかを記述する必要があると思います。
一方、
<Object>そのようなコードの正確さを確認するのは難しい場合があるため、のコレクションも使用したくありません。これまでに思いついたのは、自分のコンテナ
NonParanthesisQueueとNonExpressionStackコンテナを実装することだけです。これには、オブジェクトがそれらのコンテナから引き出される際のより一貫性のある型チェックの利点と、より多くのコードの欠点があります。
私のアプローチに代わる合理的な方法はありますか?