PHP设计模式解释器模式的深入分析

解释器(解释器)模型包含一个具有复杂文法规则的类层次结构,映射到类中,在表达式语法后面跟着可以转换成抽象语法树,除了实例对象图复合模型之外,没有其他的语法模型。

树是一个抽象的名词,因为事实上大部分时间是抽象表现主义的一种表达,它忽略了有可能是一个字符串,也可能有一个数据结构的具体表现,(例如,在PHP中,一个和 X41一样抽象文字的不同表现形式),通过逻辑解耦结果的规则,解释过程大大简化。

解释器不是一种很常见的模式,但是对于简单文法来说,添加规则和添加类一样简单,但它不能解决其他服务所完成的从具体形式到抽象语法树的转换。

针对一个简单的抽象表达的解释器模式(抽象表达)方法(解释操作)使用复合层状结构,参数和解释器操作通常被称为一个给定的方法的情况下,他们通常计算,相反,他们可能不一定存在的操作。

类似地,当包含解释器时,复合模式叶和容器参与者的名称将不同。这些名字反映了他们的角色:终端或非终结符表达式。

参加者uff1a
客户机(客户端):用于解释操作。
摘要:表达(抽象表达)基于抽象表达式树。
非终结符表达式(nonterminalexpression):递归包含其他抽象的表达(表达的抽象表达实例)。
终端的表达(terminalexpression)的表达可以进一步简化。

设计模式在这种模式的书提供了一个扩展的示例,我将使用一个布尔表达式的数学变换来代替,所以这个例子是解决显示其评估的数学表达式()是在一个不同的类分离的具体表现。
复制代码代码如下所示:

*抽象表达。此接口的所有实现
* concreteexpressions。
* /
接口mathexpression
{

*计算表达式所假设的值。
*注意,值被传递给所有表达式,但它
*仅用于变量。这是需要抽象的。
*远离树结构。
* /
公共功能评估(数组值);
}


*表示文字值的终端表达式。
* /
类实现了mathexpression文字
{
私人_value美元;

公共功能__construct(价值)
{
美元-> _value =价值;
}

公共功能评估(数组值)
{
返回_value美元->;
}
}


*表示变量的终端表达式。
* /
类变量来实现mathexpression
{
私人_letter美元;

公共功能__construct(合信)
{
美元-> _letter = $信;
}

公共功能评估(数组值)
{
返回值{美元-> _letter };
}
}


*非终结符表达式。
* /
类和实现mathexpression
{
私人_a美元;
私人_b美元;

公共功能__construct(mathexpression美元美元,mathexpression B)
{
美元-> _a =美元;
美元-> _b = $;
}

公共功能评估(数组值)
{
返回_a美元-> ->评估(美元值)+美元-> _b ->评估(美元值);
}
}


*非终结符表达式。
* /
类产品实现了mathexpression
{
私人_a美元;
私人_b美元;

公共功能__construct(mathexpression美元美元,mathexpression B)
{
美元-> _a =美元;
美元-> _b = $;
}

公共功能评估(数组值)
{
返回_a美元-> ->评估(美元值)×美元-> _b ->评估(美元值);
}
}

10(a + 3)
为表达=新产品(新的文字(10)、新和(新的变量(A)、新文化(3))));
echo $表达->评估(数组(a = 4),;
在语法中添加新规则是很容易的:
例如,力量,减法…
对复合式操作来说,更简单了:
可以添加 / /我们的替代品(合信mathexpression $ expr)
接口…