# `Plover.Protocol.Parser`
[🔗](https://github.com/codonnell/plover/blob/main/lib/plover/protocol/parser.ex#L1)

Recursive-descent parser for IMAP response token lists.

Consumes token lists produced by `Plover.Protocol.Tokenizer` and
returns structured response data.

RFC 9051 Section 7 - Server Responses

# `token`

```elixir
@type token() ::
  {:atom, String.t()}
  | {:number, integer()}
  | {:quoted_string, String.t()}
  | {:literal, binary()}
  | {:flag, String.t()}
  | nil
  | :lparen
  | :rparen
  | :lbracket
  | :rbracket
  | :star
  | :plus
  | :crlf
```

# `tokens`

```elixir
@type tokens() :: [token()]
```

# `parse`

```elixir
@spec parse(tokens()) :: {:ok, term()} | {:error, term()}
```

Parse a token list into a response struct.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
