[Top] [All Lists]

Re: Revisiting RFC 2822 grammar

2004-01-15 11:09:11


I've now gone through Bruce Lilly's suggested changes to the RFC 2822 

Generally, changes mostly seem to be removal of FWS and CFWS to the 
left of other tokens. For example, in "From: A b <c(_at_)d(_dot_)ef>" 2822 
permits the space after b to be matched by either the trailing [CFWS] 
in the Atom rule or by leading one in angle-addr. Bruce changes the 
grammar such that there aren't leading CFWS/FWS invocations, and adds 
other CFWS/FWS invocations in other places to compensate.

In general I like his changes. (I didn't expect to. 2822 is not some 
draft-blah-blah-00 whose syntax may be changed lightly.) There are 
some details, though. As always.

1. Bruce elimites obs-qp, even though it can match a few pairs 
quoted-pair cannot, such as "\" DEL.

2. I think I found a case in which Bruce permits CFWS where it wasn't 
before, although I cannot decipher my very cramped margin notes. It 
was something like "To: blah: (cfws) a(_at_)b(_dot_)org;".

3. The date syntax is reordered, and four-digit years seem to have 
disappeared from the obsolete syntax. This looks like a good idea:

  obs-year = 2DIGIT / 4DIGIT

4. obs-time-of-day looks wrong.

  obs-time-of-day = hour [CFWS] ":" [CFWS] minute [CFWS] ":" [[CFWS]


  obs-time-of-day = hour [CFWS] ":" [CFWS] minute [CFWS] [":" [CFWS] second]

5. obs-received merits discussion on its own. RFC 2822 says

  obs-received = "Received" *WSP ":" name-val-list CRLF

which Bruce changes to

  obs-received = "Received" *WSP ":" [CFWS] name-val-list [ ";" [CFWS] 
obs-date-time ] CRLF

An incompatible change, but perhaps correct.

6. I don't like Bruce's changes to subject. They mix in RFC 1036 
syntax, which IMO does not belong in 2822.

7. There may be a few cases where FWS in 2822 is replced by CWFS in 
Bruce's grammar. It's a little hard to tell. For example, in Bruce's 
grammar there always is CFWS following field-name ":", I'm not sure 
the same holds for 2822. It may.

8. obs-domain-list is changed in a way I don't understand, from

  obs-domain-list = "@" domain *(*(CFWS / "," ) [CFWS] "@" domain)


  obs-domain-list = "@" [CFWS] domain *(1*("," [CFWS]) "@" [CFWS] domain)

I may have missed something; I did this on the airplane and finished 
typing it down after arriving 20 hours late. I do not like the Mumbai