addRule($expression->getSymbolName(), new OrExpression($number, $constant, $function)); $this->addRule($expression->getSymbolName(), new AndExpression($openingBracket, $expression, $closingBracket)); $this->addRule($expression->getSymbolName(), new AndExpression( new OptionalAndExpression($unaryOperator), $simpleExpression, new RepeatedAndExpression( 0, PHP_INT_MAX, $operator, new OptionalAndExpression($unaryOperator), $simpleExpression ) )); $this->addRule($simpleExpression->getSymbolName(), new OrExpression($number, $constant, $function)); $this->addRule($simpleExpression->getSymbolName(), new AndExpression( $openingBracket, $expression, $closingBracket )); $this->addRule($simpleExpression->getSymbolName(), new AndExpression( $simpleExpression, new RepeatedAndExpression( 0, PHP_INT_MAX, $operator, new OptionalAndExpression($unaryOperator), $expression ) )); $this->addRule($function->getSymbolName(), new AndExpression($functionBody, $openingBracket, $closingBracket)); $this->addRule($function->getSymbolName(), new AndExpression( $functionBody, $openingBracket, $expression, new RepeatedAndExpression(0, PHP_INT_MAX, $argumentSeparator, $expression), $closingBracket )); // Define the start $this->start = $expression->getSymbolName(); } }