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写xml文件的操作实例
Oct 05 Python
轻松掌握python设计模式之策略模式
Nov 18 Python
Django admin美化插件suit使用示例
Dec 12 Python
教你一步步利用python实现贪吃蛇游戏
Jun 27 Python
Python之Class&Object用法详解
Dec 25 Python
tensorflow没有output结点,存储成pb文件的例子
Jan 04 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
Feb 26 Python
简单了解python列表和元组的区别
May 14 Python
Python word文本自动化操作实现方法解析
Nov 05 Python
python list的index()和find()的实现
Nov 16 Python
Python爬虫进阶之爬取某视频并下载的实现
Dec 08 Python
Python绘制分类图的方法
Apr 20 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 park、unpark、ord 函数使用方法(二进制流接口应用实例)
2010/10/19 PHP
Fine Uploader文件上传组件应用介绍
2013/01/06 PHP
PHP引用符&的用法详细解析
2013/08/22 PHP
10条php编程小技巧
2015/07/07 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
jQuery学习3:操作元素属性和特性
2010/02/07 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
详解JavaScript中常用的函数类型
2015/11/18 Javascript
详解JavaScript中localStorage使用要点
2016/01/13 Javascript
jquery实现左右无缝轮播图
2020/07/31 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
js 函数性能比较方法
2020/08/24 Javascript
编写Python的web框架中的Model的教程
2015/04/29 Python
Python外星人入侵游戏编程完整版
2020/03/30 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
keras K.function获取某层的输出操作
2020/06/29 Python
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
检查接待方案
2014/02/27 职场文书
妇女干部培训方案
2014/05/12 职场文书
三月学雷锋活动总结
2014/06/26 职场文书
三峡大坝导游词
2015/01/31 职场文书
借钱欠条怎么写
2015/07/03 职场文书
学校教师培训工作总结
2015/10/14 职场文书
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle
Flask response响应的具体使用
2021/07/15 Python
Linux中各个目录的作用与内容
2022/06/28 Servers