Zen of Designモードのインタープリターモード

1.通訳モードの定義

インタープリターモードは、指定された文法に従って解析するスキームです。現在のプロジェクトではめったに使用されません。その定義は次のとおりです。
言語を指定して、その文法の表現を定義し、解釈するインタープリターを定義しますプロセッサはこの表現を使用して、言語の文を解釈します。

通訳パターン一般クラス:

(1)AbstractExpression-abstractインタープリター

特定の解釈タスクは各実装クラスによって完了し、特定のインタープリターはTerminalExpressionおよびNon-terminalExpressionによって完了します

(2)TerminalExpression-ターミナル式

文法の要素に関連付けられた解釈操作を実現するために、通常、インタープリターモードの端末式は1つだけですが、異なる端末に対応する複数のインスタンスがあります。具体的には、Var-Expressionクラスの例で、式の各端子はスタック上にVarExpressionオブジェクトを生成します。

(3)NonterminalExpression-非終端式

文法の各ルールは非終端式に対応します具体的には、例として、加算ルールと減算ルールがAddExpressionとSubExpressionの2つのクラスに対応します。非終端式は論理の複雑さに応じて増加し、原則として各文法規則は非終端式に対応します。

(4)コンテキスト環境の役割

この例に固有なのは、代わりにHash-Mapを使用することです。

第二に、通訳モードの適用

1.通訳モードの利点

インタプリタは単純な文法分析ツールです。最も明白な利点はそのスケーラビリティです。文法規則を変更するには、対応する非終端式を変更するだけで済みます。文法を拡張する場合は、非終端記号クラスを追加するだけです。

2.インタープリターモードの短所

(1)インタプリタモードはクラスを拡張します

文法ごとに非終端式を作成する必要があります文法規則が複雑になると、クラスファイルが大量に生成され、メンテナンスに手間がかかります。

(2)インタープリターモードは再帰呼び出しメソッドを使用します

各非終端式は、それ自体に関連する式のみを処理するため、レイヤーごとに分離する必要があります。プロセス指向の言語でもオブジェクト指向の言語でも、必要な条件下で再帰が使用され、デバッグにつながりますとても複雑です。考えてみてください。文法エラーのトラブルシューティングを行う場合は、最小の文法単位までブレークポイントを使用してデバッグしますか?

(3)効率の問題

インタプリタモードは多くのループと再帰を使用するため、効率は無視できない問題であり、特に複雑で長い文法を解析するために使用される場合、効率は耐えられません。

3.通訳モードで使用されるシーン

(1)問題が繰り返し発生すると、インタープリターモードを使用できる

たとえば、複数のアプリケーションサーバーが毎日大量のログを生成し、ログファイルを分析および処理する必要があります。各サーバーのログ形式は異なりますが、データ要素は同じであるため、インタープリターによると、端末の式はすべて同じです、しかし、非終端式を定式化する必要があります。この場合、問題は手順を通じて一度に解決できます。

(2)簡単な文法は説明が必要

なぜそれが簡単なのですか?
非終端式を見ると、文法規則が多いほど複雑さが増し、クラス間の再帰呼び出しが多くなります。複数のクラス間で電話をかける場合、トラブルシューティングに必要な忍耐と自信について考えてください。したがって、SQL構文分析などのより標準的な文字セットを解析するために、通例インタープリターモードが使用されますが、この部分は徐々に特別なツールに置き換えられています。

4.インタープリターモードに関する注意事項

重要なモジュールではインタープリターモードを使用しないようにしてください。そうしないと、メンテナンスが大きな問題になります。プロジェクトでは、シェル、JRuby、Groovy、およびその他のスクリプト言語を使用して、Javaコンパイル済み言語の不足を補うためにインタープリターモードを置き換えることができます。銀行の分析プロジェクトの計算処理にはJRubyを使用し、インタープリターモードの4つの操作を回避します。パフォーマンスとパフォーマンスはすべての面で優れています。

3.ベストプラクティス

インタープリターモードは、効率、パフォーマンス、メンテナンスなどの問題を引き起こすため、実際のシステム開発ではほとんど使用されません。一般に、一部のデータ分析ツールやレポートデザインツールなどの大規模および中規模のフレームワークプロジェクトで使用されます。科学計算ツールなど。「特定の種類の問題が頻繁に発生する」場合は、インタープリターモードを使用する準備をするときに、Expression4J、MESP、Jepなどのオープンソース分析ツールキットを検討できます。 、それは非常に使いやすく、効率も悪くありません。ほとんどの数学演算の実装に問題はありません。インタプリタを最初から作成する必要はありません。
コード例:https :
//github.com/developers-youcong/DesignPatternPractice/tree/master/Interpreter

おすすめ

転載: www.cnblogs.com/youcong/p/12724877.html