設計模式之直譯器模式

2021-07-22 16:45:01 字數 2001 閱讀 3675

直譯器模式是一種類行為型模式,它主要是用來解釋特定語言的特定文法表示,雖然這個在實際生產中不常用到,但是我們學習一下還是有幫助的。

定義

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

使用場景

當有乙個語言需要解釋執行,並且你可將該語言中的句子表示為乙個抽象語法樹時,可使用直譯器模式。而當存在以下情況時該模式的效果最好:

1. 該文法簡單對於複雜的文法,文法的類層次變得龐大而無法管理。此時語法分析程式生成器這樣的工具是更好的選擇。它們無需構建抽象語法樹即可解釋表示式,這樣可以節省空間而且還可能節省時間。

2. 效率不是乙個關鍵問題,最高效的直譯器通常不是通過直接解釋語法分析樹實現的,而是首先將它們轉換成另外一種形式。例如,正規表示式通常被轉換成狀態機。但即使在這種情況下,轉換器仍可用直譯器模式實現,該模式仍是有用的。

結構

實現

我們用乙個加減乘除的例子來說明一下直譯器模式,abstractexpression介面設計及其實現

public

abstract

class

abstractexpression

public

class

terminalexpression

extends

abstractexpression

@override

public

intinterpret(context context)

}public

class

addextends

abstractexpression

@override

public

intinterpret(context context)

}public

class

subtract

extends

abstractexpression

@override

public

intinterpret(context context)

}public

class

multiply

extends

abstractexpression

@override

public

intinterpret(context context)

}public

class

division

extends

abstractexpression

@override

public

intinterpret(context context)

}

context的設計與實現

public

class

context

public

intlookupvalue(variable x)

}public

class

variable

extends

abstractexpression

}

我們來測試一下,計算(a*b)/(a-b+2)

public

class

client

}

直譯器模式提供了乙個簡單的方式來執行語法,而且容易修改或者擴充套件語法。一般系統中很多類使用相似的語法,可以使用乙個直譯器來代替為每乙個規則實現乙個直譯器。而且在直譯器中不同的規則是由不同的類來實現的,這樣使得新增乙個新的語法規則變得簡單。直譯器模式用來做各種各樣的直譯器,如正規表示式等的直譯器等等。

設計模式之直譯器模式

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

設計模式之直譯器模式

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

設計模式之直譯器模式

interpreter模式也叫直譯器模式,是行為模式之一,它是一種特殊的設計模式,它建立乙個直譯器,對於特定的計算機程式語言,用來解釋預先定義的文法。簡單地說,interpreter模式是一種簡單的語法直譯器構架。換一種解釋就是定義乙個語法,定義乙個直譯器,該直譯器處理該語法句子將某些複雜問題,表達...