private function doTransitionFromF() : self
    {
        if ($this->getToken() === Grammar::T_D) {
            $this
                ->setState(self::STATE_E)
                ->addPosition(1)
                ->addTokenValue(Grammar::T_D);
            return $this;
        }

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

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

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