Re: [CSS21][CSS3] Grammar Error

Mark:
> On Thu, Sep 2, 2010 at 1:32 PM, Jorrit Vermeiren <mercator+w3c@gmail.com> wrote:
>> On Thu, Sep 2, 2010 at 09:49, Mark <markjord@gmail.com> wrote:
>>> 
>>> ruleset
>>>  : selector [ ',' S* selector ]*
>>>    '{' S* declaration? [ ';' S* declaration? ]* '}' S*
>> 
>> selector
>>  : simple_selector [ combinator selector | S+ [ combinator? selector ]? ]?
> 
> If I only have a simple_selector, how is it taken care of?

You only have only a ‘simple_selector’ if there’s no space betweeen it and the opening brace, otherwise you have ‘simple_selector S+’ as ‘selector’. There’s no problem, although I agree that ‘S*’ in front of the brace would look more intuitive, when you consider the space a divider and not part of the selector. I think you could then remove one question mark:

  ruleset
   : selector [ ',' S* selector ]*
     S* '{' S* declaration? [ ';' S* declaration? ]* '}' S*

  selector
   : simple_selector [ combinator selector | S+ [ combinator? selector ] ]?

Note that there’s also no explicit ‘S*’ in front of the closing brace or the semicolon, because most productions end with ‘S*’ anyhow.

PS: I believe grammars would become more human readable if phrases like 
      '{' S* declaration? [ ';' S* declaration? ]* '}'
    could be shortened to
      '{' [ [ ';' ]^ S* declaration? ]* '}'
    where ‘X^’ meant exactly one ‘X’, but no ‘X’ in the first instance of the parent group.

Received on Friday, 3 September 2010 10:08:02 UTC