What does the ampersand mean in RFC 822's BNF rules?

163 Views Asked by At

The IETF RFC 822 has these BNF rules:

text        =  <any CHAR, including bare         ; => atoms, specials,
                CR & bare LF, but NOT            ;  comments and
                including CRLF>                  ;  quoted-strings are
                                                 ;  NOT recognized.

qtext       =  <any CHAR excepting <">,          ; => may be folded
                "\" & CR, and including
                linear-white-space>

dtext       =  <any CHAR excluding "[",          ; => may be folded
                "]", "\" & CR, & including 
                linear-white-space>

I'd like to know what the ampersand symbol & signifies in these rules. The ampersand symbol is not defined by RFC 822's own Notational Conventions section (Section 2). I assume RFC 822 is using RFC 733 for its BNF/ABNF, but RFC 733 doesn't define what the ampersand means either.

From the context I've determined the ampersand does not mean any of the following:

  • List item separator (that's what a comma is for, and the ampersand does not represent the final conjunction in an Oxford Comma-style expression because we see the & prior to the last , in the text rule).
    • And if it is a list-item separator, how should it be interpreted in the case of dtext?
  • Concatenation (because a concatenation is described by having two adjacent production rules with no operator between them).
    • Additionally because CRLF is already a concatenation of CR and LF, but RFC 822 differentiates between CRLF and bare CR & bare LF in the text rule.

There's no mention of this in RFC 822's errata - and RFC's successor RFCs like 2822 replace the rules with ampersands with entirely new rules, so I can't infer what it means from the new syntax eithe.

So what does & mean?

1

There are 1 best solutions below

3
On BEST ANSWER

Shorthand English word "and". It even observes English punctuation rules.

Compare the 2 definitions from RFC 822:

     qtext       =  <any CHAR excepting <">,     ; => may be folded
                     "\" & CR, and including
                     linear-white-space>

     dtext       =  <any CHAR excluding "[",     ; => may be folded
                     "]", "\" & CR, & including
                     linear-white-space>