diff options
author | Javier Marín <javier@marinros.com> | 2021-03-05 03:42:01 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-05 03:42:01 +0300 |
commit | d99491c1f45d091cfe80227671336455b20b897e (patch) | |
tree | 6a924c8daba04fa21c99504aba957fb07ea4af77 /src/NXP/MathExecutor.php | |
parent | 17cc5b9dc48b19e0dee1937080601a9fc2890af4 (diff) |
Support for unary positive expressions (#85)
* Support for unary positive operator
Diffstat (limited to 'src/NXP/MathExecutor.php')
-rw-r--r-- | src/NXP/MathExecutor.php | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/src/NXP/MathExecutor.php b/src/NXP/MathExecutor.php index b8e8a65..a774561 100644 --- a/src/NXP/MathExecutor.php +++ b/src/NXP/MathExecutor.php @@ -16,8 +16,8 @@ use NXP\Classes\CustomFunction; use NXP\Classes\Operator; use NXP\Classes\Tokenizer; use NXP\Exception\DivisionByZeroException; -use NXP\Exception\UnknownVariableException; use NXP\Exception\MathExecutorException; +use NXP\Exception\UnknownVariableException; use ReflectionException; /** @@ -85,35 +85,42 @@ class MathExecutor protected function defaultOperators() : array { return [ - '+' => [ + '+' => [ function ($a, $b) { return $a + $b; }, 170, false ], - '-' => [ + '-' => [ function ($a, $b) { return $a - $b; }, 170, false ], - '`' => [ // unary minus token - function ($a) { - return 0 - $a; - }, - 200, - false + 'uPos' => [ // unary positive token + function ($a) { + return $a; + }, + 200, + false + ], + 'uNeg' => [ // unary minus token + function ($a) { + return 0 - $a; + }, + 200, + false ], - '*' => [ + '*' => [ function ($a, $b) { return $a * $b; }, 180, false ], - '/' => [ + '/' => [ function ($a, $b) { if ($b == 0) { throw new DivisionByZeroException(); @@ -123,28 +130,28 @@ class MathExecutor 180, false ], - '^' => [ + '^' => [ function ($a, $b) { return pow($a, $b); }, 220, true ], - '&&' => [ + '&&' => [ function ($a, $b) { return $a && $b; }, 100, false ], - '||' => [ + '||' => [ function ($a, $b) { return $a || $b; }, 90, false ], - '==' => [ + '==' => [ function ($a, $b) { if (is_string($a) || is_string($b)) { return strcmp($a, $b) == 0; @@ -155,7 +162,7 @@ class MathExecutor 140, false ], - '!=' => [ + '!=' => [ function ($a, $b) { if (is_string($a) || is_string($b)) { return strcmp($a, $b) != 0; @@ -166,28 +173,28 @@ class MathExecutor 140, false ], - '>=' => [ + '>=' => [ function ($a, $b) { return $a >= $b; }, 150, false ], - '>' => [ + '>' => [ function ($a, $b) { return $a > $b; }, 150, false ], - '<=' => [ + '<=' => [ function ($a, $b) { return $a <= $b; }, 150, false ], - '<' => [ + '<' => [ function ($a, $b) { return $a < $b; }, |