26 Interpreter(行爲型)
-
- 動機:
- 給定一個語言之後,解釋器模式可以定義出其文法的一種表示,並同時提供一個解釋器。客戶端可以使用這個解釋器來解釋這個語言中的句子。
- 什麼時候用:
- 當需要解釋一種語言時,可以使用解釋器模式,並且可以將該語言中的語句表示爲抽象語法樹。
- 當語法簡單時,解釋器模式最有效。語法結構不能太複雜
- 效率不是一個關鍵問題。最有效的解釋器通常不是通過直接解釋解析樹實現的,而是首先將它們轉換成另一種形式。
- 結構:
- 參與者:
- 參與者:
- 動機:
-
- 協作:
- 客戶端將句子構建爲一個包含非終結表達式和終結表達式實例的抽象語法樹。然後客戶端初始化上下文並調用explain操作。
- 每個非終止表達式節點根據子表達式上的explain定義explain。每個TerminalExpression的解釋操作定義了遞歸中的基本情況。
- 每個節點上的解釋操作使用上下文來存儲和訪問解釋器的狀態。
- 協作:
-
- 後果:
- 語法很容易實現。
- 改變和擴展語法很容易。
- 因爲模式使用類來表示語法規則。
- 複雜的語法很難維護。
- 例:
- 語法樹:
- 類圖:
- Node:
- ProgramNode:
- 僅僅過濾掉program
- CommandListNode:
- CommandNode:
- RepeatCommandNode:
- PrimitiveCommandNode:
- Node:
- 語法樹:
- 後果: