1.意圖
給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。
2.適用性
當有乙個語言需要解釋執行,並且你可將該語言中的句子表示為乙個抽象語法樹時,可使用直譯器模式。而當存在以下情況時該模式效果最好:
3.結構
/*# 直譯器模式
直譯器模式定義一套語言文法,並設計該語言直譯器,使使用者能使用特定文法控制直譯器行為。
直譯器模式的意義在於,它分離多種複雜功能的實現,每個功能只需關注自身的解釋。
對於呼叫者不用關心內部的直譯器的工作,只需要用簡單的方式組合命令就可以。
*/import
("strconv"
"strings"
"testing"
)type node inte***ce
type valnode struct
func
(n *valnode)
interpret()
inttype addnode struct
func
(n *addnode)
interpret()
inttype minnode struct
func
(n *minnode)
interpret()
inttype parser struct
func
(p *parser)
parse
(exp string
)switch p.exp[p.index]}}
func
(p *parser)
newaddnode
() node
}func
(p *parser)
newminnode
() node
}func
(p *parser)
newvalnode
() node
}func
(p *parser)
result
() node
func
testinterpreter
(t *testing.t)
p.parse
("1 + 2 + 3 - 4 + 5 - 6 + 7"
) res := p.
result()
.interpret()
t.log
(res)
expect :=
8if res != expect
}
設計模式之直譯器模式(Interpreter)
直譯器模式是我們暫時的最後一講,一般主要應用在oop開發中的編譯器的開發中,所以適用面比較窄。context類是乙個上下文環境類,plus和minus分別是用來計算的實現,如下 public inte ce expression public class plus implements expres...
直譯器模式
include include include include include using namespace std 直譯器模式 給定一種語言,定義它的文法的一種表示,並定義乙個直譯器 該直譯器使用該表示來解釋語言中的句子 類似於程式語言或者指令碼 假設情景是乙個指令碼控制系統 wasd上下左右方...
直譯器模式
1 模式定義 直譯器模式 interpreter pattern 定義語言的文法,並且建立乙個直譯器來解釋該語言中的句子,這裡的 語言 意思是使用規定格式和語法的 它是一種類行為型模式。2 模式結構 直譯器模式包含如下角色 abstractexpression 抽象表示式 terminalexpre...