/** * @param Optional $expression * * @return boolean */ public function endVisitOptional(Optional $expression) { /** @var Expression[]|array $children */ $children = array_pop($this->stackOfChildren); $optionalExpression = array_pop($children); $newNonTerminal = $this->createNewNonTerminal(); $expression = ExpressionSymbol::createAdapterForSymbol($newNonTerminal); $this->setAsRootOrAddSibling($expression); $this->addEpsilonAlternativeForItem($newNonTerminal, $optionalExpression); }