重讀設計模式 直譯器模式

2021-06-26 13:01:31 字數 1155 閱讀 4835

直譯器模式,應該是23個設計模式中最少人使用,最難的模式了。使用場景是如此的少,幾乎相當於設計了一門語言,絕大多數時候的系統都沒有必要做這種設計,但是在某些特定的場合下,直譯器模式還是很有必要的。下面就來具體看看使用最少的模式,最難的模式的直譯器模式。

定義:給定一種語言,並定義它文法的一種表示,同時定義乙個直譯器,使用該直譯器來解釋該表示在語言中的句子。

定**釋:任何一種語言都有自己的語言規範,定義語句應該怎樣寫,我們稱這種規範為文法,語句的編寫規範就是該語言的文法。編寫了相應的**,如何讓語言去理解使用者編寫的**語句,這就需要乙個直譯器,直譯器就是將使用者的**翻譯成機器可以理解的指令,使用了直譯器解釋**,就相應將不同的語言的**翻譯成了統一的機器**,交給cpu執行。這樣將的話,直譯器模式就是(1)定義一種規範(使用者輸入的字串)(2)定義乙個解釋該規範的函式,(3)使用該函式將使用者輸入的「**」解釋成機器**並執行。

使用場景:

(1)一些重**生的問題,比如 整數的四則運算。

(2)有乙個簡單的語法規則,比如正規表示式,比如sql語句。

直譯器模式就是處理,某些有簡單的語法規則,並且會重**生的問題的設計模式。 

類圖:

直譯器模式的結構

例子:各位數的加減法運算是乙個簡單的例子,個位數的加減運算可以是1+2+3+4,也可以是2+3-4-5+6,這是乙個簡單的語法規則並且重**生的問題。我們可以將它看成乙個表示式,那麼如何計算任何乙個表示式的結果呢。

設計:我們知道表示式運算是有一定的規則的,規則就是+-兩邊必須是數字,兩個數字之間也必須是+-,最後的數字之後沒有+-,最前的數字之前沒有+-。現在我們將+-成為操作符,把數字成為運算元,同時把操作符左右兩邊的運算元稱為左運算元和右運算元。這裡數字就是終結符表示式,運算子就是非終結符表示式。

實現:結果:

!!!hello world!!!

12總結:直譯器模式描述的是一種將自定義的一種規則的**解釋成相應的真實**的過程,在該例子中,本來的表示式是9+8-5,我們通過將其解釋成9+5是第乙個表示式,該表示式有三個元素,+是非終結表示式,9和8是總結表示式,9+8被解釋成了17,然後使用17作為乙個終結表示式和5這個終結表示式進行-操作,從而得到12這個結果。

設計模式 直譯器模式

未來機器智慧型化已然成為趨勢,現在手機都能聽懂英語和普通話,那我大中華幾萬種方言的被智慧型化也許也是趨勢,我們的方言雖然和普通話相似,但是還是不一樣的。這可能需要乙個新的語法分析器來幫助我們。我們的直譯器模式就是描述了如何為簡單的語言定義乙個文法,如何在該語言中表示乙個句子,以及如何解釋這些句子。但...

設計模式 直譯器模式

直譯器模式 給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這樣就可以構建乙個直譯器,該直譯器通過解釋這些句子來解決該問題。當有乙個語言需要解釋執行,並...

設計模式 直譯器模式

直譯器模式 interpreter pattern 提供了評估語言的語法或表示式的方式,它屬於行為型模式。這種模式實現了乙個表示式介面,該介面解釋乙個特定的上下文。這種模式被用在 sql 解析 符號處理引擎等。給定乙個語言,定義它的文法表示,並定義乙個直譯器,這個直譯器使用該標識來解釋語言中的句子。...