yapp 5.1.19 → 5.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/example.js +5 -5
- package/lib/colours.js +1 -1
- package/lib/constants.js +1 -1
- package/lib/customEventTypes.js +1 -1
- package/lib/defaults.js +1 -1
- package/lib/div/gutter.js +1 -1
- package/lib/div/lineNumbers.js +1 -1
- package/lib/div/pretty.js +1 -1
- package/lib/div/syntax.js +1 -1
- package/lib/example/constants.js +1 -1
- package/lib/example/view/div/sizeable/left.js +1 -1
- package/lib/example/view/div/sizeable/middle.js +1 -1
- package/lib/example/view/div/sizeable/right.js +1 -1
- package/lib/example/view/div/sizeable/top.js +1 -1
- package/lib/example/view/input.js +1 -1
- package/lib/example/view/javascript.js +1 -1
- package/lib/example/view/json.js +1 -1
- package/lib/example/view/plainText.js +1 -1
- package/lib/example/view/subHeading.js +1 -1
- package/lib/example/view/textarea/bnf.js +1 -1
- package/lib/example/view/textarea/lexicalEntries.js +1 -1
- package/lib/example/view/textarea/parseTree.js +1 -1
- package/lib/example/view/textarea/tokens.js +1 -1
- package/lib/example/view/textarea.js +1 -1
- package/lib/example/view/xml.js +1 -1
- package/lib/example/view.js +1 -1
- package/lib/example/yapp.js +1 -1
- package/lib/example.js +1 -1
- package/lib/index.js +1 -1
- package/lib/languages.js +1 -1
- package/lib/lexer/javascript.js +1 -1
- package/lib/lexer/json.js +1 -1
- package/lib/lexer/plainText.js +1 -1
- package/lib/lexer/xml.js +1 -1
- package/lib/mixins/style.js +1 -1
- package/lib/parser/javascript.js +2 -2
- package/lib/parser/json.js +2 -2
- package/lib/parser/plainText.js +2 -2
- package/lib/parser/xml.js +2 -2
- package/lib/plugin/javascript.js +1 -1
- package/lib/plugin/json.js +1 -1
- package/lib/plugin/plainText.js +1 -1
- package/lib/plugin/xml.js +1 -1
- package/lib/plugin.js +1 -1
- package/lib/prettyPrinter.js +1 -1
- package/lib/processor/javascript.js +1 -1
- package/lib/processor/json.js +1 -1
- package/lib/processor/plainText.js +1 -1
- package/lib/processor/xml.js +1 -1
- package/lib/processor.js +1 -1
- package/lib/renderYappStyles.js +1 -1
- package/lib/richTextarea.js +1 -1
- package/lib/scheme/colour.js +1 -1
- package/lib/scheme/syntax/default.js +1 -1
- package/lib/scheme/syntax/javaScript.js +1 -1
- package/lib/scheme/syntax/json.js +1 -1
- package/lib/scheme/syntax/xml.js +1 -1
- package/lib/style/firaCode.js +1 -1
- package/lib/style/syntax/default.js +1 -1
- package/lib/style/syntax/javaScript.js +1 -1
- package/lib/style/syntax/json.js +1 -1
- package/lib/style/syntax/xml.js +1 -1
- package/lib/style/syntax.js +1 -1
- package/lib/style/yapp.js +1 -1
- package/lib/styles.js +1 -1
- package/lib/token/significant/argument.js +1 -1
- package/lib/token/significant/attribute.js +1 -1
- package/lib/token/significant/comment.js +1 -1
- package/lib/token/significant/error.js +1 -1
- package/lib/token/significant/jsx/attributeName.js +1 -1
- package/lib/token/significant/jsx/tagName.js +1 -1
- package/lib/token/significant/name.js +1 -1
- package/lib/token/significant/string.js +1 -1
- package/lib/token/significant/variable.js +1 -1
- package/lib/tokenTypes.js +1 -1
- package/lib/utilities/configuration.js +1 -1
- package/lib/utilities/content.js +1 -1
- package/lib/utilities/css.js +1 -1
- package/lib/utilities/element.js +1 -1
- package/lib/utilities/plugin.js +1 -1
- package/lib/utilities/rules.js +1 -1
- package/lib/utilities/scrollbar.js +1 -1
- package/lib/utilities/tokens.js +1 -1
- package/lib/yapp.js +1 -1
- package/package.json +1 -1
- package/src/parser/javascript.js +112 -124
- package/src/parser/json.js +7 -7
- package/src/parser/plainText.js +1 -1
- package/src/parser/xml.js +15 -15
package/src/parser/javascript.js
CHANGED
|
@@ -8,276 +8,264 @@ const { rulesFromBNF, parserFromRules } = parserUtilities;
|
|
|
8
8
|
|
|
9
9
|
const bnf = `
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
javaScript ::= preamble? ( statement | function | class | error )* ;
|
|
12
12
|
|
|
13
13
|
|
|
14
|
+
preamble ::= "\\"use strict\\";" ;
|
|
14
15
|
|
|
15
|
-
preamble ::= "\\"use strict\\";" ;
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
statement ::= statementBody... ";"
|
|
17
|
+
statement ::= statementBody... ";"
|
|
20
18
|
|
|
21
|
-
|
|
19
|
+
| "{" ( statement | function )* "}"
|
|
22
20
|
|
|
23
|
-
|
|
21
|
+
| "if" "(" expression... ")" statement ( "else" statement )?
|
|
24
22
|
|
|
25
|
-
|
|
23
|
+
| "for" ( ( "(" initialiser ( ";" expression )? ( ";" expression )? ")" statement )
|
|
26
24
|
|
|
27
|
-
|
|
25
|
+
| ( "(" variable "in" expression... ")" statement )
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
)
|
|
27
|
+
| ( "await"? "(" variable "of" expression... ")" statement ) )
|
|
32
28
|
|
|
33
|
-
|
|
29
|
+
| "do" statement "while" "(" expression... ")"
|
|
34
30
|
|
|
35
|
-
|
|
31
|
+
| "while" "(" expression... ")" statement
|
|
36
32
|
|
|
37
|
-
|
|
33
|
+
| "switch" "(" expression... ")" "{" case* defaultCase? "}"
|
|
38
34
|
|
|
39
|
-
|
|
35
|
+
| try ( ( catch* finally ) | catch+ )
|
|
36
|
+
|
|
37
|
+
;
|
|
40
38
|
|
|
41
|
-
;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
39
|
|
|
46
|
-
class
|
|
40
|
+
class ::= ( "export" "default"? )? "class" name classBody
|
|
47
41
|
|
|
48
|
-
|
|
42
|
+
| "export" "default" "class" classBody
|
|
49
43
|
|
|
50
|
-
|
|
44
|
+
;
|
|
51
45
|
|
|
52
46
|
|
|
53
|
-
|
|
54
|
-
function ::= ( "export" "default"? )? "async"? "function" name functionBody
|
|
47
|
+
function ::= ( "export" "default"? )? "async"? "function" name functionBody
|
|
55
48
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
;
|
|
49
|
+
| "export" "default" "async"? "function" functionBody
|
|
59
50
|
|
|
51
|
+
;
|
|
60
52
|
|
|
61
53
|
|
|
62
|
-
statementBody
|
|
54
|
+
statementBody ::= "import" ( [string-literal]
|
|
63
55
|
|
|
64
|
-
|
|
56
|
+
| ( name "from" [string-literal] )
|
|
65
57
|
|
|
66
|
-
|
|
58
|
+
| ( "{" names "}" "from" [string-literal] )
|
|
67
59
|
|
|
68
|
-
|
|
60
|
+
| ( "*" "as" name "from" [string-literal] ) )
|
|
69
61
|
|
|
70
|
-
|
|
62
|
+
| "export" ( ( "{" names "}" ( "from" [string-literal] )? )
|
|
71
63
|
|
|
72
|
-
|
|
64
|
+
| ( "const" "{" fields "}" "=" expression )
|
|
73
65
|
|
|
74
|
-
|
|
66
|
+
| ( "{" "default" "}" "from" [string-literal] )
|
|
75
67
|
|
|
76
|
-
|
|
68
|
+
| ( "*" ( "as" name )? "from" [string-literal] ) )
|
|
77
69
|
|
|
78
|
-
|
|
70
|
+
| "export"? ( ( "var" var ( "," var )* )
|
|
79
71
|
|
|
80
|
-
|
|
72
|
+
| ( "let" let ( "," let )* )
|
|
81
73
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
| ( "let" let ( "," let )* )
|
|
85
|
-
|
|
86
|
-
| ( "const" const ( "," const )* )
|
|
87
|
-
|
|
88
|
-
)
|
|
74
|
+
| ( "const" const ( "," const )* ) )
|
|
89
75
|
|
|
90
|
-
|
|
76
|
+
| ( "export" "default" )? expression
|
|
91
77
|
|
|
92
|
-
|
|
78
|
+
| "return" ( ( "(" expression ")" ) | expression? )
|
|
93
79
|
|
|
94
|
-
|
|
80
|
+
| "throw" expression
|
|
95
81
|
|
|
96
|
-
|
|
82
|
+
| "delete" expression
|
|
97
83
|
|
|
98
|
-
|
|
84
|
+
| "break"
|
|
99
85
|
|
|
100
|
-
|
|
86
|
+
| "continue"
|
|
101
87
|
|
|
102
|
-
|
|
88
|
+
| "debugger"
|
|
103
89
|
|
|
104
|
-
|
|
90
|
+
;
|
|
105
91
|
|
|
106
92
|
|
|
93
|
+
functionBody ::= "(" arguments? ")" "{" ( statement | function )* "}" ;
|
|
107
94
|
|
|
108
|
-
functionBody ::= "(" arguments? ")" "{" ( statement | function )* "}" ;
|
|
109
95
|
|
|
96
|
+
classBody ::= ( "extends" name )? "{" ( constructor | method | field )* "}" ;
|
|
110
97
|
|
|
111
98
|
|
|
112
|
-
|
|
99
|
+
constructor ::= "constructor" functionBody ;
|
|
113
100
|
|
|
114
101
|
|
|
102
|
+
method ::= "static"? name functionBody ;
|
|
115
103
|
|
|
116
|
-
constructor ::= "constructor" functionBody ;
|
|
117
104
|
|
|
118
|
-
|
|
105
|
+
field ::= "static"? name "=" expression... ";" ;
|
|
119
106
|
|
|
120
|
-
field ::= "static"? name "=" expression... ";" ;
|
|
121
107
|
|
|
108
|
+
var ::= variable ( "=" expression )? | destructure "=" expression ;
|
|
122
109
|
|
|
123
110
|
|
|
124
|
-
|
|
111
|
+
let ::= variable ( "=" expression )? | destructure "=" expression ;
|
|
125
112
|
|
|
126
|
-
let ::= variable ( "=" expression )? | destructure "=" expression ;
|
|
127
113
|
|
|
128
|
-
const
|
|
114
|
+
const ::= ( variable | destructure ) "=" expression ;
|
|
129
115
|
|
|
130
116
|
|
|
117
|
+
try ::= "try" "{" statement+ "}" ;
|
|
131
118
|
|
|
132
|
-
try ::= "try" "{" statement+ "}" ;
|
|
133
119
|
|
|
134
|
-
catch
|
|
120
|
+
catch ::= "catch" "(" [identifier] ")" "{" statement+ "}" ;
|
|
135
121
|
|
|
136
|
-
finally ::= "finally" "{" statement+ "}" ;
|
|
137
122
|
|
|
123
|
+
finally ::= "finally" "{" statement+ "}" ;
|
|
138
124
|
|
|
139
125
|
|
|
140
|
-
case
|
|
126
|
+
case ::= "case" expression ":" statement ( "break" ";" )? ;
|
|
141
127
|
|
|
142
|
-
defaultCase ::= "default" ":" statement ( "break" ";" )? ;
|
|
143
128
|
|
|
129
|
+
defaultCase ::= "default" ":" statement ( "break" ";" )? ;
|
|
144
130
|
|
|
145
131
|
|
|
146
|
-
initialiser
|
|
132
|
+
initialiser ::= expression | "var" var ( "," var )* | "let" let ( "," let )* ;
|
|
147
133
|
|
|
148
134
|
|
|
135
|
+
destructure ::= "[" variable ( "=" expression )? ( "," variable ( "=" expression )? )* "]"
|
|
149
136
|
|
|
150
|
-
|
|
137
|
+
| "{" variable ( "=" expression )? ( "," variable ( "=" expression )? )* "}"
|
|
151
138
|
|
|
152
|
-
|
|
139
|
+
;
|
|
153
140
|
|
|
154
|
-
;
|
|
155
141
|
|
|
142
|
+
expression ::= jsx
|
|
156
143
|
|
|
144
|
+
| json
|
|
157
145
|
|
|
158
|
-
|
|
146
|
+
| arrowFunction
|
|
159
147
|
|
|
160
|
-
|
|
148
|
+
| templateLiteral
|
|
161
149
|
|
|
162
|
-
|
|
150
|
+
| anonymousFunction
|
|
163
151
|
|
|
164
|
-
|
|
152
|
+
| "(" expression ")"
|
|
165
153
|
|
|
166
|
-
|
|
154
|
+
| "{" ( property ( "," property )* )? "}"
|
|
167
155
|
|
|
168
|
-
|
|
156
|
+
| "[" ( expression ( "," expression )* ","? )? "]"
|
|
169
157
|
|
|
170
|
-
|
|
158
|
+
| "typeof" ( expression | ( "(" expression ")") )
|
|
171
159
|
|
|
172
|
-
|
|
160
|
+
| "void" ( expression | ( "(" expression ")") )
|
|
173
161
|
|
|
174
|
-
|
|
162
|
+
| "new" name<NO_WHITESPACE>"(" expressions? ")"
|
|
175
163
|
|
|
176
|
-
|
|
164
|
+
| [operator]<NO_WHITESPACE>expression
|
|
177
165
|
|
|
178
|
-
|
|
166
|
+
| expression<NO_WHITESPACE>( ( "."<NO_WHITESPACE>name )
|
|
179
167
|
|
|
180
|
-
|
|
168
|
+
| ( "[" expressions "]" )
|
|
181
169
|
|
|
182
|
-
|
|
170
|
+
| ( "(" expressions? ")" )
|
|
183
171
|
|
|
184
|
-
|
|
172
|
+
| templateLiteral
|
|
185
173
|
|
|
186
|
-
|
|
174
|
+
| [operator] )
|
|
187
175
|
|
|
188
|
-
|
|
176
|
+
| expression ( ( [operator] expression )
|
|
189
177
|
|
|
190
|
-
|
|
178
|
+
| ( "?" expression ":" expression )
|
|
191
179
|
|
|
192
|
-
|
|
180
|
+
| ( "instanceof" expression )
|
|
193
181
|
|
|
194
|
-
|
|
182
|
+
| ( "in" expression ) )
|
|
195
183
|
|
|
196
|
-
|
|
184
|
+
| [number]
|
|
197
185
|
|
|
198
|
-
|
|
186
|
+
| variable
|
|
199
187
|
|
|
200
|
-
|
|
188
|
+
| primitive
|
|
201
189
|
|
|
202
|
-
|
|
190
|
+
| importMeta
|
|
203
191
|
|
|
204
|
-
|
|
192
|
+
| [string-literal]
|
|
205
193
|
|
|
206
|
-
|
|
194
|
+
| "super" | "this" | "true" | "false" | "null" | "undefined"
|
|
207
195
|
|
|
208
|
-
|
|
196
|
+
;
|
|
209
197
|
|
|
210
|
-
| importMeta
|
|
211
198
|
|
|
212
|
-
|
|
199
|
+
jsx ::= jsxCompleteTag | jsxStartTag ( jsx | ( "{" expression? "}" ) | string )* jsxEndTag ;
|
|
213
200
|
|
|
214
|
-
| "super" | "this" | "true" | "false" | "null" | "undefined"
|
|
215
201
|
|
|
216
|
-
|
|
202
|
+
jsxCompleteTag ::= "<"<NO_WHITESPACE>name jsxAttribute* "/>" ;
|
|
217
203
|
|
|
218
204
|
|
|
205
|
+
jsxStartTag ::= "<"<NO_WHITESPACE>name jsxAttribute* ">" ;
|
|
219
206
|
|
|
220
|
-
jsx ::= jsxCompleteTag | jsxStartTag ( jsx | ( "{" expression? "}" ) | string )* jsxEndTag ;
|
|
221
207
|
|
|
222
|
-
|
|
208
|
+
jsxEndTag ::= "</"<NO_WHITESPACE>name ">" ;
|
|
223
209
|
|
|
224
|
-
jsxStartTag ::= "<"<NO_WHITESPACE>name jsxAttribute* ">" ;
|
|
225
210
|
|
|
226
|
-
|
|
211
|
+
jsxAttribute ::= name ( <NO_WHITESPACE>"=" ( ( <NO_WHITESPACE>[string-literal] ) | ( <NO_WHITESPACE>"{" expression "}" ) ) )? ;
|
|
227
212
|
|
|
228
|
-
jsxAttribute ::= name ( <NO_WHITESPACE>"=" ( ( <NO_WHITESPACE>[string-literal] ) | ( <NO_WHITESPACE>"{" expression "}" ) ) )? ;
|
|
229
213
|
|
|
214
|
+
json ::= jsonArray | jsonObject ;
|
|
230
215
|
|
|
231
216
|
|
|
232
|
-
|
|
217
|
+
jsonArray ::= "[" ( jsonElement ( "," jsonElement )* )? "]" ;
|
|
233
218
|
|
|
234
|
-
jsonArray ::= "[" ( jsonElement ( "," jsonElement )* )? "]" ;
|
|
235
219
|
|
|
236
|
-
jsonObject
|
|
220
|
+
jsonObject ::= "{" ( [string-literal] ":" jsonElement ( "," [string-literal] ":" jsonElement )* )? "}" ;
|
|
237
221
|
|
|
238
|
-
jsonElement ::= json | [string-literal] | [number] | "true" | "false" | "null" ;
|
|
239
222
|
|
|
223
|
+
jsonElement ::= json | [string-literal] | [number] | "true" | "false" | "null" ;
|
|
240
224
|
|
|
241
225
|
|
|
242
|
-
arrowFunction
|
|
226
|
+
arrowFunction ::= "(" arguments? ")" "=>" ( expression | ( "{" statement* "}" ) ) ;
|
|
243
227
|
|
|
244
228
|
|
|
229
|
+
templateLiteral ::= "\`" ( ( "\${" expression? "}" ) | string )* "\`" ;
|
|
230
|
+
|
|
245
231
|
|
|
246
|
-
|
|
232
|
+
string ::= ( [number] | [special] | [operator]| [keyword] | [identifier] | [string-literal]| [broken-string-literal] | [unassigned] )+ ;
|
|
247
233
|
|
|
248
234
|
|
|
235
|
+
property ::= ( ( ( name | [string-literal] ) ":" expression ) | variable ) ;
|
|
249
236
|
|
|
250
|
-
string ::= ( [number] | [special] | [operator]| [keyword] | [identifier] | [string-literal]| [broken-string-literal] | [unassigned] )+ ;
|
|
251
237
|
|
|
252
|
-
|
|
238
|
+
importMeta ::= "import"<NO_WHITESPACE>"."<NO_WHITESPACE>"meta" ;
|
|
253
239
|
|
|
254
|
-
importMeta ::= "import"<NO_WHITESPACE>"."<NO_WHITESPACE>"meta" ;
|
|
255
240
|
|
|
241
|
+
expressions ::= expression ( "," expression )* ;
|
|
256
242
|
|
|
257
243
|
|
|
258
|
-
|
|
244
|
+
arguments ::= spreadArgument | ( argument ( "," argument )* ( "," spreadArgument )? ) ;
|
|
259
245
|
|
|
260
|
-
arguments ::= spreadArgument | ( argument ( "," argument )* ( "," spreadArgument )? ) ;
|
|
261
246
|
|
|
262
|
-
fields
|
|
247
|
+
fields ::= name ( ":" name )? ( "," name ( ":" name )? )* ;
|
|
263
248
|
|
|
264
|
-
names ::= name ( "as" name )? ( "," name ( "as" name )? )* ;
|
|
265
249
|
|
|
250
|
+
names ::= name ( "as" name )? ( "," name ( "as" name )? )* ;
|
|
266
251
|
|
|
267
252
|
|
|
268
|
-
spreadArgument
|
|
253
|
+
spreadArgument ::= "..."<NO_WHITESPACE>variable ;
|
|
254
|
+
|
|
269
255
|
|
|
270
|
-
argument
|
|
256
|
+
argument ::= variable ( "=" expression )? ;
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
variable ::= [identifier] ;
|
|
271
260
|
|
|
272
|
-
variable ::= [identifier] ;
|
|
273
261
|
|
|
274
|
-
label
|
|
262
|
+
label ::= [identifier] ;
|
|
275
263
|
|
|
276
|
-
name ::= [identifier] ;
|
|
277
264
|
|
|
265
|
+
name ::= [identifier] ;
|
|
278
266
|
|
|
279
267
|
|
|
280
|
-
error.
|
|
268
|
+
error. ::= . ;
|
|
281
269
|
|
|
282
270
|
`;
|
|
283
271
|
|
package/src/parser/json.js
CHANGED
|
@@ -7,23 +7,23 @@ const { rulesFromBNF, parserFromRules } = parserUtilities;
|
|
|
7
7
|
|
|
8
8
|
const bnf = `
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
json ::= element error*
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
| error+
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
;
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
element
|
|
17
|
+
element ::= array | object | [string-literal] | [number] | "true" | "false" | "null" ;
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
object
|
|
20
|
+
object ::= "{" ( [string-literal] ":" element ( "," [string-literal] ":" element )* )? "}" ;
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
array
|
|
23
|
+
array ::= "[" ( element ( "," element )* )? "]" ;
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
error.
|
|
26
|
+
error. ::= . ;
|
|
27
27
|
|
|
28
28
|
`,
|
|
29
29
|
rules = rulesFromBNF(bnf);
|
package/src/parser/plainText.js
CHANGED
package/src/parser/xml.js
CHANGED
|
@@ -7,47 +7,47 @@ const { rulesFromBNF, parserFromRules } = parserUtilities;
|
|
|
7
7
|
|
|
8
8
|
const bnf = `
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
xml ::= declaration? comment* ( simpleElement | complexElement ) comment* error*
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
| error+
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
;
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
declaration
|
|
17
|
+
declaration ::= "<?"<NO_WHITESPACE>"xml" attribute* "?>" ;
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
element
|
|
20
|
+
element ::= comment | simpleElement | complexElement ;
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
comment
|
|
23
|
+
comment ::= "<!--" text* "-->" ;
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
simpleElement
|
|
26
|
+
simpleElement ::= completeTag ;
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
complexElement
|
|
29
|
+
complexElement ::= startTag ( element | text )* endTag ;
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
completeTag
|
|
32
|
+
completeTag ::= "<"<NO_WHITESPACE>name attribute* "/>" ;
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
startTag
|
|
35
|
+
startTag ::= "<"<NO_WHITESPACE>name attribute* ">" ;
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
endTag
|
|
38
|
+
endTag ::= "</"<NO_WHITESPACE>name ">" ;
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
attribute
|
|
41
|
+
attribute ::= [identifier]<NO_WHITESPACE>"="<NO_WHITESPACE>[string-literal] ;
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
text
|
|
44
|
+
text ::= ( [identifier] | [string-literal]| [broken-string-literal] | [unassigned] )+ ;
|
|
45
45
|
|
|
46
46
|
|
|
47
|
-
name
|
|
47
|
+
name ::= [identifier] ;
|
|
48
48
|
|
|
49
49
|
|
|
50
|
-
error.
|
|
50
|
+
error. ::= . ;
|
|
51
51
|
|
|
52
52
|
`,
|
|
53
53
|
rules = rulesFromBNF(bnf);
|