go-pattern-examples/behavior/08_interpreter/README.md
2020-05-05 22:43:54 +08:00

25 lines
1.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 解释器模式
解释器模式的本质是就是自己定一套规则、语言、表达方式,也就是所谓的DSL(Domain Specific Language)然后按照定义解析执行DSL常见的自定义协议私有协议就是一个中解释器模式的概念使用者按照协议的规则做事。
解释器模式的意义在于,它分离多种复杂功能的实现,每个功能只需关注自身的解释。
对于调用者不用关心内部的解释器的工作,只需要用简单的方式组合命令。
常见的redis协议就是一个很好解释器模式实现通过redis-cli可以发送各种指令给到redis-server服务端解释执行后返回结果。
我们常说的计算器,是一个很典型的解释器模式,它用来解释执行加减乘除的运行规则,现实生活中,哑语翻译、音乐乐谱、摩尔斯电码,道路交通指示系统,等都是解释器模式的好例子。
我们来设计一个简单交流标识系统,来表达会议中两个人交流时候的谈话方式,以代替冗长的语言表述.
A "->" B 表示 A说B听,此时B不能发言。
A "<-" B 表示 B说A听,此时B不能发言
A "<->" B 表示 A 和 B 可以自由发言。
解释器模式中的关键角色:
1. 表达式 一般就是一串带解析的内容流,可能是字符串,也可能是字节流等
2. 表达式解释类,一般就是解析器
3. 表达式子类型解析器,对于表达式中解析到的不同情况,交给不同的解析子类去处理。