/** * Process */ public function process() { $situation = new Situation($this->table, $this->table->getStartRule()); $this->addState($situation->closure()); while (!$this->stateQueue->isEmpty()) { /** @var State $state */ $state = $this->stateQueue->dequeue(); foreach ($state->getSituationSet()->getNextTokens() as $next) { $transition = $this->addState($state->getSituationSet()->transition($next)); $state->addTransition($next, $transition); } } }