JSParse.opp.exp 62.2 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
File "JSParse.mly", line 83, characters 22-33:
Warning: the token FRWabstract is unused.
File "JSParse.mly", line 84, characters 22-32:
Warning: the token FRWboolean is unused.
File "JSParse.mly", line 85, characters 22-29:
Warning: the token FRWbyte is unused.
File "JSParse.mly", line 86, characters 22-29:
Warning: the token FRWchar is unused.
File "JSParse.mly", line 87, characters 22-30:
Warning: the token FRWclass is unused.
File "JSParse.mly", line 88, characters 22-30:
Warning: the token FRWconst is unused.
File "JSParse.mly", line 89, characters 22-33:
Warning: the token FRWdebugger is unused.
File "JSParse.mly", line 90, characters 22-29:
Warning: the token FRWenum is unused.
File "JSParse.mly", line 91, characters 22-31:
Warning: the token FRWexport is unused.
File "JSParse.mly", line 92, characters 22-32:
Warning: the token FRWextends is unused.
File "JSParse.mly", line 93, characters 22-30:
Warning: the token FRWfinal is unused.
File "JSParse.mly", line 94, characters 22-30:
Warning: the token FRWfloat is unused.
File "JSParse.mly", line 95, characters 22-29:
Warning: the token FRWgoto is unused.
File "JSParse.mly", line 96, characters 22-35:
Warning: the token FRWimplements is unused.
File "JSParse.mly", line 97, characters 22-28:
Warning: the token FRWint is unused.
File "JSParse.mly", line 98, characters 22-34:
Warning: the token FRWinterface is unused.
File "JSParse.mly", line 99, characters 22-29:
Warning: the token FRWlong is unused.
File "JSParse.mly", line 100, characters 22-31:
Warning: the token FRWnative is unused.
File "JSParse.mly", line 101, characters 22-32:
Warning: the token FRWpackage is unused.
File "JSParse.mly", line 102, characters 22-32:
Warning: the token FRWprivate is unused.
File "JSParse.mly", line 103, characters 22-34:
Warning: the token FRWprotected is unused.
File "JSParse.mly", line 104, characters 22-30:
Warning: the token FRWshort is unused.
File "JSParse.mly", line 105, characters 22-31:
Warning: the token FRWstatic is unused.
File "JSParse.mly", line 106, characters 22-30:
Warning: the token FRWsuper is unused.
File "JSParse.mly", line 107, characters 22-37:
Warning: the token FRWsynchronized is unused.
File "JSParse.mly", line 108, characters 22-31:
Warning: the token FRWthrows is unused.
File "JSParse.mly", line 109, characters 22-34:
Warning: the token FRWtransient is unused.
File "JSParse.mly", line 110, characters 22-33:
Warning: the token FRWvolatile is unused.
File "JSParse.mly", line 47, characters 31-40:
Warning: the token LDcomment is unused.
File "JSParse.mly", line 49, characters 22-32:
Warning: the token LInitBegin is unused.
File "JSParse.mly", line 50, characters 22-30:
Warning: the token LInitEnd is unused.
File "JSParse.mly", line 35, characters 29-34:
Warning: the token Lchar is unused.
File "JSParse.mly", line 46, characters 31-39:
Warning: the token Lcomment is unused.
File "JSParse.mly", line 45, characters 22-38:
Warning: the token Lline_terminator is unused.
File "JSParse.mly", line 44, characters 22-33:
Warning: the token Lwhitespace is unused.
%{  
  module Parsing = ParsingOwn.Make(LexingOwn)
  open Parsing
  module Lexing = Parsing.Lexing
 open Annotation
 open AST

let raise_parse_error e = 
	print_endline e;
	raise Parse_error e

let fsto3 (a, _, _) = a
let sndo3 (_, a, _) = a
let trdo3 (_, _, a) = a

let string_of_constant c =
  match c with
    Number (_,f)  -> string_of_float f
  | String (_,s)  -> s
  | True  _    -> "true"
  | False _    -> "false"
  | Undefined _-> ""
  | Null _     -> "null"

%}
%start program
%token <Annotation.t> CKWdefaultxmlnamespace
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
%token <Annotation.t> CKWeach
%token <Annotation.t> CKWnamespace
%token <Annotation.t> CKWxml
%token <Annotation.t> FRWabstract
%token <Annotation.t> FRWboolean
%token <Annotation.t> FRWbyte
%token <Annotation.t> FRWchar
%token <Annotation.t> FRWclass
%token <Annotation.t> FRWconst
%token <Annotation.t> FRWdebugger
%token <Annotation.t> FRWenum
%token <Annotation.t> FRWexport
%token <Annotation.t> FRWextends
%token <Annotation.t> FRWfinal
%token <Annotation.t> FRWfloat
%token <Annotation.t> FRWgoto
%token <Annotation.t> FRWimplements
%token <Annotation.t> FRWint
%token <Annotation.t> FRWinterface
%token <Annotation.t> FRWlong
%token <Annotation.t> FRWnative
%token <Annotation.t> FRWpackage
%token <Annotation.t> FRWprivate
%token <Annotation.t> FRWprotected
%token <Annotation.t> FRWshort
%token <Annotation.t> FRWstatic
%token <Annotation.t> FRWsuper
%token <Annotation.t> FRWsynchronized
%token <Annotation.t> FRWthrows
%token <Annotation.t> FRWtransient
%token <Annotation.t> FRWvolatile
%token <Annotation.t> KWbreak
%token <Annotation.t> KWcase
%token <Annotation.t> KWcatch
%token <Annotation.t> KWcontinue
%token <Annotation.t> KWdefault
%token <Annotation.t> KWdelete
%token <Annotation.t> KWdo
%token <Annotation.t> KWelse
%token <Annotation.t> KWfinally
%token <Annotation.t> KWfor
%token <Annotation.t> KWfunction
%token <Annotation.t> KWif
%token <Annotation.t> KWin
%token <Annotation.t> KWinstanceof
%token <Annotation.t> KWnew
%token <Annotation.t> KWreturn
%token <Annotation.t> KWswitch
%token <Annotation.t> KWthis
%token <Annotation.t> KWthrow
%token <Annotation.t> KWtry
%token <Annotation.t> KWtypeof
%token <Annotation.t> KWvar
%token <Annotation.t> KWvoid
%token <Annotation.t> KWwhile
%token <Annotation.t> KWwith
%token <Annotation.t * string> LCcomment
%token <Annotation.t * string> LDcomment
%token <Annotation.t> LInitBegin
%token <Annotation.t> LInitEnd
%token <Annotation.t> Landassign
%token <Annotation.t> Lassign
%token <Annotation.t> Lat
%token <Annotation.t> Lbang
%token <Annotation.t> Lbit_and
%token <Annotation.t> Lbit_or
%token <Annotation.t * char> Lchar
%token <Annotation.t> Lcolon
%token <Annotation.t> Lcomma
%token <Annotation.t * string> Lcomment
%token <Annotation.t> Ldcolon
%token <Annotation.t> Lddot
%token <Annotation.t> Ldecr
%token <Annotation.t> Ldot
%token <Annotation.t> Leof
%token <Annotation.t> Leq
%token <Annotation.t> Leqq
%token <Annotation.t> Lfalse
%token <Annotation.t * float> Lfloat
%token <Annotation.t> Lge
%token <Annotation.t> Lgreater
%token <Annotation.t> Lhook
%token <Annotation.t * string> Lident
%token <Annotation.t> Lincr
%token <Annotation.t * int> Lint
%token <Annotation.t> Llbrace
%token <Annotation.t> Llbracket
%token <Annotation.t> Lle
%token <Annotation.t> Lless
%token <Annotation.t> Lline_terminator
%token <Annotation.t> Llparen
%token <Annotation.t> Llshift
%token <Annotation.t> Llshiftassign
%token <Annotation.t> Lminus
%token <Annotation.t> Lminusassign
%token <Annotation.t> Lne
%token <Annotation.t> Lneq
%token <Annotation.t> Lnull
%token <Annotation.t> Lorassign
%token <Annotation.t> Lplus
%token <Annotation.t> Lplusassign
%token <Annotation.t> Lrbrace
%token <Annotation.t> Lrbracket
%token <Annotation.t * string * string> Lregexp
%token <Annotation.t> Lrem
%token <Annotation.t> Lremassign
%token <Annotation.t> Lrparen
%token <Annotation.t> Lrsignedshift
%token <Annotation.t> Lrsignedshiftassign
%token <Annotation.t> Lrunsignedshift
%token <Annotation.t> Lrunsignedshiftassign
%token <Annotation.t> Lsc_and
%token <Annotation.t> Lsc_or
%token <Annotation.t> Lsemicolon
%token <Annotation.t> Lslash
%token <Annotation.t> Lslashassign
%token <Annotation.t> Lstar
%token <Annotation.t> Lstarassign
%token <Annotation.t * string> Lstring
%token <Annotation.t> Ltilde
%token <Annotation.t> Ltrue
%token <Annotation.t> Lwhitespace
%token <Annotation.t> Lxor
%token <Annotation.t> Lxorassign
%token <Annotation.t> XMLassign
%token <Annotation.t * string> XMLattr_val
%token <Annotation.t * string> XMLcdata
%token <Annotation.t * string> XMLcomment
%token <Annotation.t> XMLctag_open
%token <Annotation.t> XMLempty_tag_close
%token <Annotation.t> XMLotag_open
%token <Annotation.t * string> XMLpi
%token <Annotation.t * string> XMLtag_chars
%token <Annotation.t> XMLtag_close
%token <Annotation.t * string> XMLtext
%token <Annotation.t> XMLwhitespace
234
235
236
237
%type <string AST.program> program
%%

program:
238
  _1 = source_elements _2 = Leof
239
240
241
    {     (Program ((default_annotation (sndo3 _1) _2), (fsto3 _1)))}

source_elements:
242
  _1 = Leof
243
244
245
246
247
248
249
250
    {                                 ( ([], _1, _1))}
| _1 = source_element
    {                                 ( ([fsto3 _1], sndo3 _1, trdo3 _1) )}
| _1 = source_elements _2 = source_element
    {                                 ( (((fsto3 _1) @ [(fsto3 _2)]),
				                    sndo3 _1, trdo3 _2) )}

source_element:
251
  _1 = statement
252
253
254
255
256
257
    {    ((Statement ((default_annotation (sndo3 _1) (trdo3 _1)), fsto3 _1), 
      sndo3 _1, trdo3 _1))}
| _1 = function_declaration
    {                       (_1)}

function_declaration:
258
  _1 = KWfunction _2 = identifier _3 = Llparen _4 = formal_parameter_list _5 = Lrparen _6 = Llbrace _7 = function_body _8 = Lrbrace
259
260
261
262
263
264
265
    {  ((Function_declaration ((default_annotation _1 _8),"",fsto3 _2, fsto3 _4,None, fsto3 _7),
    _1, _8))}
| _1 = LCcomment _2 = KWfunction _3 = identifier _4 = Llparen _5 = formal_parameter_list _6 = Lrparen _7 = Llbrace _8 = function_body _9 = Lrbrace
    {  ((Function_declaration ((default_annotation (fst _1) _9),snd _1,fsto3 _3, fsto3 _5, None, fsto3 _8),
    fst _1, _9) )}

function_expression:
266
  _1 = KWfunction _2 = Llparen _3 = formal_parameter_list _4 = Lrparen _5 = Llbrace _6 = function_body _7 = Lrbrace
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
    {    ((Function_expression ((default_annotation _1 _7), None, None, fsto3 _3, None, fsto3 _6), _1, _7))}
| _1 = KWfunction _2 = identifier _3 = Llparen _4 = formal_parameter_list _5 = Lrparen _6 = Llbrace _7 = function_body _8 = Lrbrace
    {    ((Function_expression ((default_annotation _1 _8), None, (Some (fsto3 _2)), fsto3 _4, None, fsto3 _7),
      _1, _8))}
| _1 = LCcomment _2 = KWfunction _3 = Llparen _4 = formal_parameter_list _5 = Lrparen _6 = Llbrace _7 = function_body _8 = Lrbrace
    {    ((Function_expression ((default_annotation (fst _1) _8), Some (snd _1), None, fsto3 _4, None, fsto3 _7), (fst _1), _8))}
| _1 = LCcomment _2 = KWfunction _3 = identifier _4 = Llparen _5 = formal_parameter_list _6 = Lrparen _7 = Llbrace _8 = function_body _9 = Lrbrace
    {    ((Function_expression ((default_annotation (fst _1) _9),Some (snd _1), (Some (fsto3 _3)), fsto3 _5, None, fsto3 _8),
      (fst _1), _9))}
| _1 = KWfunction _2 = Llparen _3 = formal_parameter_list _4 = Lrparen _5 = LCcomment _6 = Llbrace _7 = function_body _8 = Lrbrace
    {    ((Function_expression ((default_annotation _1 _8), Some (snd _5) ,None, fsto3 _3, None, fsto3 _7), _1, _8))}
| _1 = KWfunction _2 = identifier _3 = Llparen _4 = formal_parameter_list _5 = Lrparen _6 = LCcomment _7 = Llbrace _8 = function_body _9 = Lrbrace
    {    ((Function_expression ((default_annotation _1 _9),Some (snd _6) ,(Some (fsto3 _2)), fsto3 _4, None, fsto3 _8),
      _1, _9))}

formal_parameter_list:
283
  
284
285
286
287
288
289
290
    {                                          (([], null_annotation, null_annotation))}
| _1 = identifier
    {                                          (([fsto3 _1], sndo3 _1, trdo3 _1))}
| _1 = formal_parameter_list _2 = Lcomma _3 = identifier
    {                                          (((fsto3 _1) @ [fsto3 _3], sndo3 _1, trdo3 _3))}

function_body:
291
  _1 = source_elements
292
293
294
    {                  (_1)}

statement:
295
  _1 = block
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
    {                       (_1)}
| _1 = variable_statement
    {                       (_1)}
| _1 = empty_statement
    {                       (_1)}
| _1 = expression_statement
    {                       (_1)}
| _1 = if_statement
    {                       (_1)}
| _1 = iteration_statement
    {                       (_1)}
| _1 = continue_statement
    {                       (_1)}
| _1 = break_statement
    {                       (_1)}
| _1 = return_statement
    {                       (_1)}
| _1 = with_statement
    {                       (_1)}
| _1 = labelled_statement
    {                       (_1)}
| _1 = switch_statement
    {                       (_1)}
| _1 = throw_statement
    {                       (_1)}
| _1 = try_statement
    {                       (_1)}
| _1 = default_xml_namespace_statement
    {                                  (_1)}

block:
327
  _1 = Llbrace _2 = optional_statement_list _3 = Lrbrace
328
329
330
    {  ((Block ((default_annotation _1 _3), fsto3 _2), _1, _3))}

optional_statement_list:
331
  
332
333
334
335
336
    {                                     (([], null_annotation,null_annotation))}
| _1 = non_empty_statement_list
    {                                     (_1)}

non_empty_statement_list:
337
  _1 = statement
338
339
340
341
342
    {  (([fsto3 _1], sndo3 _1, trdo3 _1))}
| _1 = non_empty_statement_list _2 = statement
    {  ((((fsto3 _1) @ [fsto3 _2]), sndo3 _1, trdo3 _2))}

variable_statement:
343
  _1 = KWvar _2 = variable_declaration_list _3 = Lsemicolon
344
345
346
347
348
    {  ((Variable_declaration 
      ((default_annotation _1 _3), (fsto3 _2)), 
      _1, _3))}

variable_declaration_list:
349
  _1 = variable_declaration
350
351
352
353
354
    {    (([fsto3 _1], sndo3 _1, trdo3 _1))}
| _1 = variable_declaration_list _2 = Lcomma _3 = variable_declaration
    {    ((((fsto3 _1) @ [fsto3 _3]), sndo3 _1, trdo3 _3))}

variable_declaration_list_no_in:
355
  _1 = variable_declaration_no_in
356
357
358
359
360
    {    (([fsto3 _1], sndo3 _1, trdo3 _1))}
| _1 = variable_declaration_list_no_in _2 = Lcomma _3 = variable_declaration_no_in
    {    ((((fsto3 _1) @ [fsto3 _3]), sndo3 _1, trdo3 _3))}

variable_declaration:
361
  _1 = identifier
362
363
364
365
366
    {                         ((((fsto3 _1), None), sndo3 _1, trdo3 _1))}
| _1 = identifier _2 = initialiser
    {                         ((((fsto3 _1), Some (fsto3 _2)), sndo3 _1, trdo3 _2))}

variable_declaration_no_in:
367
  _1 = identifier
368
369
370
371
372
    {                               ((((fsto3 _1), None), sndo3 _1, trdo3 _1))}
| _1 = identifier _2 = initialiser_no_in
    {                               ((((fsto3 _1), Some (fsto3 _2)), sndo3 _1, trdo3 _2))}

initialiser:
373
  _1 = Lassign _2 = assignment_expression
374
375
376
    {                                (((fsto3 _2), _1, trdo3 _2))}

initialiser_no_in:
377
  _1 = Lassign _2 = assignment_expression_no_in
378
379
380
    {                                      (((fsto3 _2), _1, trdo3 _2))}

empty_statement:
381
  _1 = Lsemicolon
382
383
384
    {             ((Skip (default_annotation _1 _1), _1, _1))}

expression_statement:
385
  _1 = init_expression _2 = Lsemicolon
386
387
388
389
    {                             ((Expression ((default_annotation (sndo3 _1) _2), (fsto3 _1)),
			       sndo3 _1, _2))}

if_statement:
390
  _1 = KWif _2 = Llparen _3 = expression _4 = Lrparen _5 = statement _6 = KWelse _7 = statement
391
392
393
394
395
396
    {    ((If ((default_annotation _1 (trdo3 _7)), fsto3 _3, fsto3 _5, Some (fsto3 _7)),
     _1, trdo3 _7))}
| _1 = KWif _2 = Llparen _3 = expression _4 = Lrparen _5 = statement
    {    ((If ((default_annotation _1 (trdo3 _5)), fsto3 _3, fsto3 _5, None), _1, trdo3 _5))}

switch_statement:
397
  _1 = KWswitch _2 = Llparen _3 = expression _4 = Lrparen _5 = case_block
398
399
400
401
402
403
    {    ((Switch ((default_annotation _1 (trdo3 _5)), 
	      fsto3 _3, (fsto3 (fsto3 _5)), 
	      (sndo3 (fsto3 _5)), (trdo3 (fsto3 _5))),
      _1, trdo3 _5))}

case_block:
404
  _1 = Llbrace _2 = case_clauses _3 = Lrbrace
405
406
407
408
409
410
411
412
413
414
415
416
417
    {                                                           (((fsto3 _2, None, []), _1, _3))}
| _1 = Llbrace _2 = Lrbrace
    {                                                           ((([], None, []), _1, _2))}
| _1 = Llbrace _2 = default_clause _3 = Lrbrace
    {                                                           ((([], Some (fsto3 _2), []), _1, _3))}
| _1 = Llbrace _2 = case_clauses _3 = default_clause _4 = Lrbrace
    {    (((fsto3 _2, Some (fsto3 _3), []), _1, _4))}
| _1 = Llbrace _2 = default_clause _3 = case_clauses _4 = Lrbrace
    {    ((([], Some (fsto3 _2), fsto3 _3), _1, _4))}
| _1 = Llbrace _2 = case_clauses _3 = default_clause _4 = case_clauses _5 = Lrbrace
    {    (((fsto3 _2, Some (fsto3 _3), fsto3 _4), _1, _5))}

case_clauses:
418
  _1 = case_clause
419
420
421
422
423
    {                           (([fsto3 _1], sndo3 _1, trdo3 _1))}
| _1 = case_clauses _2 = case_clause
    {                           (((fsto3 _1) @ [fsto3 _2], sndo3 _1, trdo3 _2))}

case_clause:
424
  _1 = KWcase _2 = expression _3 = Lcolon
425
426
427
428
429
    {                                                    (((fsto3 _2, None), _1, _3))}
| _1 = KWcase _2 = expression _3 = Lcolon _4 = non_empty_statement_list
    {    (((fsto3 _2, Some (fsto3 _4)), _1, trdo3 _4))}

default_clause:
430
  _1 = KWdefault _2 = Lcolon
431
432
433
434
435
    {                                            ((None, _1, _2))}
| _1 = KWdefault _2 = Lcolon _3 = non_empty_statement_list
    {                                            ((Some (fsto3 _3), _1, trdo3 _3))}

iteration_statement:
436
  _1 = KWdo _2 = statement _3 = KWwhile _4 = Llparen _5 = expression _6 = Lrparen _7 = Lsemicolon
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
    {    ((Do ((default_annotation _1 _7), fsto3 _2, fsto3 _5), _1, _7))}
| _1 = KWwhile _2 = Llparen _3 = expression _4 = Lrparen _5 = statement
    {    ((While ((default_annotation _1 (trdo3 _5)), fsto3 _3, fsto3 _5), _1, trdo3 _5))}
| _1 = KWfor _2 = Llparen _3 = for_bracket _4 = Lrparen _5 = statement
    {    ((For ((default_annotation _1 (trdo3 _5)), fsto3 _3, fsto3 _5), _1, (trdo3 _5)))}
| _1 = KWfor _2 = CKWeach _3 = Llparen _4 = left_hand_side_expression _5 = KWin _6 = expression _7 = Lrparen _8 = statement
    {    ((For_each ((default_annotation _1 (trdo3 _8)),
		(With_in ((default_annotation _3 _7), fsto3 _4, fsto3 _6)), fsto3 _8),
      _1, trdo3 _8))}
| _1 = KWfor _2 = CKWeach _3 = Llparen _4 = KWvar _5 = variable_declaration_no_in _6 = KWin _7 = expression _8 = Lrparen _9 = statement
    {    ((For_each ((default_annotation _1 (trdo3 _9)), 
	       (With_in_and_var ((default_annotation _3 _8), 
				 fsto3 _5, fsto3 _7)),
	       fsto3 _9),
      _1, trdo3 _9))}

for_bracket:
454
  _1 = optional_expression_no_in _2 = Lsemicolon _3 = optional_expression _4 = Lsemicolon _5 = optional_expression
455
456
457
458
459
460
461
462
463
464
465
466
467
    {    ((Regular ((default_annotation (sndo3 _1) (trdo3 _5)), fsto3 _1, fsto3 _3, fsto3 _5),
      sndo3 _1, trdo3 _5))}
| _1 = KWvar _2 = variable_declaration_list_no_in _3 = Lsemicolon _4 = optional_expression _5 = Lsemicolon _6 = optional_expression
    {    ((Regular_var ((default_annotation _1 (trdo3 _6)), fsto3 _2, fsto3 _4, fsto3 _6),
      _1, (trdo3 _6)))}
| _1 = left_hand_side_expression _2 = KWin _3 = expression
    {    ((With_in ((default_annotation (sndo3 _1) (trdo3 _3)), fsto3 _1, fsto3 _3),
      sndo3 _1, trdo3 _3))}
| _1 = KWvar _2 = variable_declaration_no_in _3 = KWin _4 = expression
    {    ((With_in_and_var ((default_annotation _1 (trdo3 _4)), fsto3 _2, fsto3 _4),
      _1, trdo3 _4))}

optional_expression:
468
  
469
470
471
472
473
    {             ((None, null_annotation, null_annotation))}
| _1 = expression
    {             ((Some (fsto3 _1), sndo3 _1, trdo3 _1))}

optional_expression_no_in:
474
  
475
476
477
478
479
    {                   ((None, null_annotation, null_annotation))}
| _1 = expression_no_in
    {                   ((Some (fsto3 _1), sndo3 _1, trdo3 _1))}

continue_statement:
480
  _1 = KWcontinue _2 = identifier _3 = Lsemicolon
481
482
483
484
485
486
487
488
489
    {  (if (different_line _1 (sndo3 _2))
   then raise_parse_error("Illegal line terminator in line "^(string_of_starting_line _1))
   else (Continue ((default_annotation _1 _3),Some (fsto3 _2)), _1, _3))}
| _1 = KWcontinue _2 = Lsemicolon
    {  (if (different_line _1 _2) 
   then raise_parse_error("Illegal line terminator in line "^(string_of_starting_line _1))
   else (Continue ((default_annotation _1 _2), None), _1, _2))}

break_statement:
490
  _1 = KWbreak _2 = identifier _3 = Lsemicolon
491
492
493
494
495
496
497
498
499
    {    (if (different_line (sndo3 _2)  _1) 
    then raise_parse_error("Illegal line terminator in line "^(string_of_starting_line _1))
    else (Break ((default_annotation _1 _3), Some (fsto3 _2)), _1, _3))}
| _1 = KWbreak _2 = Lsemicolon
    {    (if (different_line _1 _2) 
    then raise_parse_error("Illegal line terminator in line "^(string_of_starting_line _1))
    else (Break ((default_annotation _1 _2), None), _1, _2))}

return_statement:
500
  _1 = KWreturn _2 = expression _3 = Lsemicolon
501
502
503
504
505
506
507
508
509
    {    (if different_line (sndo3 _2) _1
    then raise_parse_error("Illegal line terminator in line "^(string_of_starting_line _1))
    else (Return ((default_annotation _1 _3), Some (fsto3 _2)), _1, _3))}
| _1 = KWreturn _2 = Lsemicolon
    {    (if (different_line _1 _2) 
    then raise_parse_error("Illegal line terminator in line "^(string_of_starting_line _1))
    else (Return ((default_annotation _1 _2), None), _1, _2))}

with_statement:
510
  _1 = KWwith _2 = Llparen _3 = expression _4 = Lrparen _5 = statement
511
512
513
    {    ((With ((default_annotation _1 (trdo3 _5)), fsto3 _3, fsto3 _5), _1, trdo3 _5))}

labelled_statement:
514
  _1 = identifier _2 = Lcolon _3 = statement
515
516
517
518
519
520
521
    {    ((Labelled_statement ((default_annotation 
			     (sndo3 _1) 
			     (trdo3 _3)), 
			  fsto3 _1, fsto3 _3), 
      sndo3 _1, trdo3 _3))}

throw_statement:
522
  _1 = KWthrow _2 = expression _3 = Lsemicolon
523
524
525
526
527
    {    (if (different_line (sndo3 _2) _1)
    then raise_parse_error("Illegal line terminator in line "^(string_of_starting_line _1))
    else (Throw ((default_annotation _1 _3), fsto3 _2), _1, _3))}

try_statement:
528
  _1 = KWtry _2 = block _3 = catch_prod
529
530
531
532
533
534
535
536
537
538
539
540
541
    {    ((Try_catch_finally ((default_annotation _1 (trdo3 _3)), 
			 fsto3 _2, (Some (fsto3 _3)), None),
      _1, trdo3 _3))}
| _1 = KWtry _2 = block _3 = finally_prod
    {    ((Try_catch_finally ((default_annotation _1 (trdo3 _3)),
			 fsto3 _2, None, (Some (fsto3 _3))),
      _1, trdo3 _3))}
| _1 = KWtry _2 = block _3 = catch_prod _4 = finally_prod
    {    ((Try_catch_finally ((default_annotation _1 (trdo3 _4)),
			 fsto3 _2, (Some (fsto3 _3)), (Some (fsto3 _4))),
      _1, trdo3 _4))}

catch_prod:
542
  _1 = KWcatch _2 = Llparen _3 = identifier _4 = Lrparen _5 = block
543
544
545
    {                                           (((fsto3 _3, fsto3 _5), _1, trdo3 _5))}

finally_prod:
546
  _1 = KWfinally _2 = block
547
548
549
    {                  ((fsto3 _2, _1, trdo3 _2))}

default_xml_namespace_statement:
550
  _1 = CKWdefaultxmlnamespace _2 = Lassign _3 = expression _4 = Lsemicolon
551
552
553
    {      ((DefaultXMLNamespace ((default_annotation _1 _4), fsto3 _3), _1, _4))}

expression:
554
  _1 = sequence_of_expression
555
556
557
558
559
560
    {    ( (Sequence 
        ((default_annotation (sndo3 _1) (trdo3 _1)), fsto3 _1),
        sndo3 _1, trdo3 _1)
    )}

expression_no_in:
561
  _1 = sequence_of_expression_no_in
562
563
564
565
    {    ((Sequence ((default_annotation (sndo3 _1) (trdo3 _1)), fsto3 _1),
      sndo3 _1, trdo3 _1))}

init_expression:
566
  _1 = sequence_of_init_expression
567
568
569
570
    {    ((Sequence ((default_annotation (sndo3 _1) (trdo3 _1)), fsto3 _1),
      sndo3 _1, trdo3 _1))}

sequence_of_expression:
571
  _1 = assignment_expression
572
573
574
575
576
    {    (([fsto3 _1], sndo3 _1, trdo3 _1))}
| _1 = sequence_of_expression _2 = Lcomma _3 = assignment_expression
    {    (((fsto3 _1) @ [fsto3 _3], sndo3 _1, trdo3 _3))}

sequence_of_expression_no_in:
577
  _1 = assignment_expression_no_in
578
579
580
581
582
    {    (([fsto3 _1], sndo3 _1, trdo3 _1))}
| _1 = sequence_of_expression_no_in _2 = Lcomma _3 = assignment_expression_no_in
    {    (((fsto3 _1) @ [fsto3 _3], sndo3 _1, trdo3 _3))}

sequence_of_init_expression:
583
  _1 = assignment_init_expression
584
585
586
587
588
    {    (([fsto3 _1], sndo3 _1, trdo3 _1))}
| _1 = sequence_of_init_expression _2 = Lcomma _3 = assignment_expression
    {    (((fsto3 _1) @ [fsto3 _3], sndo3 _1, trdo3 _3))}

member_expression:
589
  _1 = primary_expression
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
    {    (_1)}
| _1 = function_expression
    {    (_1)}
| _1 = member_expression _2 = Llbracket _3 = expression _4 = Lrbracket
    {    ((Array_access ((default_annotation (sndo3 _1) _4), fsto3 _1, fsto3 _3),
      sndo3 _1, _4))}
| _1 = member_expression _2 = Ldot _3 = identifier
    {    ((Object_access ((default_annotation (sndo3 _1) (trdo3 _3)), fsto3 _1, fsto3 _3),
      sndo3 _1, trdo3 _3))}
| _1 = KWnew _2 = member_expression _3 = arguments
    {    ((New_expression ((default_annotation _1 (trdo3 _2)), fsto3 _2, fsto3 _3), _1, trdo3 _2))}
| _1 = Lregexp
    {    ((RegExp ((default_annotation (fsto3 _1) (fsto3 _1)), (sndo3 _1, trdo3 _1)), 
      fsto3 _1, fsto3 _1))}
| _1 = member_expression _2 = Ldot _3 = property_identifier
    {    ((Property_access ((default_annotation (sndo3 _1) (trdo3 _3)), fsto3 _1, fsto3 _3),
      sndo3 _1, trdo3 _3))}
| _1 = member_expression _2 = Lddot _3 = identifier
    {    ((Descendant_access ((default_annotation (sndo3 _1) (trdo3 _3)), fsto3 _1, fsto3 _3),
      sndo3 _1, trdo3 _3))}
| _1 = member_expression _2 = Lddot _3 = property_identifier
    {    ((Descendant_access ((default_annotation (sndo3 _1)(trdo3 _3)), fsto3 _1, fsto3 _3),
      sndo3 _1, trdo3 _3))}
| _1 = member_expression _2 = Ldot _3 = Llparen _4 = expression _5 = Lrparen
    {    ((Filter_access ((default_annotation (sndo3 _1) _5), fsto3 _1, fsto3 _4),
      sndo3 _1, _5))}

member_init_expression:
618
  _1 = primary_init_expression
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
    {    (_1)}
| _1 = member_init_expression _2 = Llbracket _3 = expression _4 = Lrbracket
    {    ((Array_access ((default_annotation (sndo3 _1) _4), fsto3 _1, fsto3 _3),
      sndo3 _1, _4))}
| _1 = member_init_expression _2 = Ldot _3 = identifier
    {    ((Object_access ((default_annotation (sndo3 _1) (trdo3 _3)), fsto3 _1, fsto3 _3),
      sndo3 _1, trdo3 _3))}
| _1 = KWnew _2 = member_expression _3 = arguments
    {    ((New_expression ((default_annotation _1 (trdo3 _3)), fsto3 _2, fsto3 _3),
      _1, trdo3 _3))}
| _1 = Lregexp
    {    ((RegExp ((default_annotation (fsto3 _1) (fsto3 _1)), 
	      ((sndo3 _1), (trdo3 _1))), fsto3 _1, fsto3 _1))}
| _1 = member_init_expression _2 = Ldot _3 = property_identifier
    {    ((Property_access ((default_annotation (sndo3 _1) (trdo3 _3)), fsto3 _1, fsto3 _3),
      sndo3 _1, trdo3 _3))}
| _1 = member_init_expression _2 = Lddot _3 = identifier
    {    ((Descendant_access ((default_annotation (sndo3 _1) (trdo3 _3)), fsto3 _1, fsto3 _3),
      sndo3 _1, trdo3 _3))}
| _1 = member_init_expression _2 = Lddot _3 = property_identifier
    {    ((Descendant_access ((default_annotation (sndo3 _1) (trdo3 _3)), (fsto3 _1), (fsto3 _3)),
      sndo3 _1, trdo3 _3))}
| _1 = member_init_expression _2 = Ldot _3 = Llparen _4 = expression _5 = Lrparen
    {    ((Filter_access ((default_annotation (sndo3 _1) _5), fsto3 _1, fsto3 _4),
      sndo3 _1, _5))}

primary_expression:
646
  _1 = KWthis
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
    {  ( (This _1,_1,_1))}
| _1 = identifier
    {    ((Variable ((default_annotation (sndo3 _1) (trdo3 _1)), fsto3 _1), sndo3 _1, trdo3 _1))}
| _1 = literal
    {    ((Constant ((default_annotation (sndo3 _1) (trdo3 _1)), fsto3 _1), sndo3 _1, trdo3 _1))}
| _1 = array_literal
    {    ((Array_construction ((default_annotation (sndo3 _1) (trdo3 _1)), fsto3 _1), 
      sndo3 _1, trdo3 _1))}
| _1 = object_literal
    {    ((Object_construction ((default_annotation (sndo3 _1) (trdo3 _1)), fsto3 _1), 
      sndo3 _1, trdo3 _1))}
| _1 = Llparen _2 = expression _3 = Lrparen
    {                             ((fsto3 _2, _1, _3))}
| _1 = property_identifier
    {    ((Property_construction ((default_annotation (sndo3 _1) (trdo3 _1)), fsto3 _1),
      sndo3 _1, trdo3 _1))}
| _1 = xml_initialiser
    {                             (_1)}
| _1 = xml_list_initialiser
    {                             (_1)}

primary_init_expression:
669
  _1 = KWthis
670
671
672
673
674
675
676
677
678
679
680
681
682
683
    {  ( (This _1,_1,_1))}
| _1 = identifier
    {    ((Variable ((default_annotation (sndo3 _1) (trdo3 _1)), fsto3 _1), 
      sndo3 _1, trdo3 _1))}
| _1 = literal
    {    ((Constant ((default_annotation (sndo3 _1) (trdo3 _1)), fsto3 _1),
      sndo3 _1, trdo3 _1))}
| _1 = array_literal
    {    ((Array_construction ((default_annotation (sndo3 _1) (trdo3 _1)), fsto3 _1),
      sndo3 _1, trdo3 _1))}
| _1 = Llparen _2 = expression _3 = Lrparen
    {                                  ((fsto3 _2, _1, _3))}

literal:
684
  _1 = numeric_literal
685
686
687
688
689
690
691
692
693
694
695
696
    {                  (_1)}
| _1 = Lnull
    {                  ((Null (default_annotation _1 _1), _1, _1))}
| _1 = Ltrue
    {                  ((True (default_annotation _1 _1), _1, _1))}
| _1 = Lfalse
    {                  ((False (default_annotation _1 _1), _1, _1))}
| _1 = Lstring
    {                  ((String ((default_annotation (fst _1) (fst _1)), (snd _1)),
		    (fst _1), (fst _1)))}

numeric_literal:
697
  _1 = Lfloat
698
699
700
701
702
703
    {           ((Number ((default_annotation (fst _1) (fst _1)), (snd _1)), fst _1, fst _1))}
| _1 = Lint
    {           ((Number ((default_annotation (fst _1) (fst _1)), (float_of_int (snd _1))), 
	     fst _1, fst _1))}

array_literal:
704
  _1 = Llbracket _2 = Lrbracket
705
706
707
708
709
    {                                             (([], _1, _2))}
| _1 = Llbracket _2 = non_empty_element_list _3 = Lrbracket
    {                                             ((fsto3 _2, _1, _3))}

non_empty_element_list:
710
  _1 = assignment_expression
711
712
713
714
715
716
717
718
719
    {                                                      (([Some (fsto3 _1)], sndo3 _1, trdo3 _1))}
| _1 = non_empty_element_list _2 = Lcomma _3 = assignment_expression
    {    (((fsto3 _1) @ [Some (fsto3 _3)], sndo3 _1, trdo3 _3))}
| _1 = elision
    {                                                      (([fsto3 _1], sndo3 _1, trdo3 _1))}
| _1 = non_empty_element_list _2 = Lcomma _3 = elision
    {    (((fsto3 _1) @ [(fsto3 _3)], sndo3 _1, trdo3 _3))}

elision:
720
  _1 = Lcomma
721
722
723
    {                 ((None, _1, _1))}

object_literal:
724
  _1 = Llbrace _2 = Lrbrace
725
726
727
728
729
    {                                               (([], _1, _2))}
| _1 = Llbrace _2 = property_name_and_value_list _3 = Lrbrace
    {                                               ((fsto3 _2, _1, _3))}

identifier:
730
  _1 = Lident
731
732
733
734
735
736
737
738
739
    {    ((Identifier ((default_annotation (fst _1) (fst _1)), (snd _1)), fst _1, fst _1))}
| _1 = CKWeach
    {    ((Identifier ((default_annotation _1 _1),"each"), _1, _1))}
| _1 = CKWnamespace
    {    ((Identifier ((default_annotation _1 _1),"namespace"), _1, _1))}
| _1 = CKWxml
    {    ((Identifier ((default_annotation _1 _1),"xml"), _1, _1))}

property_identifier:
740
  _1 = attribute_identifier
741
742
743
744
745
746
747
    {                                                (_1)}
| _1 = qualified_identifier
    {                                                (_1)}
| _1 = wildcard_identifier
    {                                                (_1)}

attribute_identifier:
748
  _1 = Lat _2 = property_selector
749
750
751
752
753
754
755
    {    ((AttributeIdentifier ((default_annotation _1 (trdo3 _2)), (fsto3 _2)), _1, trdo3 _2))}
| _1 = Lat _2 = qualified_identifier
    {    ((AttributeIdentifier ((default_annotation _1 (trdo3 _2)), (fsto3 _2)), _1, trdo3 _2))}
| _1 = Lat _2 = Llbracket _3 = expression _4 = Lrbracket
    {    ((AttributeIdentifierExp ((default_annotation _1 _4), (fsto3 _3)), _1, _4))}

property_selector:
756
  _1 = identifier
757
758
759
760
761
    {                      (_1)}
| _1 = wildcard_identifier
    {                      (_1)}

qualified_identifier:
762
  _1 = property_selector _2 = Ldcolon _3 = property_selector
763
764
765
766
767
768
769
770
    {    ((QualifiedIdentifier ((default_annotation (sndo3 _1) (trdo3 _3)), 
			   (fsto3 _1), (fsto3 _3)),
      sndo3 _1, trdo3 _3))}
| _1 = property_selector _2 = Ldcolon _3 = Llbracket _4 = expression _5 = Lrbracket
    {    ((QualifiedIdentifierExp ((default_annotation (sndo3 _1) _5), (fsto3 _1), (fsto3 _4)),
      sndo3 _1, _5))}

wildcard_identifier:
771
  _1 = Lstar
772
773
774
    {        ((Wildcard (default_annotation _1 _1), _1, _1))}

xml_initialiser:
775
  _1 = xml_markup
776
777
778
779
780
781
782
    {              (((XMLInitialiser ((default_annotation (sndo3 _1) (trdo3 _1)),(fsto3 _1))),
		sndo3 _1, trdo3 _1))}
| _1 = xml_element
    {              (((XMLInitialiser ((default_annotation (sndo3 _1) (trdo3 _1)),(fsto3 _1))),
		sndo3 _1, trdo3 _1))}

xml_element:
783
  _1 = XMLotag_open _2 = xml_tag_content_option _3 = XMLempty_tag_close
784
785
786
787
788
789
790
791
    {           ((XMLElementEmpty ((default_annotation _1 _3), (fsto3 _2)), _1, _3))}
| _1 = XMLotag_open _2 = xml_tag_content_option _3 = XMLtag_close _4 = xml_element_content _5 = XMLctag_open _6 = xml_tag_content_option _7 = XMLtag_close
    {    ((XMLElement ((default_annotation _1 _7),(fsto3 _2), Some (fsto3 _4), (fsto3 _6)),
      _1, _7))}
| _1 = XMLotag_open _2 = xml_tag_content_option _3 = XMLtag_close _4 = XMLctag_open _5 = xml_tag_content_option _6 = XMLtag_close
    {    ((XMLElement ((default_annotation _1 _6),(fsto3 _2), None, (fsto3 _5)), _1, _6))}

xml_element_content:
792
  _1 = xml_markup
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
    {    ((XMLElementContent ((default_annotation (sndo3 _1) (trdo3 _1)), (fsto3 _1), None),
      sndo3 _1, trdo3 _1))}
| _1 = xml_markup _2 = xml_element_content
    {    ((XMLElementContent ((default_annotation (sndo3 _1) (trdo3 _2)), 
			 fsto3 _1, Some (fsto3 _2)),
      sndo3 _1, trdo3 _2))}
| _1 = XMLtext
    {    ((XMLElementContent ((default_annotation (fst _1) (fst _1)),
			 XMLText ((default_annotation (fst _1) (fst _1)), (snd _1)), None),
     fst _1, fst _1))}
| _1 = XMLtext _2 = xml_element_content
    {    ((XMLElementContent ((default_annotation (fst _1) (trdo3 _2)),
			 XMLText ((default_annotation (fst _1) (trdo3 _2)), 
				  (snd _1)), Some (fsto3 _2)),
      fst _1, trdo3 _2))}
| _1 = xml_element
    {    ((XMLElementContent ((default_annotation (sndo3 _1) (trdo3 _1)),
			 (fsto3 _1), None), (sndo3 _1), (trdo3 _1)))}
| _1 = xml_element _2 = xml_element_content
    {    ((XMLElementContent ((default_annotation (sndo3 _1) (trdo3 _2)),
			 (fsto3 _1), Some (fsto3 _2)),
      sndo3 _1, trdo3 _2))}
| _1 = Llbrace _2 = expression _3 = Lrbrace
    {    ((XMLElementContent ((default_annotation _1 _3),
			 XMLExpression ((default_annotation _1 _3),(fsto3 _2)), None),
      _1, _3))}
| _1 = Llbrace _2 = expression _3 = Lrbrace _4 = xml_element_content
    {    ((XMLElementContent ((default_annotation _1 _3),
			 XMLExpression ((default_annotation _1 _3),
					(fsto3 _2)), Some (fsto3 _4)),
      _1, _3))}

xml_list_initialiser:
826
  _1 = XMLotag_open _2 = XMLtag_close _3 = xml_element_content _4 = XMLctag_open _5 = XMLtag_close
827
828
829
    {    ((XMLListInitialiser ((default_annotation _1 _5),(fsto3 _3)), _1, _5))}

xml_tag_content_option:
830
  _1 = xml_tag_content
831
832
833
834
835
    {                                             (([(fsto3 _1)], sndo3 _1, trdo3 _1))}
| _1 = xml_tag_content _2 = xml_tag_content_option
    {                                             (([(fsto3 _1)] @ (fsto3 _2), sndo3 _1, trdo3 _2))}

xml_tag_content:
836
  _1 = XMLtag_chars
837
838
839
840
841
842
843
844
845
846
847
    {    ((XMLTagChars ((default_annotation (fst _1) (fst _1)),(snd _1)), fst _1, fst _1))}
| _1 = XMLwhitespace
    {    ((XMLWhitespace (default_annotation _1 _1), _1, _1))}
| _1 = Llbrace _2 = expression _3 = Lrbrace
    {    ((XMLExpression ((default_annotation _1 _3),(fsto3 _2)), _1, _3))}
| _1 = XMLassign _2 = Llbrace _3 = expression _4 = Lrbrace
    {    ((XMLAssignExpression ((default_annotation _1 _4),(fsto3 _3)), _1, _4))}
| _1 = XMLassign _2 = XMLattr_val
    {    ((XMLAssignAttr ((default_annotation _1 (fst _2)), (snd _2)), _1, fst _2))}

xml_markup:
848
  _1 = XMLcomment
849
850
851
852
853
854
855
    {             ((XMLComment ((default_annotation (fst _1) (fst _1)),(snd _1)), fst _1, fst _1))}
| _1 = XMLcdata
    {             ((XMLCDATA ((default_annotation (fst _1) (fst _1)),(snd _1)), fst _1, fst _1))}
| _1 = XMLpi
    {             ((XMLPI ((default_annotation (fst _1) (fst _1)),(snd _1)), fst _1, fst _1))}

property_name_and_value_list:
856
  _1 = property_name _2 = Lcolon _3 = assignment_expression
857
858
859
860
861
    {    (([((fsto3 _1), (fsto3 _3))], sndo3 _1, trdo3 _3))}
| _1 = property_name_and_value_list _2 = Lcomma _3 = property_name _4 = Lcolon _5 = assignment_expression
    {    (((fsto3 _1) @ [((fsto3 _3), (fsto3 _5))], sndo3 _1, trdo3 _5))}

property_name:
862
  _1 = identifier
863
864
865
866
867
868
869
870
871
872
873
    {    (((DynamicName ((default_annotation (sndo3 _1) (trdo3 _1)),(fsto3 _1))), 
      sndo3 _1, trdo3 _1))}
| _1 = Lstring
    {    (((StaticName ((default_annotation (fst _1) (fst _1)),
		   String ((default_annotation (fst _1) (fst _1)),(snd _1)))),
      fst _1, fst _1))}
| _1 = numeric_literal
    {    (((StaticName ((default_annotation (sndo3 _1) (trdo3 _1)),(fsto3 _1))),
      sndo3 _1, trdo3 _1))}

new_expression:
874
  _1 = member_expression
875
876
877
878
879
880
881
    {                            (_1)}
| _1 = KWnew _2 = new_expression
    {                            ((New_expression ((default_annotation _1 (trdo3 _2)),
					      (fsto3 _2),[]),
			      _1, trdo3 _2))}

new_init_expression:
882
  _1 = member_init_expression
883
884
885
886
887
888
889
    {                            (_1)}
| _1 = KWnew _2 = new_expression
    {                            ((New_expression ((default_annotation _1 (trdo3 _2)),
					      (fsto3 _2),[]),
			      _1, trdo3 _2))}

call_expression:
890
  _1 = member_expression _2 = arguments
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
    {    ((Function_call ((default_annotation (sndo3 _1) (trdo3 _2)),
		     (fsto3 _1), (fsto3 _2)),
      sndo3 _1, trdo3 _2))}
| _1 = call_expression _2 = arguments
    {    ((Function_call (default_annotation (sndo3 _1) (trdo3 _2),
		      (fsto3 _1), (fsto3 _2)),
		     sndo3 _1, trdo3 _2))}
| _1 = call_expression _2 = Llbracket _3 = expression _4 = Lrbracket
    {    ((Array_access ((default_annotation (sndo3 _1) _4),
		    (fsto3 _1), (fsto3 _3)),
      sndo3 _1, _4))}
| _1 = call_expression _2 = Ldot _3 = identifier
    {    ((Object_access ((default_annotation (sndo3 _1) (trdo3 _3)),
		     (fsto3 _1), ((fsto3 _3))),
      sndo3 _1, trdo3 _3))}
| _1 = call_expression _2 = Ldot _3 = property_identifier
    {    ((Property_access ((default_annotation (sndo3 _1) (trdo3 _3)),
		       (fsto3 _1), (fsto3 _3)),
      sndo3 _1, trdo3 _3))}
| _1 = call_expression _2 = Lddot _3 = identifier
    {    ((Descendant_access ((default_annotation (sndo3 _1) (trdo3 _3)),
			 (fsto3 _1), ((fsto3 _3))),
      sndo3 _1, trdo3 _3))}
| _1 = call_expression _2 = Lddot _3 = property_identifier
    {    ((Descendant_access ((default_annotation (sndo3 _1) (trdo3 _3)),
			 (fsto3 _1), (fsto3 _3)),
      sndo3 _1, trdo3 _3))}
| _1 = call_expression _2 = Ldot _3 = Llparen _4 = expression _5 = Lrparen
    {    ((Filter_access ((default_annotation (sndo3 _1) _5),
		     (fsto3 _1), fsto3 _4),
      sndo3 _1, _5))}

call_init_expression:
924
  _1 = member_init_expression _2 = arguments
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
    {    ((Function_call ((default_annotation (sndo3 _1) (trdo3 _2)),
		     (fsto3 _1), (fsto3 _2)),
      sndo3 _1, trdo3 _2))}
| _1 = call_init_expression _2 = arguments
    {    ((Function_call ((default_annotation (sndo3 _1) (trdo3 _2)),
		     (fsto3 _1), (fsto3 _2)),
      sndo3 _1, trdo3 _2))}
| _1 = call_init_expression _2 = Llbracket _3 = expression _4 = Lrbracket
    {    ((Array_access ((default_annotation (sndo3 _1) _4),
		    (fsto3 _1), (fsto3 _3)),
      sndo3 _1, _4))}
| _1 = call_init_expression _2 = Ldot _3 = identifier
    {    ((Object_access ((default_annotation (sndo3 _1) (trdo3 _3)),
		     (fsto3 _1), ((fsto3 _3))),
      sndo3 _1, trdo3 _3))}
| _1 = call_init_expression _2 = Ldot _3 = property_identifier
    {    ((Property_access ((default_annotation (sndo3 _1) (trdo3 _3)),
		       (fsto3 _1), (fsto3 _3)),
      sndo3 _1, trdo3 _3))}
| _1 = call_init_expression _2 = Lddot _3 = identifier
    {    ((Descendant_access ((default_annotation (sndo3 _1) (trdo3 _3)),
			 (fsto3 _1), ((fsto3 _3))),
      sndo3 _1, trdo3 _3))}
| _1 = call_init_expression _2 = Lddot _3 = property_identifier
    {    ((Descendant_access ((default_annotation (sndo3 _1) (trdo3 _3)),
			 (fsto3 _1), (fsto3 _3)),
      sndo3 _1, trdo3 _3))}
| _1 = call_init_expression _2 = Ldot _3 = Llparen _4 = expression _5 = Lrparen
    {    ((Filter_access ((default_annotation (sndo3 _1) _5),
		     (fsto3 _1), (fsto3 _4)),
      sndo3 _1, _5))}

arguments:
958
  _1 = Llparen _2 = Lrparen
959
960
961
962
963
    {                                (([], _1, _2))}
| _1 = Llparen _2 = argument_list _3 = Lrparen
    {                                (((fsto3 _2), _1, _3))}

argument_list:
964
  _1 = assignment_expression
965
966
967
968
969
    {                                             (([(fsto3 _1)], sndo3 _1, trdo3 _1))}
| _1 = argument_list _2 = Lcomma _3 = assignment_expression
    {                                             (((fsto3 _1) @ [(fsto3 _3)], sndo3 _1, trdo3 _3))}

left_hand_side_expression:
970
  _1 = new_expression
971
972
973
974
975
    {                       (_1)}
| _1 = call_expression
    {                       (_1)}

left_hand_side_init_expression:
976
  _1 = new_init_expression
977
978
979
980
981
    {                       (_1)}
| _1 = call_init_expression
    {                       (_1)}

postfix_expression:
982
  _1 = left_hand_side_expression
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
    {    (_1)}
| _1 = left_hand_side_expression _2 = Lincr
    {    ( if (different_line (trdo3 _1)  _2)
      then raise_parse_error("Illegal line terminator in line "^(string_of_starting_line (trdo3 _1)))
      else (Unop ((default_annotation (sndo3 _1) _2),(fsto3 _1), 
	    Incr_postfix (default_annotation _2 _2)),
      sndo3 _1, _2))}
| _1 = left_hand_side_expression _2 = Ldecr
    {    ( if (different_line (trdo3 _1) _2)
      then raise_parse_error("Illegal line terminator in line "^(string_of_starting_line (trdo3 _1)))
      else (Unop ((default_annotation (sndo3 _1) _2),(fsto3 _1), 
	    Decr_postfix (default_annotation _2 _2)),
      sndo3 _1, _2))}

postfix_init_expression:
998
  _1 = left_hand_side_init_expression
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
    {    (_1)}
| _1 = left_hand_side_init_expression _2 = Lincr
    {    (if (different_line (sndo3 _1) _2) 
    then raise_parse_error("Illegal line terminator in line "^(string_of_starting_line (sndo3 _1)))
    else (Unop ((default_annotation (sndo3 _1) _2),(fsto3 _1), 
	    Incr_postfix (default_annotation _2 _2)),
      sndo3 _1, _2))}
| _1 = left_hand_side_init_expression _2 = Ldecr
    {    (if (different_line (sndo3 _1) _2)
    then raise_parse_error("Illegal line terminator in line "^(string_of_starting_line (sndo3 _1)))
    else (Unop ((default_annotation (sndo3 _1) _2),(fsto3 _1), 
	    Decr_postfix (default_annotation _2 _2)),
      sndo3 _1, _2))}

unary_expression:
1014
  _1 = postfix_expression
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
    {                                 (_1)}
| _1 = KWdelete _2 = unary_expression
    {    ((Unop ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
	    Delete (default_annotation _1 _1)),
      _1, trdo3 _2))}
| _1 = KWvoid _2 = unary_expression
    {    ((Unop_without_sideeffect ((default_annotation _1 (trdo3 _2)),(fsto3 _2),
			       Void (default_annotation _1 _1)),
      _1, trdo3 _2))}
| _1 = KWtypeof _2 = unary_expression
    {    ((Unop_without_sideeffect ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
			       Typeof (default_annotation _1 _1)),
      _1, trdo3 _2))}
| _1 = Lincr _2 = unary_expression
    {    ((Unop ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
	    Incr_prefix (default_annotation _1 _1)),
      _1, trdo3 _2))}
| _1 = Ldecr _2 = unary_expression
    {    ((Unop ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
	    Decr_prefix (default_annotation _1 _1)),
      _1, trdo3 _2))}
| _1 = Lplus _2 = unary_expression
    {    ((Unop_without_sideeffect ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
			       Positive (default_annotation _1 _1)),
      _1, trdo3 _2))}
| _1 = Lminus _2 = unary_expression
    {    ((Unop_without_sideeffect ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
			       Negative (default_annotation _1 _1)),
      _1, trdo3 _2))}
| _1 = Ltilde _2 = unary_expression
    {    ((Unop_without_sideeffect ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
			       Tilde (default_annotation _1 _1)),
      _1, trdo3 _2))}
| _1 = Lbang _2 = unary_expression
    {    ((Unop_without_sideeffect ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
			       Bang (default_annotation _1 _1)),
      _1, trdo3 _2))}

unary_init_expression:
1054
  _1 = postfix_init_expression
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
    {                            (_1)}
| _1 = KWdelete _2 = unary_expression
    {    ((Unop ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
	    Delete (default_annotation _1 _1)),
      _1, trdo3 _2))}
| _1 = KWvoid _2 = unary_expression
    {    ((Unop_without_sideeffect ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
			       Void (default_annotation _1 _1)),
      _1, trdo3 _2))}
| _1 = KWtypeof _2 = unary_expression
    {    ((Unop_without_sideeffect ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
			       Typeof (default_annotation _1 _1)),
      _1, trdo3 _2))}
| _1 = Lincr _2 = unary_expression
    {    ((Unop ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
	    Incr_prefix (default_annotation _1 _1)),
      _1, trdo3 _2))}
| _1 = Ldecr _2 = unary_expression
    {    ((Unop ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
	    Decr_prefix (default_annotation _1 _1)),
      _1, trdo3 _2))}
| _1 = Lplus _2 = unary_expression
    {    ((Unop_without_sideeffect ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
			       Positive (default_annotation _1 _1)),
      _1, trdo3 _2))}
| _1 = Lminus _2 = unary_expression
    {    ((Unop_without_sideeffect ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
			       Negative (default_annotation _1 _1)),
      _1, trdo3 _2))}
| _1 = Ltilde _2 = unary_expression
    {    ((Unop_without_sideeffect ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
			       Tilde (default_annotation _1 _1)),
      _1, trdo3 _2))}
| _1 = Lbang _2 = unary_expression
    {    ((Unop_without_sideeffect ((default_annotation _1 (trdo3 _2)),(fsto3 _2), 
			       Bang (default_annotation _1 _1) ),
      _1, trdo3 _2))}

multiplicative_expression:
1094
  _1 = unary_expression
1095
1096
1097
1098
1099
1100
1101
1102
1103
    {                                                         (_1)}
| _1 = multiplicative_expression _2 = Lstar _3 = unary_expression
    {                                                         ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Star (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = multiplicative_expression _2 = Lslash _3 = unary_expression
    {      ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Slash (default_annotation _2 _2) , (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = multiplicative_expression _2 = Lrem _3 = unary_expression
    {                                                         ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Rem (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

multiplicative_init_expression:
1104
  _1 = unary_init_expression
1105
1106
1107
1108
1109
1110
1111
1112
1113
    {    (_1)}
| _1 = multiplicative_init_expression _2 = Lstar _3 = unary_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Star (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = multiplicative_init_expression _2 = Lslash _3 = unary_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Slash (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = multiplicative_init_expression _2 = Lrem _3 = unary_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Rem (default_annotation _2 _2) , (fsto3 _3)), sndo3 _1, trdo3 _3))}

additive_expression:
1114
  _1 = multiplicative_expression
1115
1116
1117
1118
1119
1120
1121
    {                                                       (_1)}
| _1 = additive_expression _2 = Lplus _3 = multiplicative_expression
    {                                                       ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Plus (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = additive_expression _2 = Lminus _3 = multiplicative_expression
    {                                                       ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Minus (default_annotation _2 _2) , (fsto3 _3)), sndo3 _1, trdo3 _3))}

additive_init_expression:
1122
  _1 = multiplicative_init_expression
1123
1124
1125
1126
1127
1128
1129
    {    (_1)}
| _1 = additive_init_expression _2 = Lplus _3 = multiplicative_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Plus (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = additive_init_expression _2 = Lminus _3 = multiplicative_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Minus (default_annotation _2 _2) , (fsto3 _3)), sndo3 _1, trdo3 _3))}

shift_expression:
1130
  _1 = additive_expression
1131
1132
1133
1134
1135
1136
1137
1138
1139
    {    (_1)}
| _1 = shift_expression _2 = Llshift _3 = additive_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Lshift (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = shift_expression _2 = Lrsignedshift _3 = additive_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Rsignedshift (default_annotation _2 _2) , (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = shift_expression _2 = Lrunsignedshift _3 = additive_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Runsignedshift (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

shift_init_expression:
1140
  _1 = additive_init_expression
1141
1142
1143
1144
1145
1146
1147
1148
1149
    {    (_1)}
| _1 = shift_init_expression _2 = Llshift _3 = additive_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Lshift (default_annotation _2 _2) , (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = shift_init_expression _2 = Lrsignedshift _3 = additive_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Rsignedshift (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = shift_init_expression _2 = Lrunsignedshift _3 = additive_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Runsignedshift (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

relational_expression:
1150
  _1 = shift_expression
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
    {    (_1)}
| _1 = relational_expression _2 = Lless _3 = shift_expression
    {    ( (Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Less (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = relational_expression _2 = Lgreater _3 = shift_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Greater (default_annotation _2 _2) , (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = relational_expression _2 = Lle _3 = shift_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Le (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = relational_expression _2 = Lge _3 = shift_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Ge (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = relational_expression _2 = KWinstanceof _3 = shift_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Instanceof (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = relational_expression _2 = KWin _3 = shift_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), In (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

relational_expression_no_in:
1166
  _1 = shift_expression
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
    {    (_1)}
| _1 = relational_expression_no_in _2 = Lless _3 = shift_expression
    {    ( (Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Less (default_annotation _2 _2) , (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = relational_expression_no_in _2 = Lgreater _3 = shift_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Greater (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = relational_expression_no_in _2 = Lle _3 = shift_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Le (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = relational_expression_no_in _2 = Lge _3 = shift_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Ge (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = relational_expression_no_in _2 = KWinstanceof _3 = shift_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Instanceof (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

relational_init_expression:
1180
  _1 = shift_init_expression
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
    {    (_1)}
| _1 = relational_init_expression _2 = Lless _3 = shift_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Less (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = relational_init_expression _2 = Lgreater _3 = shift_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Greater (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = relational_init_expression _2 = Lle _3 = shift_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Le (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = relational_init_expression _2 = Lge _3 = shift_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Ge (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = relational_init_expression _2 = KWinstanceof _3 = shift_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Instanceof (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = relational_init_expression _2 = KWin _3 = shift_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), In (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

equality_expression:
1196
  _1 = relational_expression
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
    {                                                          (_1)}
| _1 = equality_expression _2 = Leq _3 = relational_expression
    {((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Eq (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = equality_expression _2 = Lne _3 = relational_expression
    {((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Ne (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = equality_expression _2 = Leqq _3 = relational_expression
    {((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Eqq (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = equality_expression _2 = Lneq _3 = relational_expression
    {((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Neq (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

equality_expression_no_in:
1208
  _1 = relational_expression_no_in
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
    {    (_1)}
| _1 = equality_expression_no_in _2 = Leq _3 = relational_expression_no_in
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Eq (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = equality_expression_no_in _2 = Lne _3 = relational_expression_no_in
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Ne (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = equality_expression_no_in _2 = Leqq _3 = relational_expression_no_in
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Eqq (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = equality_expression_no_in _2 = Lneq _3 = relational_expression_no_in
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Neq (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

equality_init_expression:
1220
  _1 = relational_init_expression
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
    {                                                        (_1)}
| _1 = equality_init_expression _2 = Leq _3 = relational_expression
    {                                                        ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Eq (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = equality_init_expression _2 = Lne _3 = relational_expression
    {                                                        ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Ne (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = equality_init_expression _2 = Leqq _3 = relational_expression
    {                                                        ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Eqq (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}
| _1 = equality_init_expression _2 = Lneq _3 = relational_expression
    {                                                        ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Neq (default_annotation _2 _2) , (fsto3 _3)), sndo3 _1, trdo3 _3))}

bitwise_and_expression:
1232
  _1 = equality_expression
1233
1234
1235
1236
1237
    {                                                      (_1)}
| _1 = bitwise_and_expression _2 = Lbit_and _3 = equality_expression
    {                                                      ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Bit_and (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

bitwise_and_expression_no_in:
1238
  _1 = equality_expression_no_in
1239
1240
1241
1242
1243
    {                             (_1)}
| _1 = bitwise_and_expression_no_in _2 = Lbit_and _3 = equality_expression_no_in
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Bit_and (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

bitwise_and_init_expression:
1244
  _1 = equality_init_expression
1245
1246
1247
1248
1249
    {                            (_1)}
| _1 = bitwise_and_init_expression _2 = Lbit_and _3 = equality_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Bit_and (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

bitwise_xor_expression:
1250
  _1 = bitwise_and_expression
1251
1252
1253
1254
1255
    {                                                     (_1)}
| _1 = bitwise_xor_expression _2 = Lxor _3 = bitwise_and_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Xor (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

bitwise_xor_expression_no_in:
1256
  _1 = bitwise_and_expression_no_in
1257
1258
1259
1260
1261
    {    (_1)}
| _1 = bitwise_xor_expression_no_in _2 = Lxor _3 = bitwise_and_expression_no_in
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Xor (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

bitwise_xor_init_expression:
1262
  _1 = bitwise_and_init_expression
1263
1264
1265
1266
1267
    {    (_1)}
| _1 = bitwise_xor_init_expression _2 = Lxor _3 = bitwise_and_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Xor (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

bitwise_or_expression:
1268
  _1 = bitwise_xor_expression
1269
1270
1271
1272
1273
    {    (_1)}
| _1 = bitwise_or_expression _2 = Lbit_or _3 = bitwise_xor_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Bit_or (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

bitwise_or_expression_no_in:
1274
  _1 = bitwise_xor_expression_no_in
1275
1276
1277
1278
1279
    {    (_1)}
| _1 = bitwise_or_expression_no_in _2 = Lbit_or _3 = bitwise_xor_expression_no_in
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Bit_or (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

bitwise_or_init_expression:
1280
  _1 = bitwise_xor_init_expression
1281
1282
1283
1284
1285
    {    (_1)}
| _1 = bitwise_or_init_expression _2 = Lbit_or _3 = bitwise_xor_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Bit_or (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

logical_and_expression:
1286
  _1 = bitwise_or_expression
1287
1288
1289
1290
1291
    {    (_1)}
| _1 = logical_and_expression _2 = Lsc_and _3 = bitwise_or_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Sc_and (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

logical_and_expression_no_in:
1292
  _1 = bitwise_or_expression_no_in
1293
1294
1295
1296
1297
    {    (_1)}
| _1 = logical_and_expression_no_in _2 = Lsc_and _3 = bitwise_or_expression_no_in
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Sc_and (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

logical_and_init_expression:
1298
  _1 = bitwise_or_init_expression
1299
1300
1301
1302
1303
    {    (_1)}
| _1 = logical_and_init_expression _2 = Lsc_and _3 = bitwise_or_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Sc_and (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

logical_or_expression:
1304
  _1 = logical_and_expression
1305
1306
1307
1308
1309
    {    (_1)}
| _1 = logical_or_expression _2 = Lsc_or _3 = logical_and_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Sc_or (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

logical_or_expression_no_in:
1310
  _1 = logical_and_expression_no_in
1311
1312
1313
1314
1315
    {    (_1)}
| _1 = logical_or_expression_no_in _2 = Lsc_or _3 = logical_and_expression_no_in
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Sc_or (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

logical_or_init_expression:
1316
  _1 = logical_and_init_expression
1317
1318
1319
1320
1321
    {    (_1)}
| _1 = logical_or_init_expression _2 = Lsc_or _3 = logical_and_expression
    {    ((Binop ((default_annotation (sndo3 _1) (trdo3 _3)),(fsto3 _1), Sc_or (default_annotation _2 _2), (fsto3 _3)), sndo3 _1, trdo3 _3))}

conditional_expression:
1322
  _1 = logical_or_expression
1323
1324
1325
1326
1327
1328
1329
    {    (_1)}
| _1 = logical_or_expression _2 = Lhook _3 = assignment_expression _4 = Lcolon _5 = assignment_expression
    {    ((Conditional ((default_annotation (sndo3 _1) (trdo3 _5)),
		   (fsto3 _1), (fsto3 _3), (fsto3 _5)),
      sndo3 _1, trdo3 _5))}

conditional_expression_no_in:
1330
  _1 = logical_or_expression_no_in
1331
1332
1333
1334
1335
1336
1337
    {    (_1)}
| _1 = logical_or_expression_no_in _2 = Lhook _3 = assignment_expression_no_in _4 = Lcolon _5 = assignment_expression_no_in
    {    ((Conditional ((default_annotation (sndo3 _1) (trdo3 _5)),
		   (fsto3 _1), (fsto3 _3), (fsto3 _5)),
      sndo3 _1, trdo3 _5))}

conditional_init_expression:
1338
  _1 = logical_or_init_expression
1339
1340
1341
1342
1343
1344
1345
    {    (_1)}
| _1 = logical_or_init_expression _2 = Lhook _3 = assignment_expression _4 = Lcolon _5 = assignment_expression
    {    ((Conditional ((default_annotation (sndo3 _1) (trdo3 _5)),
		   (fsto3 _1), (fsto3 _3), (fsto3 _5)),
      sndo3 _1, trdo3 _5))}

assignment_expression:
1346
  _1 = conditional_expression
1347
1348
1349
1350
1351
1352
1353
    {    (_1)}
| _1 = left_hand_side_expression _2 = assignment_operator _3 = assignment_expression
    {    ((Assign ((default_annotation (sndo3 _1) (trdo3 _3)),
	      (fsto3 _1), (fsto3 _2), (fsto3 _3)),
      sndo3 _1, trdo3 _3))}

assignment_expression_no_in:
1354
  _1 = conditional_expression_no_in
1355
1356
1357
1358
1359
1360
1361
    {    (_1)}
| _1 = left_hand_side_expression _2 = assignment_operator _3 = assignment_expression_no_in
    {    ((Assign ((default_annotation (sndo3 _1) (trdo3 _3)),
	      (fsto3 _1), (fsto3 _2), (fsto3 _3)),
      sndo3 _1, trdo3 _3))}

assignment_init_expression:
1362
  _1 = conditional_init_expression
1363
1364
1365
1366
1367
1368
1369
    {    (_1)}
| _1 = left_hand_side_init_expression _2 = assignment_operator _3 = assignment_expression
    {    ((Assign ((default_annotation (sndo3 _1) (trdo3 _3)),
	      (fsto3 _1), (fsto3 _2), (fsto3 _3)),
      sndo3 _1, trdo3 _3))}

assignment_operator:
1370
  _1 = Lassign
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
    {                        ((Regular_assign (default_annotation _1 _1), _1, _1))}
| _1 = Lstarassign
    {                        ((Star_assign (default_annotation _1 _1), _1, _1))}
| _1 = Lslashassign
    {                        ((Slash_assign (default_annotation _1 _1), _1, _1))}
| _1 = Lremassign
    {                        ((Rem_assign (default_annotation _1 _1), _1, _1))}
| _1 = Lplusassign
    {                        ((Plus_assign (default_annotation _1 _1), _1, _1))}
| _1 = Lminusassign
    {                        ((Minus_assign (default_annotation _1 _1), _1, _1))}
| _1 = Llshiftassign
    {                        ((Lshift_assign (default_annotation _1 _1), _1, _1))}
| _1 = Lrsignedshiftassign
    {                        ((Rsignedshift_assign (default_annotation _1 _1), _1, _1))}
| _1 = Lrunsignedshiftassign
    {                        ((Runsignedshift_assign (default_annotation _1 _1), _1, _1))}
| _1 = Landassign
    {                        ((And_assign (default_annotation _1 _1), _1, _1))}
| _1 = Lxorassign
    {                        ((Xor_assign (default_annotation _1 _1), _1, _1))}
| _1 = Lorassign
    {                        ((Or_assign (default_annotation _1 _1), _1, _1))}

%%