Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. Expanded grammar rules
  2. ======================
  3.  
  4. This file provides a fully-expanded version of (a slightly modified)
  5. forward-compatible CSS grammar. See CSS3 Syntax $4.3.2 for the compact version.
  6.  
  7. start         -> ws stylesheet EOF
  8.  
  9. stylesheet    -> CDO ws stylesheet
  10. stylesheet    -> CDC ws stylesheet
  11. stylesheet    -> statement stylesheet
  12. stylesheet    ->
  13.  
  14. statement     -> ruleset
  15. statement     -> at-rule
  16.  
  17. ruleset       -> selector '{' ws ruleset-end
  18. ruleset       -> '{' ws ruleset-end
  19.  
  20. ruleset-end   -> declaration decl-list '}' ws
  21. ruleset-end   -> decl-list '}' ws
  22.  
  23. at-rule       -> ATKEYWORD ws any0 at-rule-end
  24.  
  25. at-rule-end   -> block
  26. at-rule-end   -> ';' ws
  27.  
  28. block         -> '{' ws block-content '}' ws
  29.  
  30. block-content -> any block-content
  31. block-content -> block block-content
  32. block-content -> ATKEYWORD ws block-content
  33. block-content -> ';' ws block-content
  34. block-content ->
  35.  
  36. selector      -> any1
  37.  
  38. declaration   -> property ':' ws value1
  39.  
  40. decl-list     -> ';' ws decl-list-end
  41. decl-list     ->
  42.  
  43. decl-list-end -> declaration decl-list
  44. decl-list-end -> decl-list
  45.  
  46. property      -> IDENT ws
  47.  
  48. value0        -> value value0
  49. value0        ->
  50.  
  51. value1        -> value value0
  52.  
  53. value         -> any
  54. value         -> block
  55. value         -> ATKEYWORD ws
  56.  
  57. any0          -> any any0
  58. any0          ->
  59.  
  60. any1          -> any any0
  61.  
  62. any           -> IDENT ws
  63. any           -> NUMBER ws
  64. any           -> PERCENTAGE ws
  65. any           -> DIMENSION ws
  66. any           -> STRING ws
  67. any           -> CHAR ws
  68. any           -> URI ws
  69. any           -> HASH ws
  70. any           -> UNICODE-RANGE ws
  71. any           -> INCLUDES ws
  72. any           -> DASHMATCH ws
  73. any           -> PREFIXMATCH ws
  74. any           -> SUFFIXMATCH ws
  75. any           -> SUBSTRINGMATCH ws
  76. any           -> FUNCTION ws any0 ')' ws
  77. any           -> '(' ws any0 ')' ws
  78. any           -> '[' ws any0 ']' ws
  79.  
  80. ws            -> S ws
  81. ws            ->
  82.  
  83. Differences from the specification
  84. ----------------------------------
  85.  
  86. 1) The start non-terminal has been introduced. It eats any leading whitespace
  87.    and handles EOF.
  88. 2) The "stylesheet -> S stylesheet" production has been removed.
  89. 3) The "stylesheet -> CDO stylesheet" production has been changed to
  90.    "stylesheet -> CDO ws stylesheet".
  91. 4) The "stylesheet -> CDC stylesheet" production has been changed to
  92.    "stylesheet -> CDC ws stylesheet".
  93.  
  94. Essentially, the above changes remove the expectation of leading whitespace
  95. from the stylesheet non-terminal. This is handled by either the start
  96. non-terminal, or by the changes made to the production rules for the stylesheet
  97. non-terminal. Note that the "stylesheet -> statement stylesheet" production
  98. does not require modification as the statement production rule already consumes
  99. any whitespace following the statement.
  100.  
  101. If '{', '}', '[', ']', '(', ')', and ';' are omitted from any, then the above
  102. grammar is LL(1).
  103.  
  104. Nullable productions
  105. --------------------
  106.  
  107. stylesheet, block-content, decl-list, decl-list-end, value0, any0, ws
  108.  
  109. FIRST sets
  110. ----------
  111.  
  112. start           CDO, CDC, S, IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING,
  113.                 CHAR, URI, HASH, UNICODE-RANGE, INCLUDES, DASHMATCH,
  114.                 PREFIXMATCH, SUFFIXMATCH, SUBSTRINGMATCH, FUNCTION, '(',
  115.                 '[', '{', ATKEYWORD, EOF
  116. stylesheet      CDO, CDC, IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING,
  117.                 CHAR, URI, HASH, UNICODE-RANGE, INCLUDES, DASHMATCH,
  118.                 PREFIXMATCH, SUFFIXMATCH, SUBSTRINGMATCH, FUNCTION, '(',
  119.                 '[', '{', ATKEYWORD
  120. statement       IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING, CHAR, URI, HASH,
  121.                 UNICODE-RANGE, INCLUDES, DASHMATCH, PREFIXMATCH, SUFFIXMATCH,
  122.                 SUBSTRINGMATCH, FUNCTION, '(', '[', '{', ATKEYWORD
  123. ruleset         IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING, CHAR, URI, HASH,
  124.                 UNICODE-RANGE, INCLUDES, DASHMATCH, PREFIXMATCH, SUFFIXMATCH,
  125.                 SUBSTRINGMATCH, FUNCTION, '(', '[', '{'
  126. ruleset-end     IDENT, ';'
  127. at-rule         ATKEYWORD
  128. at-rule-end     '{', ';'
  129. block           '{'
  130. block-content   IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING, CHAR, URI, HASH,
  131.                 UNICODE-RANGE, INCLUDES, DASHMATCH, PREFIXMATCH, SUFFIXMATCH,
  132.                 SUBSTRINGMATCH, FUNCTION, '(', '[', '{', ATKEYWORD, ';'
  133. selector        IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING, CHAR, URI, HASH,
  134.                 UNICODE-RANGE, INCLUDES, DASHMATCH, PREFIXMATCH, SUFFIXMATCH,
  135.                 SUBSTRINGMATCH, FUNCTION, '(', '['
  136. declaration     IDENT
  137. decl-list       ';', '}'
  138. decl-list-end   IDENT, ';', '}'
  139. property        IDENT
  140. value0          IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING, CHAR, URI, HASH,
  141.                 UNICODE-RANGE, INCLUDES, DASHMATCH, PREFIXMATCH, SUFFIXMATCH,
  142.                 SUBSTRINGMATCH, FUNCTION, '(', '[', '{', ATKEYWORD
  143. value1          IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING, CHAR, URI, HASH,
  144.                 UNICODE-RANGE, INCLUDES, DASHMATCH, PREFIXMATCH, SUFFIXMATCH,
  145.                 SUBSTRINGMATCH, FUNCTION, '(', '[', '{', ATKEYWORD
  146. value           IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING, CHAR, URI, HASH,
  147.                 UNICODE-RANGE, INCLUDES, DASHMATCH, PREFIXMATCH, SUFFIXMATCH,
  148.                 SUBSTRINGMATCH, FUNCTION, '(', '[', '{', ATKEYWORD
  149. any0            IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING, CHAR, URI, HASH,
  150.                 UNICODE-RANGE, INCLUDES, DASHMATCH, PREFIXMATCH, SUFFIXMATCH,
  151.                 SUBSTRINGMATCH, FUNCTION, '(', '['
  152. any1            IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING, CHAR, URI, HASH,
  153.                 UNICODE-RANGE, INCLUDES, DASHMATCH, PREFIXMATCH, SUFFIXMATCH,
  154.                 SUBSTRINGMATCH, FUNCTION, '(', '['
  155. any             IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING, CHAR, URI, HASH,
  156.                 UNICODE-RANGE, INCLUDES, DASHMATCH, PREFIXMATCH, SUFFIXMATCH,
  157.                 SUBSTRINGMATCH, FUNCTION, '(', '['
  158. ws              S
  159.  
  160. FOLLOW sets
  161. -----------
  162.  
  163. start
  164. stylesheet      EOF
  165. statement       CDO, CDC, IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING,
  166.                 CHAR, URI, HASH, UNICODE-RANGE, INCLUDES, DASHMATCH,
  167.                 PREFIXMATCH, SUFFIXMATCH, SUBSTRINGMATCH, FUNCTION, '(',
  168.                 '[', '{', ATKEYWORD, EOF
  169. ruleset         CDO, CDC, IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING,
  170.                 CHAR, URI, HASH, UNICODE-RANGE, INCLUDES, DASHMATCH,
  171.                 PREFIXMATCH, SUFFIXMATCH, SUBSTRINGMATCH, FUNCTION, '(',
  172.                 '[', '{', ATKEYWORD, EOF
  173. ruleset-end     CDO, CDC, IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING,
  174.                 CHAR, URI, HASH, UNICODE-RANGE, INCLUDES, DASHMATCH,
  175.                 PREFIXMATCH, SUFFIXMATCH, SUBSTRINGMATCH, FUNCTION, '(',
  176.                 '[', '{', ATKEYWORD, EOF
  177. at-rule         CDO, CDC, IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING,
  178.                 CHAR, URI, HASH, UNICODE-RANGE, INCLUDES, DASHMATCH,
  179.                 PREFIXMATCH, SUFFIXMATCH, SUBSTRINGMATCH, FUNCTION, '(',
  180.                 '[', '{', ATKEYWORD, EOF
  181. at-rule-end     CDO, CDC, IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING,
  182.                 CHAR, URI, HASH, UNICODE-RANGE, INCLUDES, DASHMATCH,
  183.                 PREFIXMATCH, SUFFIXMATCH, SUBSTRINGMATCH, FUNCTION, '(',
  184.                 '[', '{', ATKEYWORD, EOF
  185. block           CDO, CDC, IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING,
  186.                 CHAR, URI, HASH, UNICODE-RANGE, INCLUDES, DASHMATCH,
  187.                 PREFIXMATCH, SUFFIXMATCH, SUBSTRINGMATCH, FUNCTION, '(',
  188.                 '[', '{', ATKEYWORD, EOF, ';', '}'
  189. block-content   '}'
  190. selector        '{'
  191. declaration     ';', '}'
  192. decl-list       '}'
  193. decl-list-end   '}'
  194. property        ':'
  195. value0          ';', '}'
  196. value1          ';', '}'
  197. value           IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING, CHAR, URI, HASH,
  198.                 UNICODE-RANGE, INCLUDES, DASHMATCH, PREFIXMATCH, SUFFIXMATCH,
  199.                 SUBSTRINGMATCH, FUNCTION, '(', '[', '{', ATKEYWORD, ';', '}'
  200. any0            '{', ';', ')', ']'
  201. any1            '{'
  202. any             IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING, CHAR, URI, HASH,
  203.                 UNICODE-RANGE, INCLUDES, DASHMATCH, PREFIXMATCH, SUFFIXMATCH,
  204.                 SUBSTRINGMATCH, FUNCTION, '(', '[', '{', ';', ATKEYWORD, '}'
  205. ws              CDO, CDC, IDENT, NUMBER, PERCENTAGE, DIMENSION, STRING,
  206.                 CHAR, URI, HASH, UNICODE-RANGE, INCLUDES, DASHMATCH,
  207.                 PREFIXMATCH, SUFFIXMATCH, SUBSTRINGMATCH, FUNCTION, '(',
  208.                 '[', '{', ATKEYWORD, EOF, ';', '}', ':'
  209.  
  210.  
  211.