Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3584 sourcerer 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