From af0fccfef33593118f9525087b0b612d91f2614c Mon Sep 17 00:00:00 2001
From: Roman Martinuk <romanmartinuk@gmail.com>
Date: Sun, 14 Mar 2021 18:40:48 +0300
Subject: [PATCH] add pattern Interpreter

---
 Behavioral/Interpreter/AbstractExp.php        |   8 +++
 Behavioral/Interpreter/AndExp.php             |  20 ++++++
 Behavioral/Interpreter/Context.php            |  24 +++++++
 Behavioral/Interpreter/OrExp.php              |  20 ++++++
 .../Interpreter/Tests/InterpreterTest.php     |  63 ++++++++++++++++++
 Behavioral/Interpreter/VariableExp.php        |  23 +++++++
 Behavioral/Interpreter/uml/uml.png            | Bin 0 -> 22922 bytes
 7 files changed, 158 insertions(+)
 create mode 100644 Behavioral/Interpreter/AbstractExp.php
 create mode 100644 Behavioral/Interpreter/AndExp.php
 create mode 100644 Behavioral/Interpreter/Context.php
 create mode 100644 Behavioral/Interpreter/OrExp.php
 create mode 100644 Behavioral/Interpreter/Tests/InterpreterTest.php
 create mode 100644 Behavioral/Interpreter/VariableExp.php
 create mode 100644 Behavioral/Interpreter/uml/uml.png

diff --git a/Behavioral/Interpreter/AbstractExp.php b/Behavioral/Interpreter/AbstractExp.php
new file mode 100644
index 0000000..5e34736
--- /dev/null
+++ b/Behavioral/Interpreter/AbstractExp.php
@@ -0,0 +1,8 @@
+<?php declare(strict_types=1);
+
+namespace DesignPatterns\Behavioral\Interpreter;
+
+abstract class AbstractExp
+{
+    abstract public function interpret(Context $context): bool;
+}
diff --git a/Behavioral/Interpreter/AndExp.php b/Behavioral/Interpreter/AndExp.php
new file mode 100644
index 0000000..9715ddb
--- /dev/null
+++ b/Behavioral/Interpreter/AndExp.php
@@ -0,0 +1,20 @@
+<?php declare(strict_types=1);
+
+namespace DesignPatterns\Behavioral\Interpreter;
+
+class AndExp extends AbstractExp
+{
+    private AbstractExp $first;
+    private AbstractExp $second;
+
+    public function __construct(AbstractExp $first, AbstractExp $second)
+    {
+        $this->first = $first;
+        $this->second = $second;
+    }
+
+    public function interpret(Context $context): bool
+    {
+        return (bool) $this->first->interpret($context) && $this->second->interpret($context);
+    }
+}
diff --git a/Behavioral/Interpreter/Context.php b/Behavioral/Interpreter/Context.php
new file mode 100644
index 0000000..2a0b2c7
--- /dev/null
+++ b/Behavioral/Interpreter/Context.php
@@ -0,0 +1,24 @@
+<?php declare(strict_types=1);
+
+namespace DesignPatterns\Behavioral\Interpreter;
+
+use Exception;
+
+class Context
+{
+    private array $poolVariable;
+
+    public function lookUp(string $name): bool
+    {
+        if (!key_exists($name, $this->poolVariable)) {
+            throw new Exception("no exist variable: $name");
+        }
+
+        return $this->poolVariable[$name];
+    }
+
+    public function assign(VariableExp $variable, bool $val)
+    {
+        $this->poolVariable[$variable->getName()] = $val;
+    }
+}
diff --git a/Behavioral/Interpreter/OrExp.php b/Behavioral/Interpreter/OrExp.php
new file mode 100644
index 0000000..db3ba1b
--- /dev/null
+++ b/Behavioral/Interpreter/OrExp.php
@@ -0,0 +1,20 @@
+<?php declare(strict_types=1);
+
+namespace DesignPatterns\Behavioral\Interpreter;
+
+class OrExp extends AbstractExp
+{
+    private AbstractExp $first;
+    private AbstractExp $second;
+
+    public function __construct(AbstractExp $first, AbstractExp $second)
+    {
+        $this->first = $first;
+        $this->second = $second;
+    }
+
+    public function interpret(Context $context): bool
+    {
+        return $this->first->interpret($context) || $this->second->interpret($context);
+    }
+}
diff --git a/Behavioral/Interpreter/Tests/InterpreterTest.php b/Behavioral/Interpreter/Tests/InterpreterTest.php
new file mode 100644
index 0000000..3b1c07a
--- /dev/null
+++ b/Behavioral/Interpreter/Tests/InterpreterTest.php
@@ -0,0 +1,63 @@
+<?php declare(strict_types=1);
+
+namespace DesignPatterns\Behavioral\Interpreter\Tests;
+
+use DesignPatterns\Behavioral\Interpreter\AndExp;
+use DesignPatterns\Behavioral\Interpreter\Context;
+use DesignPatterns\Behavioral\Interpreter\OrExp;
+use DesignPatterns\Behavioral\Interpreter\VariableExp;
+use PHPUnit\Framework\TestCase;
+
+class InterpreterTest extends TestCase
+{
+    private Context $context;
+    private VariableExp $a;
+    private VariableExp $b;
+    private VariableExp $c;
+
+    public function setUp(): void
+    {
+        $this->context = new Context();
+        $this->a = new VariableExp('A');
+        $this->b = new VariableExp('B');
+        $this->c = new VariableExp('C');
+    }
+
+    public function testOr()
+    {
+        $this->context->assign($this->a, false);
+        $this->context->assign($this->b, false);
+        $this->context->assign($this->c, true);
+
+        // A ∨ B
+        $exp1 = new OrExp($this->a, $this->b);
+        $result1 = $exp1->interpret($this->context);
+
+        $this->assertFalse($result1, 'A ∨ B must false');
+
+        // $exp1 ∨ C
+        $exp2 = new OrExp($exp1, $this->c);
+        $result2 = $exp2->interpret($this->context);
+
+        $this->assertTrue($result2, '(A ∨ B) ∨ C must true');
+    }
+
+    public function testAnd()
+    {
+        $this->context->assign($this->a, true);
+        $this->context->assign($this->b, true);
+        $this->context->assign($this->c, false);
+
+        // A ∧ B
+        $exp1 = new AndExp($this->a, $this->b);
+        $result1 = $exp1->interpret($this->context);
+
+        $this->assertTrue($result1, 'A ∧ B must true');
+
+        // $exp1 ∧ C
+        $exp2 = new AndExp($exp1, $this->c);
+        $result2 = $exp2->interpret($this->context);
+
+        $this->assertFalse($result2, '(A ∧ B) ∧ C must false');
+    }
+}
diff --git a/Behavioral/Interpreter/VariableExp.php b/Behavioral/Interpreter/VariableExp.php
new file mode 100644
index 0000000..f7fc871
--- /dev/null
+++ b/Behavioral/Interpreter/VariableExp.php
@@ -0,0 +1,23 @@
+<?php declare(strict_types=1);
+
+namespace DesignPatterns\Behavioral\Interpreter;
+
+class VariableExp extends AbstractExp
+{
+    private string $name;
+
+    public function __construct(string $name)
+    {
+        $this->name = $name;
+    }
+
+    public function interpret(Context $context): bool
+    {
+        return $context->lookUp($this->name);
+    }
+
+    public function getName(): string
+    {
+        return $this->name;
+    }
+}
diff --git a/Behavioral/Interpreter/uml/uml.png b/Behavioral/Interpreter/uml/uml.png
new file mode 100644
index 0000000000000000000000000000000000000000..09d372bd81a019619581da775a35b0dfcc6fb014
GIT binary patch
literal 22922
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

literal 0
HcmV?d00001