學習札記 設計模式之直譯器模式

2021-09-29 13:32:30 字數 1718 閱讀 4027

給定乙個語言,定義文法表示,並定義乙個直譯器去解釋定義的句子。

直譯器模式,主要有抽象的直譯器,終結表示式,非終結表示式和上下文。如果按輸入字串得到結果的計算器來理解,抽象的直譯器定義任務也就是得到的結果,終結表示式表達的是字元對應的數字的解釋操作,一般只有乙個,而非終結的表示式有點像各種各樣的符號計算順便返回結果。上下文環境則是定義包含解釋操作的其他環境。

這次我們看看**,我們先定義乙個抽象的直譯器,持有上下文引用。

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