/** * @return LookAheadSets */ public static function predictSets() { $productions = self::normalizedProductions(); $sets = new LookAheadSets(new SimpleHashKeyFactory()); $set = new ArraySet(); $set->add(StandardSymbol::terminal('a')); $sets->add($productions[0], $set); $set = new ArraySet(); $set->add(StandardSymbol::terminal('b')); $set->add(StandardSymbol::terminal('c')); $set->add(StandardSymbol::terminal('d')); $sets->add($productions[1], $set); $set = new ArraySet(); $set->add(StandardSymbol::terminal('b')); $sets->add($productions[2], $set); $set = new ArraySet(); $set->add(StandardSymbol::terminal('c')); $set->add(StandardSymbol::terminal('d')); $sets->add($productions[3], $set); $set = new ArraySet(); $set->add(StandardSymbol::terminal('c')); $sets->add($productions[4], $set); $set = new ArraySet(); $set->add(StandardSymbol::terminal('d')); $sets->add($productions[5], $set); return $sets; }
/** * @param array|NormalizedProduction[] $productions * @param LookAheadSets $lookAheadSets * @param \Helstern\Nomsky\GrammarAnalysis\ParseSets\ParseSets $followSets * @param \Helstern\Nomsky\GrammarAnalysis\ParseSets\ParseSets $firstSets * * @return \Helstern\Nomsky\GrammarAnalysis\ParseSets\SetsGenerator */ public function generateLookAheadSets(array $productions, LookAheadSets $lookAheadSets, ParseSets $followSets, ParseSets $firstSets) { foreach ($productions as $production) { $predictSet = new ArraySet(); $this->predictSetCalculator->processProduction($predictSet, $production, $followSets, $firstSets); $lookAheadSets->add($production, $predictSet); } return $this; }