今天我們來講一下直譯器模式。
什麼叫直譯器模式呢?直譯器模式,給定乙個語言,定義她的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言的句子,這樣就可以構建乙個直譯器,該直譯器通過/解釋這些句子來解決該問題。
下面我們來看一下她的結構**:
1//抽象表示式,宣告乙個抽象的解釋操作,這個介面為抽象語法樹中所有的節點所共享
2abstract
class
abstractexpression36
7//包含直譯器之外的一些全域性資訊
8public
class
context918
19set
2023}24
25public
string
output
2631
32set
3336}37
}3839//
終結符表示式,實現與文法中終結符相關聯的解釋操作
40//
實現抽象表示式中所要求的介面,主要是乙個方法,文法中每乙個終結符都有乙個
41//
具體中介表示式與之相對應。
42class
terminalexpression : abstractexpression
4348}49
50//
非終結符表示式,為文法中的非終結符實現解釋操作,對文法中每一條規則
51//
都需要乙個具體的非終結符表示式類。通過實現抽象表示式方法,實現解釋操作。
52//
解釋操作以遞迴方式呼叫上面所提到的每一條規則中各個符號的例項變數.
53class
nonterminalexpression:abstractexpression
5459 }
客戶端呼叫:
1public
static
void
main()215
console.readkey();
16 }
那麼,在什麼時候我們用直譯器模式呢?
通常,當有乙個語言需要解釋執行,並且你可以講該語言中的句子表示為乙個抽象語法樹時,可以使用直譯器模式。
直譯器模式有什麼優點嗎?
1、容易地蓋面和拓展文法,因為該模式使用類來表示文法規則,你可使用繼承來改變和擴充套件該文法。
2、較容易實現文法, 因為定義抽象語法樹中各個節點的類的實現大體類似,這些類都易於直接編寫。
直譯器模式
include include include include include using namespace std 直譯器模式 給定一種語言,定義它的文法的一種表示,並定義乙個直譯器 該直譯器使用該表示來解釋語言中的句子 類似於程式語言或者指令碼 假設情景是乙個指令碼控制系統 wasd上下左右方...
直譯器模式
1 模式定義 直譯器模式 interpreter pattern 定義語言的文法,並且建立乙個直譯器來解釋該語言中的句子,這裡的 語言 意思是使用規定格式和語法的 它是一種類行為型模式。2 模式結構 直譯器模式包含如下角色 abstractexpression 抽象表示式 terminalexpre...
直譯器模式
給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。要解決的問題 如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這樣就可以構造乙個直譯器,該直譯器通過解釋這些句子來解決該問題。的好處 當有乙個語言需要解...