|
@@ 2731-2750 (lines=20) @@
|
| 2728 |
|
* |
| 2729 |
|
* @return \Doctrine\ORM\Query\AST\SimpleArithmeticExpression |
| 2730 |
|
*/ |
| 2731 |
|
public function SimpleArithmeticExpression() |
| 2732 |
|
{ |
| 2733 |
|
$terms = []; |
| 2734 |
|
$terms[] = $this->ArithmeticTerm(); |
| 2735 |
|
|
| 2736 |
|
while (($isPlus = $this->lexer->isNextToken(Lexer::T_PLUS)) || $this->lexer->isNextToken(Lexer::T_MINUS)) { |
| 2737 |
|
$this->match(($isPlus) ? Lexer::T_PLUS : Lexer::T_MINUS); |
| 2738 |
|
|
| 2739 |
|
$terms[] = $this->lexer->token['value']; |
| 2740 |
|
$terms[] = $this->ArithmeticTerm(); |
| 2741 |
|
} |
| 2742 |
|
|
| 2743 |
|
// Phase 1 AST optimization: Prevent AST\SimpleArithmeticExpression |
| 2744 |
|
// if only one AST\ArithmeticTerm is defined |
| 2745 |
|
if (count($terms) == 1) { |
| 2746 |
|
return $terms[0]; |
| 2747 |
|
} |
| 2748 |
|
|
| 2749 |
|
return new AST\SimpleArithmeticExpression($terms); |
| 2750 |
|
} |
| 2751 |
|
|
| 2752 |
|
/** |
| 2753 |
|
* ArithmeticTerm ::= ArithmeticFactor {("*" | "/") ArithmeticFactor}* |
|
@@ 2757-2776 (lines=20) @@
|
| 2754 |
|
* |
| 2755 |
|
* @return \Doctrine\ORM\Query\AST\ArithmeticTerm |
| 2756 |
|
*/ |
| 2757 |
|
public function ArithmeticTerm() |
| 2758 |
|
{ |
| 2759 |
|
$factors = []; |
| 2760 |
|
$factors[] = $this->ArithmeticFactor(); |
| 2761 |
|
|
| 2762 |
|
while (($isMult = $this->lexer->isNextToken(Lexer::T_MULTIPLY)) || $this->lexer->isNextToken(Lexer::T_DIVIDE)) { |
| 2763 |
|
$this->match(($isMult) ? Lexer::T_MULTIPLY : Lexer::T_DIVIDE); |
| 2764 |
|
|
| 2765 |
|
$factors[] = $this->lexer->token['value']; |
| 2766 |
|
$factors[] = $this->ArithmeticFactor(); |
| 2767 |
|
} |
| 2768 |
|
|
| 2769 |
|
// Phase 1 AST optimization: Prevent AST\ArithmeticTerm |
| 2770 |
|
// if only one AST\ArithmeticFactor is defined |
| 2771 |
|
if (count($factors) == 1) { |
| 2772 |
|
return $factors[0]; |
| 2773 |
|
} |
| 2774 |
|
|
| 2775 |
|
return new AST\ArithmeticTerm($factors); |
| 2776 |
|
} |
| 2777 |
|
|
| 2778 |
|
/** |
| 2779 |
|
* ArithmeticFactor ::= [("+" | "-")] ArithmeticPrimary |