直譯器模式(interpreter)是一種針對特定問題設計的一種解決方案。例如,匹配字串的時候,由於匹配條件非常靈活,使得通過**來實現非常不靈活。舉個例子,針對以下的匹配條件:
因此,需要一種通用的表示方法——正規表示式來進行匹配。正規表示式就是乙個字串,但要把正規表示式解析為語法樹,然後再匹配指定的字串,就需要乙個直譯器。
實現乙個完整的正規表示式的直譯器非常複雜,但是使用直譯器模式卻很簡單:
string s =
"+861012345678"
;system.out.
println
(s.matches
("^\\+\\d+$"))
;
類似的,當我們使用jdbc時,執行的sql語句雖然是字串,但最終需要資料庫伺服器的sql直譯器來把sql「翻譯」成資料庫伺服器能執行的**,這個執行引擎也非常複雜,但對於使用者來說,僅僅需要寫出sql字串即可。
直譯器模式通過抽象語法樹實現對使用者輸入的解釋執行。
直譯器模式的實現通常非常複雜,且一般只能解決一類特定問題。
行為型模式 直譯器
給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。直譯器模式 interpreter 是一種針對特定問題設計的一種解決方案。例如,匹配字串的時候,由於匹配條件非常靈活,使得通過 來實現非常不靈活。舉個例子,針對以下的匹配條件 因此,需要一種通用的表示方法...
行為型模式 直譯器模式
定義乙個語言的文法,並且建立乙個直譯器來解釋該語言中的句子,這裡的 語言 是指使用規定格式和語法的 直譯器模式是一種類行為型模式。abstract class abstractexpression class terminalexpression extends abstractexpression...
行為型模式 直譯器 interpreter
給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子.main.cc include include context.h include terminal expression.h include operator nonterminal expressio...