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批量修改文本文件内容的方法
Apr 29 Python
浅谈Python的异常处理
Jun 19 Python
详解python中的json的基本使用方法
Dec 21 Python
python 调用win32pai 操作cmd的方法
May 28 Python
Python学习之Anaconda的使用与配置方法
Jan 04 Python
Python设计模式之中介模式简单示例
Jan 09 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
python实现烟花小程序
Jan 30 Python
Python3模拟登录操作实例分析
Mar 12 Python
Python实现性能自动化测试竟然如此简单
Jul 30 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
Aug 30 Python
python通过SSH登陆linux并操作的实现
Oct 10 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
珊瑚虫IP库浅析
2007/02/15 PHP
在PHP中使用反射技术的架构插件使用说明
2010/05/18 PHP
php中3种方法删除字符串中间的空格
2014/03/10 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
JQuery 学习笔记 选择器之四
2009/07/23 Javascript
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
潜说js对象和数组
2011/05/25 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
jquery 笔记 事件
2011/11/02 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
window.open打开页面居中显示的示例代码
2013/12/27 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
JavaScript在form表单中使用button按钮实现submit提交方法
2017/01/23 Javascript
实例解析js中try、catch、finally的执行规则
2017/02/24 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
2017/11/22 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
使用python 和 lint 删除项目无用资源的方法
2017/12/20 Python
python使用turtle库绘制时钟
2020/03/25 Python
实习医生自我评价
2013/09/22 职场文书
《蒲公英》教学反思
2014/02/28 职场文书
校园安全演讲稿
2014/05/09 职场文书
个人承诺书格式
2014/06/03 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
学习作风建设心得体会
2014/10/22 职场文书
党支部意见范文
2015/06/02 职场文书
论语读书笔记
2015/06/26 职场文书