Resumo

  • A RFC 2234 transformou a ABNF em um documento independente, depois de especificações da Internet incluírem suas próprias definições da notação.
  • Uma gramática compartilhada facilita citar e compor regras; isso não prova que implementações diferentes interpretem um protocolo do mesmo modo.

Uma especificação podia dizer como se formavam as mensagens de um protocolo e também ensinar a notação usada para escrever essas regras. A RFC 2234 registra o pano de fundo: nos primeiros tempos da ARPANET, cada especificação trazia sua própria definição de ABNF. Os documentos de e-mail RFC 733 e, depois, RFC 822 viraram referências comuns. Ainda assim, uma explicação geral escondida dentro do documento de um protocolo específico era um lugar pouco prático para consultar a linguagem gramatical.

Publicada em novembro de 1997, a RFC 2234 separou essa definição para que outras especificações pudessem citá-la conforme a necessidade. Isso não quer dizer que a Internet tenha adotado um único analisador. Quer dizer que nomes de regras, terminais, repetição, alternativas, faixas numéricas e agrupamentos passaram a ter uma referência comum. ABNF descreve sintaxe: as cadeias que uma regra aceita. Não comprova o que um programa implantado na rede realmente aceita.

As camadas precisam continuar visíveis. ABNF descreve a sintaxe; o documento do protocolo escolhe as regras que definem suas mensagens; o ambiente de transmissão determina como os valores terminais são codificados; e o analisador implementa essas escolhas. A RFC 2234 observa que a mesma gramática pode corresponder a diferentes codificações externas e deixa esses detalhes fora do escopo da ABNF. Assim, a notação podia ser reutilizada entre protocolos sem decidir, sozinha, todas as questões sobre os bytes que trafegam numa conexão.

A gramática também pode ser construída por partes. O operador =/ acrescenta alternativas a uma regra já definida em outro lugar. A RFC 2234 aponta esse recurso como útil, por exemplo, para especificações independentes derivadas de um conjunto comum de regras. É uma forma de compor documentos, não uma ordem para que o analisador descubra extensões automaticamente. Os autores ainda precisam indicar quais documentos compõem a regra e até onde ela vale.

Essa é uma forma discreta de coordenação na Internet: uniformizar o vocabulário das regras, deixar cada protocolo definir as suas e explicitar as escolhas de codificação. A RFC 2234 não acabou com divergências ao lhes dar nomes; tornou uma das camadas mais fácil de localizar. A sequência — RFC 4234 e depois RFC 5234 — também mostra que a linguagem comum pode ser revista. Mais tarde, a RFC 7405 tratou de sintaxe relacionada a UTF-8; essas mudanças posteriores não devem ser projetadas de volta sobre o documento de 1997.

Essa história não é a da prosa substituída pela matemática. A prosa continua explicando propósito e contexto; a gramática resume a forma. A mudança importante foi permitir que a definição da linguagem gramatical ficasse fora de cada protocolo que a usava. A reutilização ganhou uma referência citável. Já as afirmações sobre implementações continuaram dependendo de evidências das próprias implementações.

Fontes: RFC 2234; registro da RFC 2234 no Datatracker; histórico da RFC 2234; registro da RFC 2234 no RFC Editor; RFC 733; RFC 822; RFC 4234; registro da RFC 4234 no RFC Editor; RFC 5234; registro da RFC 5234 no RFC Editor; RFC 7405; RFC 2119; Lu Heng sobre primazia do código em execução; Lu Heng sobre especificação inicial mínima; Lu Heng sobre camadas da realidade.