[css3-syntax]

The expanded grammar in 11.1[1] can be improved a (tiny) bit, I think. 
My colleague Yves Lafon found the following problem and solution:

The rule for "stylesheet" includes [S|CDO|CDC]* after "import" 
but "import" itself already includes an S* at the end. That means that 
the spaces after an @import rule are ambiguous: are they the S* 
of "import" or are they the [S|CDO|CDC]* of "stylesheet"?

    stylesheet
      : [ CHARSET_SYM S* STRING S* ';' ]?
        [S|CDO|CDC]* [ import [S|CDO|CDC]* ]*
        [ namespace [S|CDO|CDC]* ]*
        [ [ ruleset | media | page | font_face ] [S|CDO|CDC]* ]*
      ;
    import
      : IMPORT_SYM S*
        [STRING|URI] S* [ medium [ ',' S* medium]* ]? ';' S*
      ;

The same applies to spaces at the end 
of "namespace", "ruleset", "page", "font_face" and "media".

It doesn't matter what a parser does with the ambiguity, because the 
presence of those spaces has no influence on the meaning of the rules, 
but it's nevertheless an ambiguity that can be avoided, if only to 
reduce the amount of headscratching by implementers.

My proposal is to replace [S|CDO|CDC]* by [[CDO|CDC] S*]* in three 
places:

    stylesheet
      : [ CHARSET_SYM S* STRING S* ';' ]?
        [S|CDO|CDC]* [ import [[CDO|CDC] S*]* ]*
        [ namespace [[CDO|CDC] S*]* ]*
        [ [ ruleset | media | page | font_face ] [[CDO|CDC] S*]* ]*
      ;

Yacc-like parsers effectively already do it like this, because of the 
way they resolve conflicts automatically.

Did I overlook anything?

[1] http://www.w3.org/TR/2003/WD-css3-syntax-20030813/#grammar0



Bert
-- 
  Bert Bos                                ( W 3 C ) http://www.w3.org/
  http://www.w3.org/people/bos                               W3C/ERCIM
  bert@w3.org                             2004 Rt des Lucioles / BP 93
  +33 (0)4 92 38 76 92            06902 Sophia Antipolis Cedex, France

Received on Friday, 14 March 2008 16:55:01 UTC