好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Python 设计模式行为型解释器模式

一、解释器模式

解释器模式,开发者自定义一种 [有内涵] 的语言(或者叫字符串),并设定相关的解释规则,输入该字符串后可以输出公认的解释,或者执行程序可以理解的动作。

优点:

可扩展性比较好,灵活。 增加了新的解释表达式的方式。 易于实现简单文法。

缺点:

可利用场景比较少。 对于复杂的文法比较难维护。 解释器模式会引起类膨胀。

二、应用场景 SQL 解析 符号处理引擎

三、代码示例

实体角色:

终结符表达式: 实现与文法中的元素相关联的解释操作,通常一个解释器模式中只有一个终结符表达式,但有多个实例,对应不同的终结符。终结符一半是文法中的运算单元,比如有一个简单的公式 R=R1+R2,在里面 R1 和 R2 就是终结符,对应的解析 R1 和 R2 的解释器就是终结符表达式。 非终结符表达式 :文法中的每条规则对应于一个非终结符表达式,非终结符表达式一般是文法中的运算符或者其他关键字,比如:公式 R=R1+R2 中,[+] 就是非终结符,解析 [+] 的解释器就是一个非终结符表达式。非终结符表达式根据逻辑的复杂程度而增加,原则上每个文法规则都对应一个非终结符表达式。

import time
import datetime

"""实现一段简单的中文编程"""


class Code:
? ? """自定义语言"""
? ? def __init__(self, text=None):
? ? ? ? self.text = text


class InterpreterBase:
? ? """自定义解释器基类"""
? ? def run(self, code):
? ? ? ? pass


class Interpreter(InterpreterBase):
? ? """实现解释器方法,实现终结符表达式字典"""
? ? def run(self, code):
? ? ? ? code = code.text
? ? ? ? code_dict = {'获取当前时间戳': time.time(), "获取当前日期": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
? ? ? ? print(code_dict.get(code))


if __name__ == '__main__':
? ? test = Code()
? ? test.text = '获取当前时间戳'
? ? data1 = Interpreter().run(test)
? ? test.text = '获取当前日期'
? ? data2 = Interpreter().run(test)

到此这篇关于Python 设计模式行为型解释器模式的文章就介绍到这了,更多相关Python解释器模式内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

查看更多关于Python 设计模式行为型解释器模式的详细内容...

  阅读:45次