直譯器是一種用的比較少的行為模式,其提供了一種解釋語言的語法,或者表示式的方式。該模式定義了乙個表示式的介面
簡單的語言需要解釋執行而且可以將該語言中的語句表示乙個抽象的語法樹
對於某個特定的領域出現的不斷重複的問題,可以轉換成一種語法規則下的語句
必須有乙個抽象介面
構建語法樹
優點:每個語法都要產生乙個非終結符表示式,語法規則比較複雜時,就可能產生大量的類檔案,為維護帶來了非常多的麻煩
缺點:直譯器模式由於使用了大量的迴圈和遞迴,效率是個不容忽視的問題,特別是用於解析複雜、冗長的語法時,效率是難以忍受的
這裡使用乙個解析計算表示式的例子
抽象介面
public
inte***ce
node
抽象介面的子類抽象類
public
abstract
class
symbolnode
implements
node
}
實現類
public
class
mulnode
extends
symbolnode
@override
public
intinterpret()
}
public
class
divnode
extends
symbolnode
@override
public
intinterpret()
}
終結符
public
class
valuenode
implements
node
@override
public
intinterpret()
}
計算方法
public
class
caculator
elseif(
"/".
equalsignorecase
(state[i]))
else
}return last.
interpret()
;}}
測試類
public
class
test
}
架構模式 直譯器模式
什麼是架構模式?根據維基百科中的定義 架構模式是乙個通用的 可重用的解決方案,用於在給定上下文中的軟體體系結構中經常出現的問題。架構模式與軟體設計模式類似,但具有更廣泛的範圍。一 模式定義 直譯器模式用於設計乙個解釋用專用語言編寫的程式的元件。它主要指定如何評估程式的行數,即以特定的語言編寫的句子或...
移動架構 命令模式
將請求封裝成乙個物件,從而讓使用者使用不同的請求吧客戶端引數化。請求排隊或者記錄請求日誌,以及支援可撤銷的操作 系統需要將請求呼叫者和請求接收者解耦,使得呼叫者和接收者不直接互動 系統需要在不同的時間指定請求 將請求排隊和執行請求 系統需要支援命令的撤銷 undo 操作和恢復 redo 操作 系統需...
直譯器模式
include include include include include using namespace std 直譯器模式 給定一種語言,定義它的文法的一種表示,並定義乙個直譯器 該直譯器使用該表示來解釋語言中的句子 類似於程式語言或者指令碼 假設情景是乙個指令碼控制系統 wasd上下左右方...