private function doTransitionFromB() : self
    {
        if ($this->getToken() === Grammar::T_V) {
            $this
                ->setState(self::STATE_A)
                ->addPosition(1)
                ->addTokenValue(Grammar::T_V);
            return $this;
        }

        if ($this->getToken() === Grammar::T_I && $this->hasToken(1) && $this->getToken(1) === Grammar::T_V) {
            $this
                ->setState(self::STATE_Y)
                ->addPosition(2)
                ->addTokenValue(Grammar::T_V, Grammar::T_I);
            return $this;
        }

        if ($this->getToken() === Grammar::T_I && $this->hasToken(1) && $this->getToken(1) === Grammar::T_X) {
            $this
                ->setState(self::STATE_Y)
                ->addPosition(2)
                ->addTokenValue(Grammar::T_X, Grammar::T_I);
            return $this;
        }

        $this->setState(self::STATE_A);
        return $this;
    }