def read_cstring(self) -> bool:
    """
    read a double quoted string
    Read following BNF rule else return False::

        '"' -> ['\\' #char | ~'\\'] '"'

    """
    self._stream.save_context()
    idx = self._stream.index
    if self.read_char("\"") and self.read_until("\"", "\\"):
        txt = self._stream[idx:self._stream.index]
        return self._stream.validate_context()
    return self._stream.restore_context()