在編譯原理中,乙個算術表示式通過詞法分析器形成詞法單元,而後這些詞法單元再通過語法分析器構建語法分析樹,最終形成一顆抽象的語法分析樹。這裡的詞法分析器和語法分析器都可以看做是直譯器。
直譯器模式(interpreter pattern):是指給定乙個語言(表示式),定義它的文法的一種表示,並定義乙個直譯器,使用該直譯器來解釋語言中的句子(表示式)。
/**
* 抽象類表示式
*/public
abstract
class
expression
/**
* 變數的直譯器
*/public
class
varexpression
extends
expression
@override
public
intinterpreter
(hashmap
var)
}
/**
* 抽象運算符號解析器
*/public
class
symbolexpression
extends
expression
@override
public
intinterpreter
(hashmap
var)
}
/**
* 加法直譯器
*/public
class
addexpression
extends
symbolexpression
//處理相加
public
intinterpreter
(hashmap
var)
}
/**
* 減法直譯器
*/public
class
subexpression
extends
symbolexpression
//處理相減
public
intinterpreter
(hashmap
var)
}
/**
* 生成計算器
*/public
class
calculator
}this
.expression = stack.
pop();
}public
intrun
(hashmap
var)
}
public
class
client
// 獲得表示式
public
static string getexpstr()
throws ioexception
// 獲得值對映
當有乙個語言需要解釋執行,可將該語言中的句子表示為乙個抽象語法樹,就可以考慮使用直譯器模式,讓程式具有良好的擴充套件性。
應用場景:
(1) 應用可以將乙個需要解釋執行的語言中的句子表示為乙個抽象語法樹
(2) 一些重複出現的問題可以用一種簡單的語言來表達
(3) 乙個簡單語法需要解釋的場景
使用直譯器可能帶來的問題:直譯器模式會引起類膨脹、直譯器模式採用遞迴呼叫方法,將會導致除錯非常複雜、效率可能降低。
直譯器模式
include include include include include using namespace std 直譯器模式 給定一種語言,定義它的文法的一種表示,並定義乙個直譯器 該直譯器使用該表示來解釋語言中的句子 類似於程式語言或者指令碼 假設情景是乙個指令碼控制系統 wasd上下左右方...
直譯器模式
1 模式定義 直譯器模式 interpreter pattern 定義語言的文法,並且建立乙個直譯器來解釋該語言中的句子,這裡的 語言 意思是使用規定格式和語法的 它是一種類行為型模式。2 模式結構 直譯器模式包含如下角色 abstractexpression 抽象表示式 terminalexpre...
直譯器模式
給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。要解決的問題 如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這樣就可以構造乙個直譯器,該直譯器通過解釋這些句子來解決該問題。的好處 當有乙個語言需要解...