直譯器模式 Interpreter

2021-10-17 03:30:50 字數 1415 閱讀 4538

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...