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

                $this
                    ->setState(self::STATE_Y)
                    ->addPosition(2)
                    ->addTokenValue(Grammar::T_I, null, 2);
                return $this;
            }

            $this
                ->setState(self::STATE_Y)
                ->addPosition(1)
                ->addTokenValue(Grammar::T_I);
            return $this;
        }

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