給定乙個語言,定義文法表示,並定義乙個直譯器去解釋定義的句子。
直譯器模式,主要有抽象的直譯器,終結表示式,非終結表示式和上下文。如果按輸入字串得到結果的計算器來理解,抽象的直譯器定義任務也就是得到的結果,終結表示式表達的是字元對應的數字的解釋操作,一般只有乙個,而非終結的表示式有點像各種各樣的符號計算順便返回結果。上下文環境則是定義包含解釋操作的其他環境。這次我們看看**,我們先定義乙個抽象的直譯器,持有上下文引用。
public
abstract
class
abstractexpression
再來定義一組非終結表示式
/**
* 非終結表示式
* @author seven
* */
public
abstract
class
nonterminalexpression
extends
abstractexpression
}
/**
* 加法表示式
* @author seven
* */
public
class
plu***pression
extends
nonterminalexpression
@override
protected
double
interprete
(context context)
}
/**
* 減法表示式
* @author seven
* */
public
class
minu***pression
extends
nonterminalexpression
@override
protected
double
interprete
(context context)
}
我們再來定義乙個終結表示式
/** 終結表示式
* @author seven
* */
public
class
terminalexpression
extends
abstractexpression
@override
protected
double
interprete
(context context)
}
我們再來看看客戶端測試
public
class
client
}
以上就是乙個直譯器模式的**寫法,直譯器模式是為了解決一些文法的表達和轉換,採用的是一種遞迴呼叫,所以看上去不是很好理解,看下最後乙個的測試**。當我們有一些簡單的文法表示式可使用直譯器模式。
學習設計模式之直譯器模式
直譯器模式 定義乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。類結構圖 包含解釋之外的一些全域性資訊。abstractexpression 宣告乙個抽象的解釋操作,這個介面為抽象語法樹中所有的節點所共享。terminalexpression 終結符表示式...
設計模式之直譯器模式
直譯器模式是一種類行為型模式,它主要是用來解釋特定語言的特定文法表示,雖然這個在實際生產中不常用到,但是我們學習一下還是有幫助的。定義 給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。使用場景 當有乙個語言需要解釋執行,並且你可將該語言中的句子表示為乙...
設計模式之直譯器模式
直譯器模式 1.直譯器模式 給定乙個語言,定義它文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這樣就可以構建乙個直譯器,該直譯器通過解釋這些句子來解決該問題。比如 在字串中...