设计模式(12)-解释器模式


解释器模式

简介

给定一个语言,定义它的文法的一种表示,并定义一个解释器,
这个解释器使用该表示来解释语言中的句子

当有一个语言需要解释执行,并且你可以将该语言中的句子表示为一个抽象语法树时,可以使用解释器模式。

代码示例

<?php
/**
 * 抽象表达式,声明一个抽象的解释操作,这个接口为抽象的语法树中所有的节点共享
 * Class AbstractExpression
 */
abstract class AbstractExpression
{
    abstract public function interpret(Context $context);
}

class TerminalExpression extends AbstractExpression
{
    public function interpret(Context $context)
    {
        echo '终端解释器' . PHP_EOL;
    }
}

class NonTerminalExpression extends AbstractExpression
{
    public function interpret(Context $context)
    {
        echo '非终端解释器' . PHP_EOL;
    }
}

/**
 * 包含解释器之外的一些全局信息
 *
 * Class Context
 */
class Context
{
    private $input;

    private $output;

    /**
     * @return mixed
     */
    public function getOutput()
    {
        return $this->output;
    }

    /**
     * @param mixed $output
     */
    public function setOutput($output)
    {
        $this->output = $output;
    }

    /**
     * @return mixed
     */
    public function getInput()
    {
        return $this->input;
    }

    /**
     * @param mixed $input
     */
    public function setInput($input)
    {
        $this->input = $input;
    }

}

$context = new Context();

$list[] = new NonTerminalExpression();
$list[] = new NonTerminalExpression();
$list[] = new TerminalExpression();

/* @var $v AbstractExpression */
foreach ($list as $v) {
    $v->interpret($context);
}

文章作者: 江湖义气
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 江湖义气 !
  目录