public function nextToken()
    {
        if ($this->lookahead !== null) {
            $token = $this->lookahead;

            $this->lookahead = null;
        } else {
            $token = trim(array_shift($this->tokens));
        }


        if (strlen($token) === 1 && Character::isLetter($token{0})
            && $this->dosStyleFilesystem
            && !empty($this->tokens)
        ) {
            // we are on a dos style system so this path could be a drive

            // spec. We look at the next token

            $nextToken = trim(array_shift($this->tokens));

            if (StringHelper::startsWith('\\', $nextToken) || StringHelper::startsWith('/', $nextToken)) {
                // we know we are on a DOS style platform and the next path

                // starts with a slash or backslash, so we know this is a

                // drive spec

                $token .= ':' . $nextToken;
            } else {
                // store the token just read for next time

                $this->lookahead = $nextToken;
            }
        }

        return $token;
    }