Re: ABNF switch: list rules

On Sat, 24 May 2008 10:10:12 +0200
Julian Reschke <julian.reschke@gmx.de> wrote:

> > AC-QValue = ";" "q" "=" qvalue
> > AC-Type = (charset | "*")
> > AC-Expression = AC-Type [AC-QValue]
> > AC-Element = *LWS [AC-Expression] [","]
> > Accept-Charset = "Accept-Charset" ":" *(AC-Element)
 
> > "AC is 'Accept-Charset:' followed by any number of elements.  Elements
> > have any amount of leading white-space, an optional expression, and an
> > optional comma.  Expressions have a type and optional q-value."
> 
> Right, but RFC2616 requires that the list includes at least one 
> none-empty element :-)

Well, if it were a programming language I would say that's for
semantic analysis, rather than trying to cram that into the parser.
But yes, my version doesn't do that.

   AC-f = ( ( charset | "*" )[ ";" "q" "=" qvalue ] )
   AC-e = *LWS AC-f
   COMMA = *LWS ","

   Accept-Charset = "Accept-Charset" ":" *COMMA AC-e *( COMMA [ AC-e ])

And looking at your's that's the way you have to do it to
enforce at least one element in the list.  Interesting.

On another note, is there a reason why it's specified this way with
the allowed empty elements at random locations? 

It makes more sense to just not send anything that'd be empty, rather
than using empty elements.  In theory someone could just stream a ton of
',' to make the server do useless work, which could thwart some poorly
implemented parsers.

I'm curious about the history if anyone knows it.

-- 
Zed A. Shaw
- Hate: http://savingtheinternetwithhate.com/
- Good: http://www.zedshaw.com/
- Evil: http://yearofevil.com/

Received on Saturday, 24 May 2008 09:12:29 UTC