/** * S -> a S e * S -> B * B -> b B e * B -> C * C -> c C e * C -> d */ public static function productions() { $productions = []; $productions[] = new StandardProduction(StandardSymbol::nonTerminal('S'), new Concatenation(ExpressionSymbol::createAdapterForTerminal('a'), [ExpressionSymbol::createAdapterForNonTerminal('S'), ExpressionSymbol::createAdapterForTerminal('e')])); $productions[] = new StandardProduction(StandardSymbol::nonTerminal('S'), ExpressionSymbol::createAdapterForNonTerminal('B')); $productions[] = new StandardProduction(StandardSymbol::nonTerminal('B'), new Concatenation(ExpressionSymbol::createAdapterForTerminal('b'), [ExpressionSymbol::createAdapterForNonTerminal('B'), ExpressionSymbol::createAdapterForTerminal('e')])); $productions[] = new StandardProduction(StandardSymbol::nonTerminal('B'), ExpressionSymbol::createAdapterForNonTerminal('C')); $productions[] = new StandardProduction(StandardSymbol::nonTerminal('C'), new Concatenation(ExpressionSymbol::createAdapterForTerminal('c'), [ExpressionSymbol::createAdapterForNonTerminal('C'), ExpressionSymbol::createAdapterForTerminal('e')])); $productions[] = new StandardProduction(StandardSymbol::nonTerminal('C'), ExpressionSymbol::createAdapterForTerminal('d')); return $productions; }
/** * @param string $identifier * @return ExpressionSymbol */ public function createNonTerminal($identifier) { return ExpressionSymbol::createAdapterForNonTerminal($identifier); }