大話設計模式之直譯器模式總結 java實現

2021-08-27 11:23:01 字數 1534 閱讀 5046

注:示例來自《大話設計模式》

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

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

下面我們來做個小型的**直譯器程式 **如下

演奏內容類

package test27;

//演奏內容

public

class playcontext

public

void

settext(string text)

}

表示式類

package test27;

//表示式

public

abstract

class expression

else

}//執行

public

abstract

void

excute(string key, double

value);

}

音符類

package test27;

//音符

public

class

note

extends

expression

system.out.println(note);

}}

音階類

package test27;

//音階

public

class

scale

extends

expression

system.out.println(scale);

}}

音速類

package test27;

//音速

public

class

speed

extends

expression

}

客戶端**

package test27;

public

class program

expression.interpret(context);}}

catch (exception e)

}}

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

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

缺點 直譯器模式為文法中的每一條規則至少定義了乙個類 因此包含許多規則的文法可能難以管理和維護 建議當文法非常複雜時 使用其他的技術如語法分析程式或編譯器生成器來處理

設計模式之直譯器模式

直譯器模式是一種類行為型模式,它主要是用來解釋特定語言的特定文法表示,雖然這個在實際生產中不常用到,但是我們學習一下還是有幫助的。定義 給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。使用場景 當有乙個語言需要解釋執行,並且你可將該語言中的句子表示為乙...

設計模式之直譯器模式

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

設計模式之直譯器模式

解析器模式是一種行為型設計模式。其思想是 給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,該直譯器使用該表示來解釋語言中的句子。解析器模式涉及4個角色 結構圖 於網路 下面提供乙個簡單例子。乙個簡易的控制台計算器,要求使用者輸入乙個表示式,如a b c,然後要求使用者輸入每個變數的具體值,如...