27 直譯器模式

2021-09-09 05:36:22 字數 624 閱讀 6780

給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。

如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這一就可以構建乙個直譯器,該直譯器通過解釋這些句子來解決該問題。

可以很容易的擴充套件和改變文法,因為該模式使用類來表示文法規則,從而可以通過繼承來改變和擴充套件語法。也比較容易實現文法,因為定義抽象語法樹中各個節點的類的實現大體類似,這些類都易於直接編寫。

直譯器模式為文法的每一條規則至少定義了乙個類,因此包含許多規則的文法可能難以管理和維護。

建議當文法過於複雜時,使用其它的技術如語法分析程式or編譯器生成器來處理。

給定乙個字串,代表一句歌詞,歌詞裡面有音符、音階、音速,這三者都是由兩個元素組成:key和value。比如:音符,需要根據key來進行演奏,value是什麼沒有影響;音階和音速則有value決定演奏什麼資訊;

**見《大話設計模式》~~p284

Chapter27 直譯器模式

直譯器模式 interpreter 給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示解釋語言中的句子。直譯器模式需要解決的是,如果乙個特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這樣就可以構建乙個直譯器,該直譯器通過解釋這些...

設計模式 27 其實你不懂老闆的心 直譯器模式

直譯器模式 給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋該語言中的句子。適用於 如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個實力表述為乙個簡單語言中的句子。這樣就可以構建乙個直譯器 該直譯器通過解釋這些句子來解決該問題。當有乙個語言需要解...

直譯器模式

include include include include include using namespace std 直譯器模式 給定一種語言,定義它的文法的一種表示,並定義乙個直譯器 該直譯器使用該表示來解釋語言中的句子 類似於程式語言或者指令碼 假設情景是乙個指令碼控制系統 wasd上下左右方...