実際には、あなたは上司の心を理解していない27.1
27.2通訳パターン
文法表現を定義し、インタプリタを定義する言語、与えられ、インタプリタ言語で文章を解釈する表現を使用して、
解決すべきInterpreterパターンは、あなたが、通訳をインタプリタを構築することができるように、それは、問題は言語で簡単な文章として表現され、各インスタンス価値があるかもしれ、問題の特定の種類の周波数が発生した場合に十分に高い、ということですこれらの文章を解釈することによって、問題を解決するものであり、例えば、多くの場合、文字列内の文字の一致する文字列を検索するか、当方指定のフォーマットは、通常、どのような手法を使用するかどうかを判断しますか?正規表現、
名前空間解释器模式 { クラスプログラム { 静的 ボイドメイン(文字列[]引数) { コンテキストコンテキスト = 新しいコンテキスト()。 IList <AbstractExpression>リスト= 新しいリスト<AbstractExpression> (); list.Add(新しいTerminalExpression()); list.Add(新しいNonterminalExpression()); list.Add(新しいTerminalExpression()); list.Add(新しいTerminalExpression()); foreachの(実験AbstractExpression でリスト) { exp.Interpret(コンテキスト); } Console.Read(); } } // 抽象表現 // 宣言抽象の動作を説明するが、このインターフェイスは、すべてのノードが共有する抽象構文木であります、 抽象 クラスAbstractExpression { パブリック 抽象 ボイド(コンテキスト・コンテキスト)を解釈 } // ターミネーター発現 //は文法関連で終端記号の動作を説明達成 // 主に、インターフェースに必要な抽象表現の実装解釈、方法である //は、各端末記号はそれに対応して特定の発現終端を有する文法 クラス TerminalExpression:AbstractExpressionを { 公共 オーバーライド 無効解釈(コンテキスト・コンテキスト) { Console.WriteLineを(「ターミナルインタプリタを」); } } // 非終端式 // 文法非終端記号の動作を説明するために実装し、 // 各対文法ルールR1、R2、特定のRnが、非終端表現クラスが必要 // 、抽象表現の方法の動作を説明する解釈実行することによって実現 // 動作を説明する再帰的に上記のR1、R2の代わりにコール、Rnは各シンボルインスタンス変数、 クラスNonterminalExpression:AbstractExpression { 公共 オーバーライド 無効解釈(コンテキストコンテキスト) { Console.WriteLineを(" 非エンドインタプリタ" ); } } //は通訳以外のグローバルな情報が含まれ たクラスコンテキスト { プライベート 文字列の入力を、 公共の 文字列の入力は { GET { 戻る}; INPUTを SET {INPUT = 値;} } プライベート 文字列の出力を、 公共の 文字列が出力は { GET { リターン出力;} SET {出力= 値;} } } }
メリット27.3インタプリタモード
通常、そこに実装言語を説明する必要がある、とあなたはインタプリタモードを使用して、抽象構文木に言語文を表すことができたときに、
Interpreterパターンそれが良い何ですか?インタプリタモードでは、それはあなたが簡単に文法を変更し、拡張することができることを意味し、このモードでは、文法規則を表現するためのクラスを使用しているため、あなたは文法を変更したり、拡大して継承を使用することができ、文法は、抽象構文木のために定義、実装が比較的容易であり、実質的に同様の各ノードのクラスを実装し、これらのクラスは、直接書き込むことが容易であり、
インタプリタパターンは文法は非常に複雑である場合には、例えば、パーサ又は他の技術を用いて、推奨され、また、各ルールが管理し、維持するために、少なくとも1つのクラスを定義し、したがって、困難である可能性が文法の多くのルールが含まれている文法モードを説明するには不十分です処理するためにコンパイラが生成し、
27.4音楽インタプリタ
音楽インタプリタ27.5を達成
27.6 Liaoshirushen