給分析物件定義乙個語言,並定義該語言的文法表示,再設計乙個直譯器來解釋語言中的句子。該模式實現了文法表示式處理的介面,該介面解釋乙個特定的上下文。
優點擴充套件性好。由於在直譯器模式中使用類來表示語言的文法規則,因此可以通過繼承等機制來改變或擴充套件文法;
容易實現。在語法樹中的每個表示式節點類都是類似的,所以實現其文法較為容易。 缺點
執行效率較低。直譯器模式中通常使用大量的迴圈和遞迴呼叫,當要解釋的句子較複雜時,其執行速度很慢,且**的除錯過程也比較麻煩;
會引起類膨脹。直譯器模式中的每條規則至少需要定義乙個類,當包含的文法規則很多時,類的個數將急劇增加,導致系統難以管理與維護;
可應用的場景比較少。在軟體開發中,需要定義語言文法的應用例項非常少,所以這種模式很少被使用到。
了解知識
直譯器模式常用於對簡單語言的編譯或分析例項中,為了掌握好它的結構與實現,需要了解編譯原理中的「文法、句子、語法樹」等相關概念。
文法:用於描述語言的語法結構的形式規則;
句子:時語言的基本單位,是語言集中的乙個元素,它由終結符構成,能由「文法」推導出;
語法樹:是句子結構的一種樹形表示,它代表了句子的推到結果,它有利於理解句子語法結構的層次。 結構
主要角色:
類圖:
實現
// 抽象表示式
inte***ce
abstractexpression
// 終結符表示式類
class
terminalexpression
implements
abstractexpression
}// 非終結符表示式類
class
nonterminalexpression
implements
abstractexpression
}// 環境類
class
context
public
void
operation
(string info)
}
設計模式 行為型模式 直譯器模式
四則運算問題 通過直譯器模式來實現四則運算,如計算a b c的值,具體要求 1 先輸入表示式的形式,比如 a b c d e,要求表示式的字母不能重複 2 在分別輸入a b,c,d,e 的值 傳統方案解決四則運算問題分析 1 編寫乙個方法,接收表示式的形式,然後根據使用者輸入的數值進行解析,得到結果...
行為型模式 直譯器模式
定義乙個語言的文法,並且建立乙個直譯器來解釋該語言中的句子,這裡的 語言 是指使用規定格式和語法的 直譯器模式是一種類行為型模式。abstract class abstractexpression class terminalexpression extends abstractexpression...
Java設計模式 行為型模式之直譯器模式
一 前言 直譯器模式,就像我們生活場景中的翻譯一樣,它給定某種語言,並定義它的文法表示,直譯器通過這種標識來對語句進行翻譯。直譯器模式一般很少用於我們的 開發中,不到萬不得已我們是不會考慮 直譯器這種設計模式的。因為這種設計模式應用場景很少,而且需要的類也很多,很容易引起類膨脹,複雜的語法也使得其難...