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设计模式编程中解释器模式的简单程序示例分享
Mar 02 Python
给你选择Python语言实现机器学习算法的三大理由
Nov 15 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
Python3.6实现连接mysql或mariadb的方法分析
May 18 Python
pycharm远程开发项目的实现步骤
Jan 20 Python
python实现杨氏矩阵查找
Mar 02 Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 Python
pytorch实现查看当前学习率
Jun 24 Python
Python函数__new__及__init__作用及区别解析
Aug 31 Python
安装并免费使用Pycharm专业版(学生/教师)
Sep 24 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 Python
Python pyecharts案例超市4年数据可视化分析
Aug 14 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与SQL注入攻击[三]
2007/04/17 PHP
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
2017/06/02 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
2017/07/10 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
PHP面向对象程序设计之多态性的应用示例
2018/12/19 PHP
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
js判断变量是否未定义的代码
2020/03/28 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
js判断上传文件类型判断FileUpload文件类型代码
2014/05/20 Javascript
解决js图片加载时出现404的问题
2020/11/30 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
AngularJS实现的base64编码与解码功能示例
2018/05/17 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
Vue项目中如何使用Axios封装http请求详解
2019/10/23 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
在django中图片上传的格式校验及大小方法
2019/07/28 Python
Python pandas用法最全整理
2019/08/04 Python
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
pycharm如何使用anaconda中的各种包(操作步骤)
2020/07/31 Python
python如何运行js语句
2020/09/09 Python
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
Tostadora意大利:定制T恤
2019/04/08 全球购物
Linux如何压缩可执行文件
2014/03/27 面试题
校园活动策划方案
2014/06/13 职场文书
社区党风廉政建设调研报告
2015/01/01 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
MySQL笔记 —SQL运算符
2022/01/18 MySQL