aboutsummaryrefslogtreecommitdiff
path: root/src/NXP/Classes
diff options
context:
space:
mode:
authorJavier Marín <javier@marinros.com>2021-07-14 05:12:41 +0300
committerGitHub <noreply@github.com>2021-07-14 05:12:41 +0300
commitd1d27b494dececc4e96e608d0bb47fd948d7f959 (patch)
tree02e73bd4eb6772cc3432667fcea7b64e413616d0 /src/NXP/Classes
parentaa37abbaeb73ac1cac5798608da51d813e976a25 (diff)
PhpStan support, consts visibilty and name for tokens (#89)
* Added handler to define not found variables Added support for string variables Fixed strings and ints comparison error * Check if variables have scalar types (int, float, string and bool) Better $onVarNotFound logic * Better support for null variables * Better support for null variables * Better support for null variables * Allow null values in `setVar` method * Support for unary positive operator * Add PhpStan config file Fix PhpStan warnings Set consts visibility Add name info to variable tokens for easier debugging Co-authored-by: Javier Marín <contacto@ideatic.net>
Diffstat (limited to 'src/NXP/Classes')
-rw-r--r--src/NXP/Classes/Calculator.php4
-rw-r--r--src/NXP/Classes/CustomFunction.php5
-rw-r--r--src/NXP/Classes/Operator.php7
-rw-r--r--src/NXP/Classes/Token.php31
4 files changed, 30 insertions, 17 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;
}
}