45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 编程代码 > 阅读资讯:如何使用Python设计模式编程中解释器模式?

如何使用Python设计模式编程中解释器模式?

2016-07-11 15:11:47 来源:www.45fan.com 【

如何使用Python设计模式编程中解释器模式?

模式特点:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

我们来看一下下面这样的程序结构:

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设计模式编程中解释器模式?

再来看一个例子:

#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 = { 
 'C':1,  
 'D':2, 
 'E':3,  
 'F':4,  
 'G':5,  
 'A':6,  
 'B':7,  
 } 
 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设计模式编程中解释器模式?


本文地址:http://www.45fan.com/bcdm/56911.html
Tags: python 编程 解释器
编辑:路饭网
推广内容
推荐阅读
热门推荐
推荐文章
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部