/** * @param string $stringSymbol * @return ExpressionSymbol */ public function createTerminal($stringSymbol) { if ($stringSymbol === '') { return ExpressionSymbol::createAdapterForEpsilon(); } return ExpressionSymbol::createAdapterForTerminal($stringSymbol); }
protected function addEpsilonAlternativeForItem(Symbol $nonTerminal, Expression $optionalExpression) { $alternationItems = array(ExpressionSymbol::createAdapterForEpsilon()); if ($optionalExpression instanceof Concatenation) { $alternationItems[] = $optionalExpression; } elseif ($optionalExpression instanceof Choice) { $alternationItems[] = new Group($optionalExpression); } else { $alternationItems[] = $optionalExpression; } $alternation = new Choice(array_shift($alternationItems), $alternationItems); $production = new StandardProduction($nonTerminal, $alternation); $this->epsilonAlternatives[] = $production; return $production; }