直譯器模式:給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該標識來解釋語言中句子。
如果乙個特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個勢力表述為乙個簡單語言中的句子。這樣就可以構建乙個直譯器,該直譯器通過解釋這些句子來解決該問題。
當乙個語言需要解釋執行,並且你可將該語言中的句子表示為乙個抽象語法樹時,可使用直譯器模式。
用了直譯器模式,很容易改變和擴充套件文法,因為該模式使用類來標識文法規則,你可以使用繼承改變或擴充套件文法。也比較容易實現文法,應為定義抽象語法樹中各個節點的類的實現大體類似,這些類都容易編寫。直譯器也有不足,直譯器模式為文法中每條規則至少定義了乙個類,因此包含許多規則的文法可能難以管理。
publicclass
playcontext
}
publicabstract
class
expression
string playkey = playcontext.palytext.substring(0, 1
); playcontext.palytext = playcontext.palytext.substring(2
);
double playvalue = convert.todouble(playcontext.palytext.substring(0, playcontext.palytext.indexof("
")));
playcontext.palytext = playcontext.palytext.substring(playcontext.palytext.indexof("
")+1
); excute(playkey, playvalue);
}public
abstract
void excute(string key, double
value);
}
publicclass
speed:expression
", speed);
}}
publicclass
scale:expression
console.write("
", scale);
}}
publicclass
note:expression
console.write("
", note);
}}
classprogram
expression.interpret(playcontext);
}console.writeline();
}catch
(exception ex)
}}
設計模式之直譯器模式(Interpreter)
直譯器模式是我們暫時的最後一講,一般主要應用在oop開發中的編譯器的開發中,所以適用面比較窄。context類是乙個上下文環境類,plus和minus分別是用來計算的實現,如下 public inte ce expression public class plus implements expres...
直譯器模式
include include include include include using namespace std 直譯器模式 給定一種語言,定義它的文法的一種表示,並定義乙個直譯器 該直譯器使用該表示來解釋語言中的句子 類似於程式語言或者指令碼 假設情景是乙個指令碼控制系統 wasd上下左右方...
直譯器模式
1 模式定義 直譯器模式 interpreter pattern 定義語言的文法,並且建立乙個直譯器來解釋該語言中的句子,這裡的 語言 意思是使用規定格式和語法的 它是一種類行為型模式。2 模式結構 直譯器模式包含如下角色 abstractexpression 抽象表示式 terminalexpre...