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实现的防DDoS脚本
Feb 08 Python
python列表去重的二种方法
Feb 14 Python
利用Celery实现Django博客PV统计功能详解
May 08 Python
python实现ID3决策树算法
Dec 20 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
Jan 10 Python
对Python中plt的画图函数详解
Nov 07 Python
python调用虹软2.0第三版的具体使用
Feb 22 Python
Python实现的矩阵转置与矩阵相乘运算示例
Mar 26 Python
python多线程实现TCP服务端
Sep 03 Python
Python中有几个关键字
Jun 04 Python
Python竟然能剪辑视频
May 25 Python
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Jun 26 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
JQUERY CHECKBOX全选,取消全选,反选方法三
2008/08/30 Javascript
javascript开发中因空格引发的错误
2010/11/08 Javascript
深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)
2012/01/15 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
用nodejs的实现原理和搭建服务器(动态)
2016/08/10 NodeJs
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
vue  directive定义全局和局部指令及指令简写
2018/11/20 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
Python中文字符串截取问题
2015/06/15 Python
浅谈python中set使用
2016/06/30 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
python Shapely使用指南详解
2020/02/18 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
2020/04/01 Python
降低python版本的操作方法
2020/09/11 Python
模具专业推荐信
2013/10/30 职场文书
医学院护理专业应届生求职信
2013/11/12 职场文书
教师旷工检讨书
2014/01/18 职场文书
中学教师培训制度
2014/01/31 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
事务机电主管工作职责
2014/02/25 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
归途列车观后感
2015/06/17 职场文书
jquery插件实现悬浮的菜单
2021/04/24 jQuery
如何自己动手写SQL执行引擎
2021/06/02 MySQL