Hi,
I've now gone through Bruce Lilly's suggested changes to the RFC 2822
grammar.
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]
second]
Better:
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)
to
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
airport.
Arnt