設計模式 直譯器模式(C 實現)

2021-09-24 18:48:49 字數 1807 閱讀 4204

直譯器模式(interpreter pattern)提供了評估語言的語法或表示式的方式,屬於行為型模式。

這種模式實現了乙個表示式介面,該介面解釋乙個特定的上下文。常被用在 sql 解析、符號處理引擎等。

1、當有乙個語言需要解釋執行 , 並且你可將該語言中的句子表示為乙個抽象語法樹時,可使用直譯器模式。而當存在以下情況時該模式效果最好:

1.1、該文法簡單。對於複雜的文法 , 文法的類層次變得龐大而無法管理。此時語法分析程式生

成器這樣的工具是更好的選擇。它們無需構建抽象語法樹即可解釋表示式 , 這樣可以節省空間而且還可能節省時間。

1.2、效率不是乙個關鍵問題。最高效的直譯器通常不是通過直接解釋語法分析樹實現的 , 而是首先將它們轉換成另一種形式。例如,正規表示式通常被轉換成狀態機。但即使在這種情況下, 轉換器仍可用直譯器模式實現, 該模式仍是有用的。

採用菜鳥教程的例子,這裡用c++實現

#include#includeusing namespace std;

//建立乙個表示式抽象介面類expression

class expression

; virtual ~expression() {};

virtual bool interpret(string context)=0;

};//建立實現了抽象介面expression的實體類terminalexpression

class terminalexpression :public expression

; bool interpret(string context);

private:

string data;

};terminalexpression::terminalexpression(string data)

bool terminalexpression::interpret(string context)

return false;

}//建立實現了抽象介面expression的實體類orexpression

class orexpression :public expression

; bool interpret(string context);

private:

expression *expr1;

expression *expr2;

};orexpression::orexpression(expression *texpr1, expression *texpr2)

bool orexpression::interpret(string context)

return false;

}//建立實現了抽象介面expression的實體類andexpression

class andexpression :public expression

; bool interpret(string context);

private:

expression *expr1;

expression *expr2;

};andexpression::andexpression(expression *texpr1, expression *texpr2)

bool andexpression::interpret(string context)

return false;

}int main()

在visual studio 2015上執行結果:

c 設計模式 直譯器模式

直譯器模式 interpreter 定義了乙個類體系,用於實現乙個小型語言的直譯器。它與組合模式很相似,而且常常利用組合模式來實現語法樹的構建。good 通常當乙個語言需要解釋執行,並且你可以將該語言中的句子表示成為乙個抽象的語法樹時,可以使用直譯器模式。res c 實現 include inclu...

設計模式 二十 直譯器模式 C

直譯器模式需要解決的是,如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這樣就可以構建乙個直譯器,該直譯器通過解釋這些句子來解決該問題。當有乙個語言需要解釋執行,並且你可將該語言中的句子表示為乙個抽象語法樹時,可使用直譯器模式。include in...

設計模式 直譯器模式

未來機器智慧型化已然成為趨勢,現在手機都能聽懂英語和普通話,那我大中華幾萬種方言的被智慧型化也許也是趨勢,我們的方言雖然和普通話相似,但是還是不一樣的。這可能需要乙個新的語法分析器來幫助我們。我們的直譯器模式就是描述了如何為簡單的語言定義乙個文法,如何在該語言中表示乙個句子,以及如何解釋這些句子。但...