一、概念
1.1、定义
定义了一个解释器,来解释给定语言和文法的句子。其实质是把语言中的每个符号定义成一个(对象)类,从而把每个程序转换成一个具体的对象树。
82C492DE-4309-4073-A622-97B87AE98641.png
- AbstractExpression,抽象表达式类:核心类,主要定了解析器的解析方法入口。
- Terminal Expression,终结符表达式类:如其名,代表了文法中的终结符。
- Nonterminal Expression,非终结符表达式类:文法中其他非终结符的所有字符
- Context,环境类:一般,存储各个解释器需要的共同数据或是公共的功能。
1.2、解决的问题
- 解决问题:针对需要解析一些固定文法的,需要构建一个解释句子的解释器。
- 模式解决思路:将文法划分为 终结符表达式类 和 非终结符表达式类,然后通过Context来管理解析过程的上下文环境。
二、模式的应用和优缺点
2.1、应用场景
- 实例:编译器、运算表达式计算。
- 实例:有一定文法规则文本解析,例如公交车卡的读卡器程序。
2.2、优缺点
-
优点:
- 易于实现,且解析语言场景下扩张性好。
-
缺点:
- 效率差:模式中通常使用大量的循环和递归调用,当要解释的句子较复杂时,其运行速度很慢。还有代码的调试过程很麻烦,很痛苦。
- 应用场景很少,正如其名,解析器模式基本用语编程语言的解析中。
网友评论