直譯器模式(interpretr)C 版本

2021-08-10 19:54:39 字數 2037 閱讀 1213

這是大話設計模式中的直譯器模式的c++版本

/*

* interpretr.cpp

* * created on: oct 26, 2017

* author: [email protected]

* 直譯器模式:給定乙個語言,定義它的文法的一種表示,

* 並定義乙個直譯器,這個直譯器用該表示

* 來解釋語言中的句子。

*/#include

#include

#include

#include

using

namespace

std;

//string 轉 int

int toint(const

std::string str)

/*按照關鍵字拆分字串

* 引數:1.源字串 2.拆分的關鍵字 3.存放拆分出來的字串

* 返回值:拆分後剩下的字串

* */

string splitex(string src,string separate_character,string &single_str)

else

return src.substr(lastposition);

// cout<<"src.substr(lastposition) = "<}

map getsound()

class playcontext

void settext(string text)

private:

string _text;

};//表示式類

class expression

virtual ~expression(){}

void interpret(playcontext* context)

else

}//抽象執行方法

virtual

void excute(string key,int value)=0;

};//音符類

class note:public expression

}cout

<" ";

}};class scale:public expression

cout

<" ";

}};class speed:public expression

};int main()

}//當字段為o時初始化為音節,其他化為音符

switch(option)

//執行操作

expression->interpret(context);

}cout

0;}

執行結果:

clh@clh

:~/testcode/設計模式$ g++ interpretr.cpp -std=c++11 -g

clh@clh

:~/testcode/設計模式$ ./a.out

上海灘中速 中音 356

3523

56 高音 1 中音 651

32

以下內容摘抄自設計模式。

直譯器模式的適用性:

1.該文法相對簡單,文法的類層次變得龐大而無法管理。此時語法分析程式這樣的工具是更好的選擇。它們無需構建抽象語法樹即可解釋表示式。可節省空間與時間。

2.效率不是乙個關鍵問題。

直譯器模式的優點:

1.易於改變和擴充套件文法 因為該模式使用類來表示文法規則,你可以使用繼承來改變或擴充套件該文法。已有的表示式可被增量式地改變,而新的表示式可以定義為舊的表示式的變體。

2.易於實現文法 定義抽象語法樹中各個節點的類的實現大體類似。這些類易於直接編寫,通常它們也可用乙個編譯器或語法分析生成器生成。

3.增加了新的解釋表示式的方式 直譯器模式使得實現新表示式「計算」變得更容易。

直譯器模式的缺點:

1.複雜的文法難以維護 直譯器模式為文法中的每一條規則至少定義了乙個類。因此包含許多規則的文法可能難以管理和維護。

直譯器模式

include include include include include using namespace std 直譯器模式 給定一種語言,定義它的文法的一種表示,並定義乙個直譯器 該直譯器使用該表示來解釋語言中的句子 類似於程式語言或者指令碼 假設情景是乙個指令碼控制系統 wasd上下左右方...

直譯器模式

1 模式定義 直譯器模式 interpreter pattern 定義語言的文法,並且建立乙個直譯器來解釋該語言中的句子,這裡的 語言 意思是使用規定格式和語法的 它是一種類行為型模式。2 模式結構 直譯器模式包含如下角色 abstractexpression 抽象表示式 terminalexpre...

直譯器模式

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