1、模式定義
直譯器模式(interpreter pattern) :定義語言的文法,並且建立乙個直譯器來解釋該語言中的句子,這裡的「語言」意思是使用規定格式和語法的**,它是一種類行為型模式。
2、模式結構
直譯器模式包含如下角色:
abstractexpression: 抽象表示式
terminalexpression: 終結符表示式
nonterminalexpression: 非終結符表示式
context: 環境類
client: 客戶類
3、模式分析
直譯器模式描述了如何為簡單的語言定義乙個文法,如何在該語言中表示乙個句子,以及如何解釋這些句子。
文法規則例項:
expression ::= value | symbol
symbol ::= expression '+' expression | expression '-' expression
value ::= an integer //乙個整數值
在文法規則定義中可以使用一些符號來表示不同的含義,如使用「|」表示或,使用「」表示組合,使用「*」表示出現0次或多次等,其中使用頻率最高的符號是表示或關係的「|」 。
抽象語法樹描述了如何構成乙個複雜的句子,通過對抽象語法樹的分析,可以識別出語言中的終結符和非終結符類。
在直譯器模式中,每一種終結符和非終結符都有乙個具體類與之對應,正因為使用類來表示每乙個語法規則,使得系統具有較好的擴充套件性和靈活性。
典型的抽象表示式類實現**:
public abstract class abstractexpression
典型的終結符表示式類實現**:
public class terminalexpression extends abstractexpression
}
典型的非終結符表示式類實現**:
public class nonterminalexpression extends abstractexpression
public void interpret(context ctx)
}
典型的環境類實現**:
public class context
public string lookup(string key)
}
4、模式優缺點
直譯器模式的優點
易於改變和擴充套件文法。
易於實現文法。
增加了新的解釋表示式的方式。
直譯器模式的缺點
對於複雜文法難以維護。
執行效率較低。
應用場景很有限
5、模式適用環境
在以下情況下可以使用直譯器模式:
可以將乙個需要解釋執行的語言中的句子表示為乙個抽象語法樹。
一些重複出現的問題可以用一種簡單的語言來進行表達。
文法較為簡單。
效率不是關鍵問題。
直譯器模式
include include include include include using namespace std 直譯器模式 給定一種語言,定義它的文法的一種表示,並定義乙個直譯器 該直譯器使用該表示來解釋語言中的句子 類似於程式語言或者指令碼 假設情景是乙個指令碼控制系統 wasd上下左右方...
直譯器模式
給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。要解決的問題 如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這樣就可以構造乙個直譯器,該直譯器通過解釋這些句子來解決該問題。的好處 當有乙個語言需要解...
直譯器模式
例項 實現乙個簡單的 直譯器 uml類圖 實現 演奏內容 class playcontext set 表示式 abstract class expression else 執行 public abstract void excute string key,double value 音符 class ...