設計模式系列之 直譯器模式

2021-10-04 14:52:16 字數 1838 閱讀 7933

這種型別的設計模式屬於行為型模式,它他解決了方法的合理呼叫

直譯器模式用於對表示式(字串的解析),如espl 正規表示式等

可以通過自定義規則來使用直譯器建立一種語法簡易**(如espl)

直譯器需要的角色:

解析器類 : 用來制定規則按情況呼叫不同的表示式類完成解析

抽象表示式類 : 在此類生成結果

具體表示式 類: 通過不同的抽象表示式子類解析不同的符號並運算

終結符表示式類 : 將解析號的符號 進行賦值轉換

由於解析器是遞迴呼叫的 在棧底的符號需要轉換成數值(或語句)進行處理 終結符類 就擔任此功能

使用者將指定格式的表示式傳入解析器類即可

public

abstract

class

abstractexpression

//終結符表示式類 與具體表示式繼承同乙個介面 共享map

public

class

varexpression

extends

abstractexpression

//將符號與值進行轉換

@override

public

intinterpreter

(hashmap

var)

}

//加法減法具體實現類 (抽取了乙個父類)

public

class

symbolexpression

extends

abstractexpression

//他也是抽象的並不實現這個方法

@override

public

intinterpreter

(hashmap

var)

}//加法具體類

public

class

addexception

extends

symbolexpression

@override

public

intinterpreter

(hashmap

var)

}//減法具體類

public

class

subexpression

extends

symbolexpression

//由left和right決定他的具體實現是什麼(是varexpression還是******expression)

@override

public

intinterpreter

(hashmap

var)

}

//解析器類 有解析器制定規則來呼叫各種表示式類

public

class

calculator

}this

.expression = stack.

pop();

parse

(expstr);}

private

void

parse

(string expstr)

throws ioexception }}

}public

intrun()

}

//使用者類

public

class

user

}

設計模式系列 直譯器模式

直譯器模式,給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。在直譯器模式中由於語法是由很多類表示的,當語法規則更改時,只需修改相應的非終結符表示式即可 若擴充套件語法時,只需新增相應非終結符類即可。特徵 為了解釋一種語言,而為語言建立的直譯器。給出乙個...

PHP設計模式系列 直譯器模式

直譯器模式 用於分析乙個實體的關鍵元素,並且針對每個元素提供自己的解釋或相應動作。直譯器模式非常常用,比如php的模板引擎 就是非常常見的一種直譯器模。直譯器模式 用於分析乙個實體的關鍵元素,並且針對每個元素提供自己的解釋或相應動作 直譯器模式非常常用,比如php的模板引擎 就是非常常見的一種直譯器...

設計模式之直譯器模式

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