RE: Comments

stylesheet
  : [ CHARSET_SYM [comment|S]* STRING [comment|S]* ';'
]?
    [comment|S|CDO|CDC]* [ import [comment|S|CDO|CDC]*
]*
    [ [ ruleset | media | page | font_face ]
[comment|S|CDO|CDC]* ]*
  ;
import
  : IMPORT_SYM [comment|S]*
    [STRING|URI] [comment|S]* [ medium [ ','
[comment|S]* medium]* ]? ';' [comment|S]*
  ;
media
  : MEDIA_SYM [comment|S]* medium [ ',' [comment|S]*
medium ]* '{' [comment|S]* ruleset* '}' [comment|S]*
  ;
medium
  : IDENT [comment|S]*
  ;
page
  : PAGE_SYM [comment|S]* IDENT? pseudo_page?
[comment|S]*
    '{' [comment|S]* declaration [ ';' [comment|S]*
declaration ]* '}' [commnent|S]*
  ;
pseudo_page
  : ':' IDENT
  ;
font_face
  : FONT_FACE_SYM [comment|S]*
    '{' [comment|S]* declaration [ ';' [comment|S]*
declaration ]* '}' [comment|S]*
  ;
operator
  : '/' [comment|S]* | ',' [comment|S]* | /* empty */
  ;
combinator
  : '+' [comment|S]* | '>' [comment|S]* | /* empty */
  ;
unary_operator
  : '-' | '+'
  ;
property
  : IDENT [comment|S]*
  ;
ruleset
  : selector [ ',' [comment|S]* selector ]*
    '{' [comment|S]* declaration [ ';' [comment|S]*
declaration ]* '}' [comment|S]*
  ;
selector
  : simple_selector [ combinator simple_selector ]*
  ;
simple_selector
  : element_name? [comment]* [ HASH | class | attrib |
pseudo ]* [comment|S*]
  ;
class
  : '.' [comment]* IDENT
  ;
element_name
  : IDENT | '*'
  ;
attrib
  : '[' [comment|S]* IDENT [comment|S]* [ [ '=' |
INCLUDES | DASHMATCH ] [comment|S]*
    [ IDENT | STRING ] [comment|S]* ]? ']'
  ;
pseudo
  : ':' [comment]* [ IDENT | FUNCTION [comment|S]*
IDENT [comment|S]* ')' ]
  ;
declaration
  : property ':' expr [prio [comment|S]*]?
  | /* empty */
  ;
prio
  : IMPORTANT_SYM S*
  ;
expr
  : term [ operator term ]*
  ;
term
  : unary_operator?
    [ NUMBER [comment|S]* | PERCENTAGE [comment|S]* |
LENGTH [comment|S]* | EMS [comment|S]* | EXS
[comment|S]* | ANGLE [comment|S]* |
      TIME [comment|S]* | FREQ [comment|S]* | function
]
  | STRING [comment|S]* | IDENT [comment|S]* | URI
[comment|S]* | RGB [comment|S]* | UNICODERANGE
[comment|S]* | hexcolor
  ;
function
  : FUNCTION [comment|S]* expr ')' [comment|S]*
  ;
/*
 * There is a constraint on the color that it must
 * have either 3 or 6 hex-digits (i.e., [0-9a-fA-F])
 * after the "#"; e.g., "#000" is OK, but "#abcd" is
not.
 */
hexcolor
  : HASH [comment|S]*
  ;

comment
  :
'/*' COMMMENTDATA '*/'
  ;


This seems a better approach, although there is a
different (and IMHO better) option:

1. define SEMICOLON, OPENCURLYBRACKET, etc., tokens so
that everything is a series of tokens.

Note that the above grammar would change the validity
of certain comment locations - at present, P/* comment
*/.class isn't valid, since it is element_name
followed by class, where element_name is an IDENT
token and class is a '.' literal and an IDENT token.

It seems that two things must be done:

1. make everything into tokens
2. include comments in the grammar - it is claimed
that they are left out for readability, but the CSS
grammar is hardly a page turner - readability is not
very important, but ease of use by parsers is, and the
ambiguity resulting from omission of comments and
incomplete use of tokens is serious.


=====
----------------------------------------------------------
From Matthew Brealey (http://members.tripod.co.uk/lawnet (for law)or http://members.tripod.co.uk/lawnet/WEBFRAME.HTM (for CSS))
__________________________________________________
Do You Yahoo!?
Thousands of Stores.  Millions of Products.  All in one place.
Yahoo! Shopping: http://shopping.yahoo.com

Received on Tuesday, 14 December 1999 09:27:20 UTC