aboutsummaryrefslogtreecommitdiff
path: root/src/NXP/Classes/Tokenizer.php
diff options
context:
space:
mode:
authorBruce Wells <brucekwells@gmail.com>2020-06-04 18:43:16 +0300
committerBruce Wells <brucekwells@gmail.com>2020-09-16 04:14:44 +0300
commita0e0f405a9ffa11482e53a87eed95d962b8839f6 (patch)
tree55ef6ebce4cdcb53bfe7cc142ef40f90756d9b6c /src/NXP/Classes/Tokenizer.php
parent333a52e9aa64272b0011e108714c93c0f1e0d7db (diff)
Variable fixes (#67)
* Reproduce if throws UnknownOperatorException * Fix variable detection * Adding IncorrectNumberOfFunctionParametersException * Removing tabs * Better exception message text
Diffstat (limited to 'src/NXP/Classes/Tokenizer.php')
-rw-r--r--src/NXP/Classes/Tokenizer.php16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/NXP/Classes/Tokenizer.php b/src/NXP/Classes/Tokenizer.php
index 6b14677..203724a 100644
--- a/src/NXP/Classes/Tokenizer.php
+++ b/src/NXP/Classes/Tokenizer.php
@@ -157,14 +157,16 @@ class Tokenizer
}
$this->emptyNumberBufferAsLiteral();
$this->emptyStrBufferAsVariable();
- if (count($this->tokens) > 0) {
- if ($this->tokens[count($this->tokens) - 1]->type === Token::Operator) {
- $this->tokens[count($this->tokens) - 1]->value .= $ch;
+ if ($ch != '$') {
+ if (count($this->tokens) > 0) {
+ if ($this->tokens[count($this->tokens) - 1]->type === Token::Operator) {
+ $this->tokens[count($this->tokens) - 1]->value .= $ch;
+ } else {
+ $this->tokens[] = new Token(Token::Operator, $ch);
+ }
} else {
$this->tokens[] = new Token(Token::Operator, $ch);
}
- } else {
- $this->tokens[] = new Token(Token::Operator, $ch);
}
$this->allowNegative = true;
}
@@ -251,12 +253,12 @@ class Tokenizer
break;
case Token::Operator:
if (!array_key_exists($token->value, $this->operators)) {
- throw new UnknownOperatorException();
+ throw new UnknownOperatorException($token->value);
}
$op1 = $this->operators[$token->value];
while ($stack->count() > 0 && $stack->top()->type === Token::Operator) {
if (!array_key_exists($stack->top()->value, $this->operators)) {
- throw new UnknownOperatorException();
+ throw new UnknownOperatorException($stack->top()->value);
}
$op2 = $this->operators[$stack->top()->value];
if ($op2->priority >= $op1->priority) {