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 08 Python
在Python中使用__slots__方法的详细教程
Apr 28 Python
Python实例一个类背后发生了什么
Feb 09 Python
Python中动态检测编码chardet的使用教程
Jul 06 Python
Python2.7+pytesser实现简单验证码的识别方法
Dec 29 Python
python求解数组中两个字符串的最小距离
Sep 27 Python
Python3.5集合及其常见运算实例详解
May 01 Python
python 中的paramiko模块简介及安装过程
Feb 29 Python
Python读写操作csv和excle文件代码实例
Mar 16 Python
python argparse模块通过后台传递参数实例
Apr 20 Python
Python 程序员必须掌握的日志记录
Aug 17 Python
python性能测试工具locust的使用
Dec 28 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实现统计邮件大小的方法
2013/08/06 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
Twig模板引擎用法入门教程
2016/01/20 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
windows系统下简单nodejs安装及环境配置
2013/01/08 NodeJs
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
jquery插件推荐浏览器嗅探userAgent
2014/11/09 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
Zabbix添加Node.js监控的方法
2016/10/20 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
微信小程序开发之toast等弹框提示使用教程
2017/06/08 Javascript
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
Vuejs+vue-router打包+Nginx配置的实例
2018/09/20 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
python3处理含有中文的url方法
2018/05/10 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
小学生评语集锦
2014/04/18 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
分公司任命书
2014/06/06 职场文书
幼儿园开学家长寄语(2015秋季)
2015/05/27 职场文书
《风娃娃》教学反思
2016/02/18 职场文书
Oracle11g R2 安装教程完整版
2021/06/04 Oracle