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中使用中文的方法
Feb 19 Python
Django中实现点击图片链接强制直接下载的方法
May 14 Python
python数据类型_元组、字典常用操作方法(介绍)
May 30 Python
python3使用smtplib实现发送邮件功能
May 22 Python
Flask框架URL管理操作示例【基于@app.route】
Jul 23 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
Jun 04 Python
Tensorflow不支持AVX2指令集的解决方法
Feb 03 Python
Tensorflow 卷积的梯度反向传播过程
Feb 10 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 Python
python3检查字典传入函数键是否齐全的实例
Jun 05 Python
python3中TQDM库安装及使用详解
Nov 18 Python
pycharm实现猜数游戏
Dec 07 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
繁体中文转换为简体中文的PHP函数
2006/10/09 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
如何判断php数组的维度
2013/06/10 PHP
PHP正则验证Email的方法
2015/06/15 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
2015/11/07 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
Highcharts学习之数据列
2016/08/03 Javascript
react系列从零开始_简单谈谈react
2017/07/06 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
什么时候不能在 Node.js 中使用 Lock Files
2019/06/24 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
Python实现的使用telnet登陆聊天室实例
2015/06/17 Python
在Python中移动目录结构的方法
2016/01/31 Python
python得到windows自启动列表的方法
2018/10/14 Python
浅谈Pandas:Series和DataFrame间的算术元素
2018/12/22 Python
Django实现图片上传功能步骤解析
2020/04/22 Python
英国手机零售商:Carphone Warehouse
2018/06/06 全球购物
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
大学生学习自我评价
2014/01/13 职场文书
合伙协议书
2014/04/23 职场文书
大学生党员承诺书
2014/05/20 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
爱心募捐感谢信
2015/01/22 职场文书
党员干部廉政承诺书
2015/04/28 职场文书
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
2021/03/31 Servers
golang 如何通过反射创建新对象
2021/04/28 Golang
Pytorch 实现变量类型转换
2021/05/17 Python
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL