解釋器模式

解釋器模式

一、內容python

給定一種語言,定義它的文法表示,並定義一個解釋器,該解釋器使用該表示來解釋語言中的句子。

解釋器模式中會有終結符和非終結符之說,語法也根據兩種終結符,決定語句最終含義。app

 

二、角色spa

        AbstractExpression: 抽象表達式.net

        TerminalExpression: 終結符表達式
        NonterminalExpression: 非終結符表達式
        Context: 環境類
        Client: 客戶類翻譯

 

三、使用場景日誌

一、若一個問題重複發生,能夠考慮使用解釋器模式。這點在數據處理和日誌處理過程當中使用較多,當數據的需求方須要將數據納爲己用時,必須將數據「翻譯」成本系統的數據規格;一樣的道理,日誌分析平臺也須要根據不一樣的日誌格式翻譯成統一的「語言」。code

二、特定語法解釋器。如各類解釋型語言的解釋器,再好比天然語言中基於語法的文本分析等。視頻

 

 

四、優勢  blog

一、在語法分析的場景中,具備比較好的擴展性。規則修改和制訂比較靈活。ip

 

五、缺點

一、解釋規則多樣化會致使解釋器的爆炸;

二、解釋器目標比較單一,行爲模式比較固定,於是重要的模塊中儘可能不要使用解釋器模式。

 

六、代碼示例

#!/usr/bin/python
#coding:utf8
'''
Interpreter
'''

class Context:
   def __init__(self):
       self.input=""
       self.output=""

class AbstractExpression:
   def Interpret(self,context):
       pass

class Expression(AbstractExpression):
   def Interpret(self,context):
       print "terminal interpret"

class NonterminalExpression(AbstractExpression):
   def Interpret(self,context):
       print "Nonterminal interpret"

if __name__ == "__main__":
   context= ""
   c = []
   c = c + [Expression()]
   c = c + [NonterminalExpression()]
   c = c + [Expression()]
   c = c + [Expression()]
   for a in c:
       a.Interpret(context)

 


識別圖中二維碼,領取python全套視頻資料

相關文章
相關標籤/搜索