直譯器模式

2021-07-10 20:34:05 字數 1292 閱讀 5109

例項:

實現乙個簡單的**直譯器

uml類圖:

實現**:

//演奏內容

class playcontext

set }}

//表示式

abstract class expression

else

}//執行

public abstract void excute(string key, double value);

}//音符

class note : expression

console.write(" ", note);}}

//音階

class scale : expression

console.write(" ", scale);}}

//音速

class speed : expression

", speed);}}

客戶端**:

playcontext context = new playcontext();

//**-上海灘

console.writeline("上海灘:");

context.playtext = "t 500 o 2 e 0.5 g 0.5 a 3 e 0.5 g 0.5 d 3 e 0.5 g 0.5 a 0.5 o 3 c 1 o 2 a 0.5 g 1 c 0.5 e 0.5 d 3 ";

expression expression = null;

tryexpression.interpret(context);}}

catch (exception ex)

console.read();

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

不足:直譯器模式為文法中的每一條規則至少定義了乙個類,因此包含許多規則的文法可能難以管理和維護。直譯器模式在實際的系統開發中使用的很少,因為他會引起效率、效能以及維護等問題。

參考資料

-《大話設計模式》

直譯器模式

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

直譯器模式

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

直譯器模式

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