2015年12月15日00:19:02
今天隻看了理論和demo,明天再寫文章,跑步好累
2015年12月15日21:36:00
解釋器模式用來解釋預先定義的文法。
《大話設計模式》裡面這麼定義:如果一種特定類型的問題發生的頻率足夠高,那麼可能就值得将該問題的各個勢力表述為一個簡單語言中的句子,這樣就可以建構一個解釋器,該解釋器通過解釋這些句子來解決問題。
解釋器模式包含以下幾個類:
AbstractExpression: 抽象表達式。聲明一個抽象的解釋操作,該接口為抽象文法樹中所有的節點共享。
TerminalExpression: 終結符表達式。實作與文法中的終結符相關的解釋操作。實作抽象表達式中所要求的方法。文法中每一個終結符都有一個具體的終結表達式與之相對應。
NonterminalExpression: 非終結符表達式。為文法中的非終結符相關的解釋操作。
Context: 環境類。包含解釋器之外的一些全局資訊。
Client: 客戶類。
優點:
容易改變和擴充文法,因為該模式使用類來标示文法規則,你可使用繼承來改變和擴充該文法。也比較容易實作文法,因為定義抽象文法樹種各個節點的類實作答題想死,這些類都抑郁編寫。
缺點:解釋器模式為文法中的每一條規則至少定義了一個類,是以包含許多規則的文法可能難以管理和維護,建議文法複雜的情況下使用其他技術如預防分析程式和編譯器生成器來處理。
下面是個demo:
首先建立環境類Context:
然後建立抽象的Expression 類:
然後就是實作抽象類:
自減操作:
自加操作:
測試類:
運算結果為: