直譯器模式

2021-06-27 02:37:33 字數 1546 閱讀 5916

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 ...