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中的对象,方法,类,实例,函数用法分析
Jan 15 Python
python字符串中的单双引
Feb 16 Python
浅谈python import引入不同路径下的模块
Jul 11 Python
python 统计数组中元素出现次数并进行排序的实例
Jul 02 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
Apr 09 Python
Python中的引用知识点总结
May 20 Python
python面试题Python2.x和Python3.x的区别
May 28 Python
Python Socketserver实现FTP文件上传下载代码实例
Mar 27 Python
pycharm使用技巧之自动调整代码格式总结
Nov 04 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
Dec 04 Python
python源文件的字符编码知识点详解
Mar 04 Python
python blinker 信号库
May 04 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获取中英混合字符串长度的方法
2014/06/07 PHP
php中file_get_contents与curl性能比较分析
2014/11/08 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
2016/07/18 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
老生常谈PHP位运算的用途
2017/03/12 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
关于javascript中this关键字(翻译+自我理解)
2010/10/20 Javascript
jquery ajax请求实例深入解析
2012/11/26 Javascript
jQuery中after的两种用法实例
2013/07/03 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
jquery判断iPhone、Android设备类型
2016/09/14 Javascript
在一般处理程序(ashx)中弹出js提示语
2017/08/16 Javascript
Vue完整项目构建(进阶篇)
2018/02/10 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
vue实现信息管理系统
2020/05/30 Javascript
浅谈python函数之作用域(python3.5)
2017/10/27 Python
Python验证文件是否可读写代码分享
2017/12/11 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
Python学习笔记之列表推导式实例分析
2019/08/13 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
关于工资低的辞职信
2014/01/14 职场文书
民事诉讼授权委托书范文
2014/08/02 职场文书
2014年学生工作总结
2014/11/20 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
小学少先队活动总结
2015/05/08 职场文书
十月围城观后感
2015/06/08 职场文书
教师节随笔
2015/08/15 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书
2016年五一促销广告语
2016/01/28 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL