python-解譯器模式

來源:互聯網
上載者:User

標籤:erp   技術   bre   沒有   self   alt   code   假設   角色   

說明:

解譯器模式在物件導向語言實現的編譯器中得到了廣泛的應用。但是此模式進適用於建大的文法解釋,弊端又多,所以很少有其他方面使用。例如:將“1+2+3-4”等字串輸入到python的console,但是本身python不認識這些字串,就需要定義的一套文法規則來解釋這些字串,也就是設計一個自訂語言。

解譯器模式:給定一個語言,定義它的文法的一種表示,並定義一個解譯器,這個解譯器使用該表示來解釋語言中的句子。在解譯器模式的定義中所指的“語言”是使用規定格式和文法的代碼。

 

解譯器模式的結構

解譯器模式包含以下4個角色: AbstractExpression(抽象運算式) TerminalExpression(終結符運算式) NonterminalExpression(非終結符運算式) Context(環境類)

執行個體:
#要開發一個自動識別譜子的吉他模擬器,達到錄入譜即可按照譜發聲的效果。# 除了發聲裝置外(假設已完成),最重要的就是讀譜和譯譜能力了。# 分析其需求,整個過程大致上分可以分為兩部分:# 根據規則翻譯譜的內容;根據翻譯的內容演奏。# 我們用一個解譯器模型來完成這個功能。class PlayContext():    play_text = Noneclass Expression():    def interpret(self, context):        if len(context.play_text) == 0:            return        else:            play_segs=context.play_text.split(" ")            for play_seg in play_segs:                pos=0                for ele in play_seg:                    if ele.isalpha():#檢驗字串是否只由字母組成                        pos+=1                        continue                    break                play_chord = play_seg[0:pos]                play_value = play_seg[pos:]                self.execute(play_chord,play_value)    def execute(self,play_key,play_value):        passclass NormGuitar(Expression):    def execute(self, key, value):        print("Normal Guitar Playing--Chord:%s Play Tune:%s"%(key,value))#PlayContext類為譜的內容,這裡僅含一個欄位,沒有方法。# Expression即運算式,裡面僅含兩個方法,interpret負責轉譯譜,execute則負責演奏;NormGuitar類覆寫execute,以吉他 的方式演奏。#業務情境如下:if __name__=="__main__":    context = PlayContext()    context.play_text = "C53231323 Em43231323 F43231323 G63231323"    guitar=NormGuitar()    guitar.interpret(context)

列印結果:

Normal Guitar Playing--Chord:C Play Tune:53231323
Normal Guitar Playing--Chord:Em Play Tune:43231323
Normal Guitar Playing--Chord:F Play Tune:43231323
Normal Guitar Playing--Chord:G Play Tune:63231323

模式優點

易於改變和擴充文法 可以方便地實現一個簡單的語言 實現文法較為容易(有自動產生工具) 增加新的解釋運算式較為方便

模式缺點

對於複雜文法難以維護 執行效率較低

模式適用環境

可以將一個需要解釋執行的語言中的句子表示為一棵抽象文法樹 一些重複出現的問題可以用一種簡單的語言來進行表達 一個語言的文法較為簡單 執行效率不是關鍵問題

python-解譯器模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.