0。インタープリターモード定義:
言語が与えられた場合、その文法の表現を定義し、表現を使用して言語の文を解釈する通訳を定義します。行動モードに属します。
インタープリターモードは、効率、パフォーマンス、メンテナンスなどの問題を引き起こす可能性があるため、実際のシステム開発ではほとんど使用されません。
インタープリターモードの一般的なクラス図を図に示します。
1。インタープリターモードの利点
インタープリターは、シンプルな構文分析ツールです。その最も顕著な利点は、その拡大です。構文ルールの変更は、対応する非末端式を変更することだけです。構文を拡張する場合は、非末端クラスを追加するだけです。
2。インタープリターモードの短所
通訳パターンはクラスの拡張を引き起こします。各構文は非末端式を生成する必要があります。構文ルールが比較的複雑な場合、多数のクラスファイルが生成される可能性があり、メンテナンスに多くの問題が発生します。
通訳パターンは再帰的な呼び出し方法を採用しています。各非末端表現は、それ自体に関連する式のみを気にします。各式は最終結果を知る必要があり、レイヤーごとに層のない層でなければなりません。プロセス指向の言語であろうとオブジェクト指向の言語であろうと、再帰は必要な条件下で使用され、非常に複雑なデバッグにつながります。それについて考えてみてください。構文エラーのトラブルシューティングを希望する場合は、最小の構文ユニットになるまで1つずつデバッグする必要がありますか?
効率の問題:インタープリターモードは多くのループと再帰を使用します。特に複雑で長い構文を解析するために使用される場合、効率は無視できない問題です。効率は耐えられません。
3.インタープリターモードのシナリオを使用します
繰り返しの問題は、インタープリターモードで使用できます。たとえば、複数のアプリケーションサーバーは毎日多数のログを生成し、ログファイルを分析および処理する必要があります。各サーバーのログ形式は異なるため、データ要素は同じです。通訳によると、ターミネーター式は同じですが、非ターミネーター式を策定する必要があります。この場合、問題はプログラムを通じて一度だけ解決できます。
単純な構文を説明する必要があるシナリオ:なぜ簡単なのですか?非末端表現を見てください。文法的なルールが多いほど、クラス間で複雑さと再帰呼び出しが必要です(例のスタックを参照)。これは一般的に複雑ではありません。それについて考えてください、複数のクラスを呼び出すときに問題のトラブルシューティングにどのような忍耐と自信が必要ですか。したがって、インタープリターモードは通常、SQL構文分析などの比較標準文字セットを解析するために使用されますが、この部分は徐々に特殊なツールに置き換えられます。一部の特別なビジネス環境では、インタープリターモデルも使用されます。私たちが今行った例はビジネス環境であり、現在モデル操作の多くの例があります。多くの商業機関は、分析のために大量のデータを提供することができます。
4.簡単な例
/ ***抽象的な解釈操作を宣言*/ publicインターフェイスinterpreter {public void relutte(コンテキストコンテキスト); //実際には、解釈されたデータオブジェクトを定義するための返されたタイプがあります} public class XMLSAXINTERPRETER INTERPRETER {@Override public void relutte(context context){system.out.println( "xml sax interpreter:" + context.getData()); }} public class XMLDOMINTERPRETER INTERPRETER {@OVERRIDE public void relutte(Context Context){System.out.Println( "XML DOM INTERPRETER:" + CONTTERT.GETDATA()); }} / ***通訳者の外にいくつかの情報が含まれています* / public classコンテキスト{private string data; public string getData(){return data; } public void setData(string data){this.data = data; }} public class test {public static void main(string [] args){context context = new Context(); Context.SetData( "XMLデータの一部"); new xmlsaxinterpreter()。解釈(コンテキスト); new xmldominterpreter()。解釈(コンテキスト); }}5。インタープリターモードに関するメモ
重要なモジュールでインタープリターモードを使用しないようにしてください。そうしないと、メンテナンスが大きな問題になります。このプロジェクトでは、Shell、Jruby、Groovyなどのスクリプト言語を使用して、インタープリターモードを置き換えて、Javaコンパイルされた言語の欠点を補うことができます。銀行の分析プロジェクトでの計算処理にJrubyを使用し、インタープリターモードでの4文字の操作を回避し、効率とパフォーマンスのあらゆる面でうまく機能します。