Python设计模式编程中解释器模式的简单程序示例分享


Posted in Python onMarch 02, 2016

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

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

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设计模式编程中解释器模式的简单程序示例分享

Python 相关文章推荐
python通过shutil实现快速文件复制的方法
Mar 14 Python
轻量级的Web框架Flask 中模块化应用的实现
Sep 11 Python
Python paramiko模块的使用示例
Apr 11 Python
python实现监控某个服务 服务崩溃即发送邮件报告
Jun 21 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
浅谈Python中的bs4基础
Oct 21 Python
Python numpy线性代数用法实例解析
Nov 15 Python
使用pyqt5 tablewidget 单元格设置正则表达式
Dec 13 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
Jan 23 Python
Python+Opencv实现把图片、视频互转的示例
Dec 17 Python
OpenCV-Python 实现两张图片自动拼接成全景图
Jun 11 Python
什么是Python装饰器?如何定义和使用?
Apr 11 Python
分析Python中设计模式之Decorator装饰器模式的要点
Mar 02 #Python
实例解析Python设计模式编程之桥接模式的运用
Mar 02 #Python
Python随机生成带特殊字符的密码
Mar 02 #Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 #Python
Python打造出适合自己的定制化Eclipse IDE
Mar 02 #Python
设计模式中的原型模式在Python程序中的应用示例
Mar 02 #Python
深入解析Python设计模式编程中建造者模式的使用
Mar 02 #Python
You might like
全国FM电台频率大全 - 12 安徽省
2020/03/11 无线电
打造计数器DIY三步曲(上)
2006/10/09 PHP
php 多线程上下文中安全写文件实现代码
2009/12/28 PHP
php 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
php创建无限级树型菜单
2015/11/05 PHP
PHP防止刷新重复提交页面的示例代码
2015/11/11 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
原生js实现form表单序列化的方法
2018/08/02 Javascript
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
python微信公众号开发简单流程
2018/03/23 Python
Python3之字节串bytes与字节数组bytearray的使用详解
2019/08/27 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
django queryset 去重 .distinct()说明
2020/05/19 Python
完美解决pycharm 不显示代码提示问题
2020/06/02 Python
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
乌克兰在线药房:Аптека24
2019/10/30 全球购物
学生自我鉴定
2013/12/18 职场文书
家长对孩子评语
2014/01/30 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
消防安全承诺书
2014/05/22 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
实习介绍信范文
2015/05/05 职场文书
小学生心理健康活动总结
2015/05/08 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
浅析MongoDB之安全认证
2021/06/26 MongoDB
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技