直譯器模式(interpreter)

2022-01-31 23:35:42 字數 1488 閱讀 3443

直譯器模式:給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該標識來解釋語言中句子。

如果乙個特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個勢力表述為乙個簡單語言中的句子。這樣就可以構建乙個直譯器,該直譯器通過解釋這些句子來解決該問題。

當乙個語言需要解釋執行,並且你可將該語言中的句子表示為乙個抽象語法樹時,可使用直譯器模式。

用了直譯器模式,很容易改變和擴充套件文法,因為該模式使用類來標識文法規則,你可以使用繼承改變或擴充套件文法。也比較容易實現文法,應為定義抽象語法樹中各個節點的類的實現大體類似,這些類都容易編寫。直譯器也有不足,直譯器模式為文法中每條規則至少定義了乙個類,因此包含許多規則的文法可能難以管理。

public

class

playcontext

}

public

abstract

class

expression

string playkey = playcontext.palytext.substring(0, 1

); playcontext.palytext = playcontext.palytext.substring(2

);

double playvalue = convert.todouble(playcontext.palytext.substring(0, playcontext.palytext.indexof("

")));

playcontext.palytext = playcontext.palytext.substring(playcontext.palytext.indexof("

")+1

); excute(playkey, playvalue);

}public

abstract

void excute(string key, double

value);

}

public

class

speed:expression

", speed);

}}

public

class

scale:expression

console.write("

", scale);

}}

public

class

note:expression

console.write("

", note);

}}

class

program

expression.interpret(playcontext);

}console.writeline();

}catch

(exception ex)

}}

設計模式之直譯器模式(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...