設計模式 行為型模式 直譯器模式

2021-10-19 11:21:23 字數 1093 閱讀 4238

給分析物件定義乙個語言,並定義該語言的文法表示,再設計乙個直譯器來解釋語言中的句子。該模式實現了文法表示式處理的介面,該介面解釋乙個特定的上下文。

優點擴充套件性好。由於在直譯器模式中使用類來表示語言的文法規則,因此可以通過繼承等機制來改變或擴充套件文法;

容易實現。在語法樹中的每個表示式節點類都是類似的,所以實現其文法較為容易。 缺點

執行效率較低。直譯器模式中通常使用大量的迴圈和遞迴呼叫,當要解釋的句子較複雜時,其執行速度很慢,且**的除錯過程也比較麻煩;

會引起類膨脹。直譯器模式中的每條規則至少需要定義乙個類,當包含的文法規則很多時,類的個數將急劇增加,導致系統難以管理與維護;

可應用的場景比較少。在軟體開發中,需要定義語言文法的應用例項非常少,所以這種模式很少被使用到。

了解知識

直譯器模式常用於對簡單語言的編譯或分析例項中,為了掌握好它的結構與實現,需要了解編譯原理中的「文法、句子、語法樹」等相關概念。

文法:用於描述語言的語法結構的形式規則;

句子:時語言的基本單位,是語言集中的乙個元素,它由終結符構成,能由「文法」推導出;

語法樹:是句子結構的一種樹形表示,它代表了句子的推到結果,它有利於理解句子語法結構的層次。 結構

主要角色:

類圖:

實現

// 抽象表示式

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設計模式 行為型模式之直譯器模式

一 前言 直譯器模式,就像我們生活場景中的翻譯一樣,它給定某種語言,並定義它的文法表示,直譯器通過這種標識來對語句進行翻譯。直譯器模式一般很少用於我們的 開發中,不到萬不得已我們是不會考慮 直譯器這種設計模式的。因為這種設計模式應用場景很少,而且需要的類也很多,很容易引起類膨脹,複雜的語法也使得其難...