直譯器模式 python

2021-06-01 07:28:37 字數 2011 閱讀 5473

直譯器模式:

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

應用場景:如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這樣就可以構建乙個直譯器,該直譯器通過解釋這些句子來解決該問題。比如「正常表示式」。

#encoding=utf-8

##by panda

#直譯器模式

def printinfo(info):

print unicode(info, 'utf-8').encode('gbk'),

#上下文類:演奏內容

class playcontext():

text = none

playtext = none

#抽象表示式類

class expression():

def interpret(self, context):

if len(context.playtext) == 0:

return

else:

playkey = context.playtext[0:1]

context.playtext = context.playtext[2:]

tmp = context.playtext.index(' ') #找出第乙個空格出現的位置

playvalue = context.playtext[0:tmp]

context.playtext = context.playtext[tmp+1:]

self.excute(playkey,playvalue)

def excute(self,playkey,playvalue):

pass

#音高class pitch(expression):

pitch = none

def excute(self, key, value):

value = int(value)

if value == 1:

self.pitch = '低音'

elif value == 2:

self.pitch = '中音'

elif value == 3:

self.pitch = '高音'

printinfo(self.pitch)

#音符class note(expression):

notes =

note = none

def excute(self, key, value):

self.note = self.notes[key]

printinfo('%d' % self.note)

def clientui():

context = playcontext()

context.playtext = "o 2 e 0.5 g 0.5 a 3 e 0.5 g 0.5 d 3 e 0.5 g 0.5 a 0.5 o 3 c 1 o 2 a 0.5 g 1 c 0.5 e 0.5 d 3 "

expression = none;

while(len(context.playtext) > 0):

str = context.playtext[0:1];

if(str == 'o'):

expression = pitch()

elif(str == 'c' or str == 'd' or str == 'e' or str == 'f' or str == 'g' or str == 'a' or str == 'b' or str == 'p'):

expression = note()

expression.interpret(context)

return

if __name__ == '__main__':

clientui();

類圖

python設計模式(十三) 直譯器模式

此前已經將創造型模式 結構性模式分享了,後面將分享模式設計中的另一種典型模式 行為型模式。創造型模式是解決實體的生成問題 結構性模式是為了解決實體的組合 搭配問題 而行為型設計模式的出現是為了解決不同實體通訊的問題。直譯器模式 開發者自定義一種 有內涵 的語言 或者叫字串 並設定相關的解釋規則,輸入...

Python與設計模式 直譯器模式

要開發乙個自動識別譜子的結他模擬器,達到錄入譜即可按照譜發聲的效果。除了發聲裝置外 假設已完成 最重要的就是讀譜和譯譜能力了。分析其需求,整個過程大致上分可以分為兩部分 根據規則翻譯譜的內容 根據翻譯的內容演奏。我們用乙個直譯器模型來完成這個功能。class playcontext play tex...

python設計模式(十三) 直譯器模式

此前已經將創造型模式 結構性模式分享了,後面將分享模式設計中的另一種典型模式 行為型模式。創造型模式是解決實體的生成問題 結構性模式是為了解決實體的組合 搭配問題 而行為型設計模式的出現是為了解決不同實體通訊的問題。直譯器模式 開發者自定義一種 有內涵 的語言 或者叫字串 並設定相關的解釋規則,輸入...