diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/NXP/Classes/Calculator.php | 4 | ||||
-rw-r--r-- | src/NXP/Classes/CustomFunction.php | 5 | ||||
-rw-r--r-- | src/NXP/Classes/Operator.php | 7 | ||||
-rw-r--r-- | src/NXP/Classes/Token.php | 31 | ||||
-rw-r--r-- | src/NXP/MathExecutor.php | 36 |
5 files changed, 48 insertions, 35 deletions
diff --git a/src/NXP/Classes/Calculator.php b/src/NXP/Classes/Calculator.php index 4785a8f..a8f16af 100644 --- a/src/NXP/Classes/Calculator.php +++ b/src/NXP/Classes/Calculator.php @@ -44,7 +44,7 @@ class Calculator /** * Calculate array of tokens in reverse polish notation * @param Token[] $tokens - * @param array $variables + * @param array<string, float|string> $variables * @return mixed * @throws IncorrectExpressionException * @throws UnknownVariableException @@ -68,7 +68,7 @@ class Calculator throw new UnknownVariableException($variable); } - $stack[] = new Token(Token::Literal, $value); + $stack[] = new Token(Token::Literal, $value, $variable); } elseif ($token->type === Token::Function) { if (!array_key_exists($token->value, $this->functions)) { throw new UnknownFunctionException($token->value); diff --git a/src/NXP/Classes/CustomFunction.php b/src/NXP/Classes/CustomFunction.php index f127ad2..6e4fdc5 100644 --- a/src/NXP/Classes/CustomFunction.php +++ b/src/NXP/Classes/CustomFunction.php @@ -44,6 +44,11 @@ class CustomFunction } } + /** + * @param array<Token> $stack + * + * @throws IncorrectNumberOfFunctionParametersException + */ public function execute(array &$stack) : Token { if (count($stack) < $this->places) { diff --git a/src/NXP/Classes/Operator.php b/src/NXP/Classes/Operator.php index 00485bc..d9a70d7 100644 --- a/src/NXP/Classes/Operator.php +++ b/src/NXP/Classes/Operator.php @@ -24,7 +24,7 @@ class Operator public $priority; /** - * @var callable<\SplStack> + * @var callable(\SplStack) */ public $function; @@ -50,6 +50,11 @@ class Operator $this->places = $reflection->getNumberOfParameters(); } + /** + * @param array<Token> $stack + * + * @throws IncorrectExpressionException + */ public function execute(array &$stack) : Token { if (count($stack) < $this->places) { diff --git a/src/NXP/Classes/Token.php b/src/NXP/Classes/Token.php index 49bf741..e12315e 100644 --- a/src/NXP/Classes/Token.php +++ b/src/NXP/Classes/Token.php @@ -5,31 +5,34 @@ namespace NXP\Classes; class Token { - const Literal = "literal"; - const Variable = "variable"; - const Operator = "operator"; - const LeftParenthesis = "LP"; - const RightParenthesis = "RP"; - const Function = "function"; - const ParamSeparator = "separator"; - const String = "string"; - const Space = "space"; + public const Literal = "literal"; + public const Variable = "variable"; + public const Operator = "operator"; + public const LeftParenthesis = "LP"; + public const RightParenthesis = "RP"; + public const Function = "function"; + public const ParamSeparator = "separator"; + public const String = "string"; + public const Space = "space"; + /** @var self::* */ public $type = self::Literal; - /** - * @var float|string - */ + /** @var float|string */ public $value; + /** @var string */ + public $name; + /** * Token constructor. - * @param string $type + * @param self::* $type * @param float|string $value */ - public function __construct(string $type, $value) + public function __construct(string $type, $value, string $name = null) { $this->type = $type; $this->value = $value; + $this->name = $name; } } diff --git a/src/NXP/MathExecutor.php b/src/NXP/MathExecutor.php index a774561..5584d1a 100644 --- a/src/NXP/MathExecutor.php +++ b/src/NXP/MathExecutor.php @@ -1,5 +1,4 @@ <?php - /** * This file is part of the MathExecutor package * @@ -14,6 +13,7 @@ namespace NXP; use NXP\Classes\Calculator; use NXP\Classes\CustomFunction; use NXP\Classes\Operator; +use NXP\Classes\Token; use NXP\Classes\Tokenizer; use NXP\Exception\DivisionByZeroException; use NXP\Exception\MathExecutorException; @@ -29,12 +29,12 @@ class MathExecutor /** * Available variables * - * @var array + * @var array<string, float|string> */ private $variables = []; /** - * @var callable + * @var callable|null */ private $onVarNotFound = null; @@ -44,12 +44,12 @@ class MathExecutor private $operators = []; /** - * @var CustomFunction[] + * @var array<string, CustomFunction> */ private $functions = []; /** - * @var array + * @var array<string, Token[]> */ private $cache = []; @@ -80,7 +80,7 @@ class MathExecutor /** * Get the default operators * - * @return array of class names + * @return array<string, array{callable, int, bool}> */ protected function defaultOperators() : array { @@ -220,7 +220,7 @@ class MathExecutor * Gets the default functions as an array. Key is function name * and value is the function as a closure. * - * @return array + * @return array<callable> */ protected function defaultFunctions() : array { @@ -436,14 +436,14 @@ class MathExecutor */ public function execute(string $expression, bool $cache = true) { - $cachekey = $expression; - if (!array_key_exists($cachekey, $this->cache)) { + $cacheKey = $expression; + if (!array_key_exists($cacheKey, $this->cache)) { $tokens = (new Tokenizer($expression, $this->operators))->tokenize()->buildReversePolishNotation(); if ($cache) { - $this->cache[$cachekey] = $tokens; + $this->cache[$cacheKey] = $tokens; } } else { - $tokens = $this->cache[$cachekey]; + $tokens = $this->cache[$cacheKey]; } $calculator = new Calculator($this->functions, $this->operators); @@ -468,7 +468,7 @@ class MathExecutor /** * Returns the default variables names as key/value pairs * - * @return array + * @return array<string, float> */ protected function defaultVars() : array { @@ -481,7 +481,7 @@ class MathExecutor /** * Get all vars * - * @return array + * @return array<string, float|string> */ public function getVars() : array { @@ -507,7 +507,7 @@ class MathExecutor * Add variable to executor * * @param string $variable - * @param integer|float $value + * @param int|float $value * @return MathExecutor */ public function setVar(string $variable, $value) : self @@ -524,7 +524,7 @@ class MathExecutor /** * Add variables to executor * - * @param array $variables + * @param array<string, float|int|string> $variables * @param bool $clear Clear previous variables * @return MathExecutor * @throws \Exception @@ -580,7 +580,7 @@ class MathExecutor /** * Get all registered operators to executor * - * @return array of operator class names + * @return array<Operator> of operator class names */ public function getOperators() { @@ -590,7 +590,7 @@ class MathExecutor /** * Get all registered functions * - * @return array containing callback and places indexed by + * @return array<string, CustomFunction> containing callback and places indexed by * function name */ public function getFunctions() : array @@ -616,7 +616,7 @@ class MathExecutor /** * Get cache array with tokens - * @return array + * @return array<string, Token[]> */ public function getCache() : array { |