解釋器模式/Interpret

解釋器模式/Interpret

意圖/適用場景:

給定一個語言,定義它的文法的一種表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。
解釋器模式並不是一種應用很廣泛的模式,因爲它特別適合用來解釋語言,而在一般的軟件系統中,內嵌一種語方的成本顯然太高。但這種模式的出發點值得借鑑:如果一種特定類型的問題發生的頻率足夠高, 那麼可能就值得將該問題的各個實例表述爲一個簡單語言中的句子。這樣就可以構建一個解釋器, 該解釋器通過解釋這些句子來解決該問題。

UML:

要點:

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

  1. 該語言文法簡單。對於複雜的文法, 文法的類層次變得龐大而無法管理。此時語法分析程序生成器這樣的工具是更好的選擇。它們無需構建抽象語法樹即可解釋表達式, 這樣可以節省空間而且還可能節省時間。
  2. 效率不是一個關鍵問題。最高效的解釋器通常不是通過直接解釋語法分析樹實現的, 而是首先將它們轉換成另一種形式。例如,正則表達式通常被轉換成狀態機。但即使在這種情況下, 轉換器仍可用解釋器模式實現, 該模式仍是有用的。

應用實例:

正則表達式引擎是一個很好的例子。
搜索匹配一個模式的字符串是一個常見問題。正則表達式是描述字符串模式的一種標準語言。與其爲每一個的模式都構造一個特定的算法,不如使用一種通用的搜索算法來解釋執行一個正則表達式,該正則表達式定義了待匹配字符串的集合。

示例代碼:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章