直譯器模式

2022-08-22 15:30:16 字數 1726 閱讀 6594

介紹:

直譯器模式(interpreter pattern)提供了評估語言的語法或表示式的方式,它屬於行為型模式。這種模式實現了乙個表示式介面,該介面解釋乙個特定的上下文。比如正規表示式。

定義:

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

結構圖:

**(**直譯器實現):

//

演奏內容

class

playcontext

//表示式類(abstractexpression)

class

expression

}//執行

void excute(const

string &strplaykey)=0;//

抽象執行方法,需要不同的文法類實現

}

//音符類(terminalexpression)非終結符表示式

class

terminalexpression :expression

}

//客戶端playcontext cplaycontext;//演奏樂譜expression* pexpression = null;//直譯器

cplaycontext.strtext = "12345";

pexpression = new terminalexpression();//具體直譯器

terminalexpression.interpret(cplaycontext);//開始演奏

使用時機:

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

當有乙個語言需要解釋執行,並且你可以將該語言中的句子表示為乙個抽象語法樹時,可使用直譯器模式。

優點:

1、可以很容易的改變和擴充套件文法,因為使用類來表示文法規則,你可以使用繼承來改變和擴充套件該文法。

2、比較容易實現文法,因為定義抽象語法樹中各個節點的類的實現大體類似,這些類都易於編寫。

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

直譯器模式

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

直譯器模式

1 模式定義 直譯器模式 interpreter pattern 定義語言的文法,並且建立乙個直譯器來解釋該語言中的句子,這裡的 語言 意思是使用規定格式和語法的 它是一種類行為型模式。2 模式結構 直譯器模式包含如下角色 abstractexpression 抽象表示式 terminalexpre...

直譯器模式

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