rustlr 0.2.4

LR(1)/LALR(1) parser generator for rust
Documentation
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
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
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
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
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
# rustlr LR(1) parser generater created 4508 states for this grammar.

terminal BOOLEAN 
terminal BYTE SHORT INT LONG CHAR 
terminal FLOAT DOUBLE 
terminal LBRACK RBRACK 
typedterminal IDENTIFIER java.lang.String
terminal DOT 
terminal SEMICOLON MULT COMMA LBRACE RBRACE EQ LPAREN RPAREN COLON 
terminal PACKAGE 
terminal IMPORT 
terminal PUBLIC PROTECTED PRIVATE 
terminal STATIC 
terminal ABSTRACT FINAL NATIVE SYNCHRONIZED TRANSIENT VOLATILE 
terminal CLASS 
terminal EXTENDS 
terminal IMPLEMENTS 
terminal VOID 
terminal THROWS 
terminal THIS SUPER 
terminal INTERFACE 
terminal IF ELSE 
terminal SWITCH 
terminal CASE DEFAULT 
terminal DO WHILE 
terminal FOR 
terminal BREAK 
terminal CONTINUE 
terminal RETURN 
terminal THROW 
terminal TRY 
terminal CATCH 
terminal FINALLY 
terminal NEW 
terminal PLUSPLUS 
terminal MINUSMINUS 
terminal PLUS MINUS COMP NOT DIV MOD 
terminal LSHIFT RSHIFT URSHIFT 
terminal LT GT LTEQ GTEQ INSTANCEOF 
terminal EQEQ NOTEQ 
terminal AND 
terminal XOR 
terminal OR 
terminal ANDAND 
terminal OROR 
terminal QUESTION 
terminal MULTEQ DIVEQ MODEQ PLUSEQ MINUSEQ 
terminal LSHIFTEQ RSHIFTEQ URSHIFTEQ 
terminal ANDEQ XOREQ OREQ 
typedterminal INTEGER_LITERAL java.lang.Number
typedterminal FLOATING_POINT_LITERAL java.lang.Number
typedterminal BOOLEAN_LITERAL java.lang.Boolean
typedterminal CHARACTER_LITERAL java.lang.Character
typedterminal STRING_LITERAL java.lang.String
terminal NULL_LITERAL 
terminal CONST GOTO 
terminal STRICTFP 
terminal ASSERT 
terminal ELLIPSIS 
terminal ENUM 
nonterminal  goal Object
nonterminal  literal Object
nonterminal  type Object
nonterminal  primitive_type Object
nonterminal  numeric_type Object
nonterminal  integral_type Object
nonterminal  floating_point_type Object
nonterminal  reference_type Object
nonterminal  class_or_interface_type Object
nonterminal  class_type Object
nonterminal  interface_type Object
nonterminal  array_type Object
nonterminal  name Object
nonterminal  simple_name Object
nonterminal  qualified_name Object
nonterminal  compilation_unit Object
nonterminal  package_declaration_opt Object
nonterminal  package_declaration Object
nonterminal  import_declarations_opt Object
nonterminal  import_declarations Object
nonterminal  type_declarations_opt Object
nonterminal  type_declarations Object
nonterminal  import_declaration Object
nonterminal  single_type_import_declaration Object
nonterminal  type_import_on_demand_declaration Object
nonterminal  type_declaration Object
nonterminal  modifiers_opt Object
nonterminal  modifiers Object
nonterminal  modifier Object
nonterminal  class_declaration Object
nonterminal  super Object
nonterminal  super_opt Object
nonterminal  interfaces Object
nonterminal  interfaces_opt Object
nonterminal  interface_type_list Object
nonterminal  class_body Object
nonterminal  class_body_declarations Object
nonterminal  class_body_declarations_opt Object
nonterminal  class_body_declaration Object
nonterminal  class_member_declaration Object
nonterminal  field_declaration Object
nonterminal  variable_declarators Object
nonterminal  variable_declarator Object
nonterminal  variable_declarator_id Object
nonterminal  variable_initializer Object
nonterminal  method_declaration Object
nonterminal  method_header Object
nonterminal  method_declarator Object
nonterminal  formal_parameter_list_opt Object
nonterminal  formal_parameter_list Object
nonterminal  formal_parameter Object
nonterminal  throws_opt Object
nonterminal  throws Object
nonterminal  class_type_list Object
nonterminal  method_body Object
nonterminal  static_initializer Object
nonterminal  constructor_declaration Object
nonterminal  constructor_declarator Object
nonterminal  constructor_body Object
nonterminal  explicit_constructor_invocation Object
nonterminal  interface_declaration Object
nonterminal  extends_interfaces_opt Object
nonterminal  extends_interfaces Object
nonterminal  interface_body Object
nonterminal  interface_member_declarations_opt Object
nonterminal  interface_member_declarations Object
nonterminal  interface_member_declaration Object
nonterminal  constant_declaration Object
nonterminal  abstract_method_declaration Object
nonterminal  array_initializer Object
nonterminal  variable_initializers Object
nonterminal  block Object
nonterminal  block_statements_opt Object
nonterminal  block_statements Object
nonterminal  block_statement Object
nonterminal  local_variable_declaration_statement Object
nonterminal  local_variable_declaration Object
nonterminal  statement Object
nonterminal  statement_no_short_if Object
nonterminal  statement_without_trailing_substatement Object
nonterminal  empty_statement Object
nonterminal  labeled_statement Object
nonterminal  labeled_statement_no_short_if Object
nonterminal  expression_statement Object
nonterminal  statement_expression Object
nonterminal  if_then_statement Object
nonterminal  if_then_else_statement Object
nonterminal  if_then_else_statement_no_short_if Object
nonterminal  switch_statement Object
nonterminal  switch_block Object
nonterminal  switch_block_statement_groups Object
nonterminal  switch_block_statement_group Object
nonterminal  switch_labels Object
nonterminal  switch_label Object
nonterminal  while_statement Object
nonterminal  while_statement_no_short_if Object
nonterminal  do_statement Object
nonterminal  for_statement Object
nonterminal  for_statement_no_short_if Object
nonterminal  for_init_opt Object
nonterminal  for_init Object
nonterminal  for_update_opt Object
nonterminal  for_update Object
nonterminal  statement_expression_list Object
nonterminal  identifier_opt Object
nonterminal  break_statement Object
nonterminal  continue_statement Object
nonterminal  return_statement Object
nonterminal  throw_statement Object
nonterminal  synchronized_statement Object
nonterminal  try_statement Object
nonterminal  catches_opt Object
nonterminal  catches Object
nonterminal  catch_clause Object
nonterminal  finally Object
nonterminal  assert_statement Object
nonterminal  primary Object
nonterminal  primary_no_new_array Object
nonterminal  class_instance_creation_expression Object
nonterminal  argument_list_opt Object
nonterminal  argument_list Object
nonterminal  array_creation_init Object
nonterminal  array_creation_uninit Object
nonterminal  dim_exprs Object
nonterminal  dim_expr Object
nonterminal  dims_opt Object
nonterminal  dims Object
nonterminal  field_access Object
nonterminal  method_invocation Object
nonterminal  array_access Object
nonterminal  postfix_expression Object
nonterminal  postincrement_expression Object
nonterminal  postdecrement_expression Object
nonterminal  unary_expression Object
nonterminal  unary_expression_not_plus_minus Object
nonterminal  preincrement_expression Object
nonterminal  predecrement_expression Object
nonterminal  cast_expression Object
nonterminal  multiplicative_expression Object
nonterminal  additive_expression Object
nonterminal  shift_expression Object
nonterminal  relational_expression Object
nonterminal  equality_expression Object
nonterminal  and_expression Object
nonterminal  exclusive_or_expression Object
nonterminal  inclusive_or_expression Object
nonterminal  conditional_and_expression Object
nonterminal  conditional_or_expression Object
nonterminal  conditional_expression Object
nonterminal  assignment_expression Object
nonterminal  assignment Object
nonterminal  assignment_operator Object
nonterminal  expression_opt Object
nonterminal  expression Object
nonterminal  constant_expression Object
topsym  goal
goal --> compilation_unit
literal --> INTEGER_LITERAL
literal --> FLOATING_POINT_LITERAL
literal --> BOOLEAN_LITERAL
literal --> CHARACTER_LITERAL
literal --> STRING_LITERAL
literal --> NULL_LITERAL
type --> primitive_type
type --> reference_type
primitive_type --> numeric_type
primitive_type --> BOOLEAN
numeric_type --> integral_type
numeric_type --> floating_point_type
integral_type --> BYTE
integral_type --> SHORT
integral_type --> INT
integral_type --> LONG
integral_type --> CHAR
floating_point_type --> FLOAT
floating_point_type --> DOUBLE
reference_type --> class_or_interface_type
reference_type --> array_type
class_or_interface_type --> name
class_type --> class_or_interface_type
interface_type --> class_or_interface_type
array_type --> primitive_type dims
array_type --> name dims
name --> simple_name
name --> qualified_name
simple_name --> IDENTIFIER
qualified_name --> name DOT IDENTIFIER
compilation_unit --> package_declaration_opt import_declarations_opt type_declarations_opt
package_declaration_opt --> package_declaration
package_declaration_opt -->   
import_declarations_opt --> import_declarations
import_declarations_opt -->   
type_declarations_opt --> type_declarations
type_declarations_opt -->   
import_declarations --> import_declaration
import_declarations --> import_declarations import_declaration
type_declarations --> type_declaration
type_declarations --> type_declarations type_declaration
package_declaration --> PACKAGE name SEMICOLON
import_declaration --> single_type_import_declaration
import_declaration --> type_import_on_demand_declaration
single_type_import_declaration --> IMPORT name SEMICOLON
type_import_on_demand_declaration --> IMPORT name DOT MULT SEMICOLON
type_declaration --> class_declaration
type_declaration --> interface_declaration
type_declaration --> SEMICOLON
modifiers_opt -->   
modifiers_opt --> modifiers
modifiers --> modifier
modifiers --> modifiers modifier
modifier --> PUBLIC
modifier --> PROTECTED
modifier --> PRIVATE
modifier --> STATIC
modifier --> ABSTRACT
modifier --> FINAL
modifier --> NATIVE
modifier --> SYNCHRONIZED
modifier --> TRANSIENT
modifier --> VOLATILE
modifier --> STRICTFP
class_declaration --> modifiers_opt CLASS IDENTIFIER super_opt interfaces_opt class_body
super --> EXTENDS class_type
super_opt -->   
super_opt --> super
interfaces --> IMPLEMENTS interface_type_list
interfaces_opt -->   
interfaces_opt --> interfaces
interface_type_list --> interface_type
interface_type_list --> interface_type_list COMMA interface_type
class_body --> LBRACE class_body_declarations_opt RBRACE
class_body_declarations_opt -->   
class_body_declarations_opt --> class_body_declarations
class_body_declarations --> class_body_declaration
class_body_declarations --> class_body_declarations class_body_declaration
class_body_declaration --> class_member_declaration
class_body_declaration --> static_initializer
class_body_declaration --> constructor_declaration
class_body_declaration --> block
class_member_declaration --> field_declaration
class_member_declaration --> method_declaration
class_member_declaration --> modifiers_opt CLASS IDENTIFIER super_opt interfaces_opt class_body
class_member_declaration --> interface_declaration
class_member_declaration --> SEMICOLON
field_declaration --> modifiers_opt type variable_declarators SEMICOLON
variable_declarators --> variable_declarator
variable_declarators --> variable_declarators COMMA variable_declarator
variable_declarator --> variable_declarator_id
variable_declarator --> variable_declarator_id EQ variable_initializer
variable_declarator_id --> IDENTIFIER
variable_declarator_id --> variable_declarator_id LBRACK RBRACK
variable_initializer --> expression
variable_initializer --> array_initializer
method_declaration --> method_header method_body
method_header --> modifiers_opt type method_declarator throws_opt
method_header --> modifiers_opt VOID method_declarator throws_opt
method_declarator --> IDENTIFIER LPAREN formal_parameter_list_opt RPAREN
method_declarator --> method_declarator LBRACK RBRACK
formal_parameter_list_opt -->   
formal_parameter_list_opt --> formal_parameter_list
formal_parameter_list --> formal_parameter
formal_parameter_list --> formal_parameter_list COMMA formal_parameter
formal_parameter --> type variable_declarator_id
formal_parameter --> FINAL type variable_declarator_id
throws_opt -->   
throws_opt --> throws
throws --> THROWS class_type_list
class_type_list --> class_type
class_type_list --> class_type_list COMMA class_type
method_body --> block
method_body --> SEMICOLON
static_initializer --> STATIC block
constructor_declaration --> modifiers_opt constructor_declarator throws_opt constructor_body
constructor_declarator --> simple_name LPAREN formal_parameter_list_opt RPAREN
constructor_body --> LBRACE explicit_constructor_invocation block_statements RBRACE
constructor_body --> LBRACE explicit_constructor_invocation RBRACE
constructor_body --> LBRACE block_statements RBRACE
constructor_body --> LBRACE RBRACE
explicit_constructor_invocation --> THIS LPAREN argument_list_opt RPAREN SEMICOLON
explicit_constructor_invocation --> SUPER LPAREN argument_list_opt RPAREN SEMICOLON
explicit_constructor_invocation --> primary DOT THIS LPAREN argument_list_opt RPAREN SEMICOLON
explicit_constructor_invocation --> primary DOT SUPER LPAREN argument_list_opt RPAREN SEMICOLON
interface_declaration --> modifiers_opt INTERFACE IDENTIFIER extends_interfaces_opt interface_body
extends_interfaces_opt -->   
extends_interfaces_opt --> extends_interfaces
extends_interfaces --> EXTENDS interface_type
extends_interfaces --> extends_interfaces COMMA interface_type
interface_body --> LBRACE interface_member_declarations_opt RBRACE
interface_member_declarations_opt -->   
interface_member_declarations_opt --> interface_member_declarations
interface_member_declarations --> interface_member_declaration
interface_member_declarations --> interface_member_declarations interface_member_declaration
interface_member_declaration --> constant_declaration
interface_member_declaration --> abstract_method_declaration
interface_member_declaration --> class_declaration
interface_member_declaration --> interface_declaration
interface_member_declaration --> SEMICOLON
constant_declaration --> field_declaration
abstract_method_declaration --> method_header SEMICOLON
array_initializer --> LBRACE variable_initializers COMMA RBRACE
array_initializer --> LBRACE variable_initializers RBRACE
array_initializer --> LBRACE COMMA RBRACE
array_initializer --> LBRACE RBRACE
variable_initializers --> variable_initializer
variable_initializers --> variable_initializers COMMA variable_initializer
block --> LBRACE block_statements_opt RBRACE
block_statements_opt -->   
block_statements_opt --> block_statements
block_statements --> block_statement
block_statements --> block_statements block_statement
block_statement --> local_variable_declaration_statement
block_statement --> statement
block_statement --> class_declaration
block_statement --> interface_declaration
local_variable_declaration_statement --> local_variable_declaration SEMICOLON
local_variable_declaration --> type variable_declarators
local_variable_declaration --> FINAL type variable_declarators
statement --> statement_without_trailing_substatement
statement --> labeled_statement
statement --> if_then_statement
statement --> if_then_else_statement
statement --> while_statement
statement --> for_statement
statement_no_short_if --> statement_without_trailing_substatement
statement_no_short_if --> labeled_statement_no_short_if
statement_no_short_if --> if_then_else_statement_no_short_if
statement_no_short_if --> while_statement_no_short_if
statement_no_short_if --> for_statement_no_short_if
statement_without_trailing_substatement --> block
statement_without_trailing_substatement --> empty_statement
statement_without_trailing_substatement --> expression_statement
statement_without_trailing_substatement --> switch_statement
statement_without_trailing_substatement --> do_statement
statement_without_trailing_substatement --> break_statement
statement_without_trailing_substatement --> continue_statement
statement_without_trailing_substatement --> return_statement
statement_without_trailing_substatement --> synchronized_statement
statement_without_trailing_substatement --> throw_statement
statement_without_trailing_substatement --> try_statement
statement_without_trailing_substatement --> assert_statement
empty_statement --> SEMICOLON
labeled_statement --> IDENTIFIER COLON statement
labeled_statement_no_short_if --> IDENTIFIER COLON statement_no_short_if
expression_statement --> statement_expression SEMICOLON
statement_expression --> assignment
statement_expression --> preincrement_expression
statement_expression --> predecrement_expression
statement_expression --> postincrement_expression
statement_expression --> postdecrement_expression
statement_expression --> method_invocation
statement_expression --> class_instance_creation_expression
if_then_statement --> IF LPAREN expression RPAREN statement
if_then_else_statement --> IF LPAREN expression RPAREN statement_no_short_if ELSE statement
if_then_else_statement_no_short_if --> IF LPAREN expression RPAREN statement_no_short_if ELSE statement_no_short_if
switch_statement --> SWITCH LPAREN expression RPAREN switch_block
switch_block --> LBRACE switch_block_statement_groups switch_labels RBRACE
switch_block --> LBRACE switch_block_statement_groups RBRACE
switch_block --> LBRACE switch_labels RBRACE
switch_block --> LBRACE RBRACE
switch_block_statement_groups --> switch_block_statement_group
switch_block_statement_groups --> switch_block_statement_groups switch_block_statement_group
switch_block_statement_group --> switch_labels block_statements
switch_labels --> switch_label
switch_labels --> switch_labels switch_label
switch_label --> CASE constant_expression COLON
switch_label --> DEFAULT COLON
while_statement --> WHILE LPAREN expression RPAREN statement
while_statement_no_short_if --> WHILE LPAREN expression RPAREN statement_no_short_if
do_statement --> DO statement WHILE LPAREN expression RPAREN SEMICOLON
for_statement --> FOR LPAREN for_init_opt SEMICOLON expression_opt SEMICOLON for_update_opt RPAREN statement
for_statement_no_short_if --> FOR LPAREN for_init_opt SEMICOLON expression_opt SEMICOLON for_update_opt RPAREN statement_no_short_if
for_init_opt -->   
for_init_opt --> for_init
for_init --> statement_expression_list
for_init --> local_variable_declaration
for_update_opt -->   
for_update_opt --> for_update
for_update --> statement_expression_list
statement_expression_list --> statement_expression
statement_expression_list --> statement_expression_list COMMA statement_expression
identifier_opt -->   
identifier_opt --> IDENTIFIER
break_statement --> BREAK identifier_opt SEMICOLON
continue_statement --> CONTINUE identifier_opt SEMICOLON
return_statement --> RETURN expression_opt SEMICOLON
throw_statement --> THROW expression SEMICOLON
synchronized_statement --> SYNCHRONIZED LPAREN expression RPAREN block
try_statement --> TRY block catches
try_statement --> TRY block catches_opt finally
catches_opt -->   
catches_opt --> catches
catches --> catch_clause
catches --> catches catch_clause
catch_clause --> CATCH LPAREN formal_parameter RPAREN block
finally --> FINALLY block
assert_statement --> ASSERT expression SEMICOLON
assert_statement --> ASSERT expression COLON expression SEMICOLON
primary --> primary_no_new_array
primary --> array_creation_init
primary --> array_creation_uninit
primary_no_new_array --> literal
primary_no_new_array --> THIS
primary_no_new_array --> LPAREN expression RPAREN
primary_no_new_array --> class_instance_creation_expression
primary_no_new_array --> field_access
primary_no_new_array --> method_invocation
primary_no_new_array --> array_access
primary_no_new_array --> primitive_type DOT CLASS
primary_no_new_array --> VOID DOT CLASS
primary_no_new_array --> array_type DOT CLASS
primary_no_new_array --> name DOT CLASS
primary_no_new_array --> name DOT THIS
class_instance_creation_expression --> NEW class_or_interface_type LPAREN argument_list_opt RPAREN
class_instance_creation_expression --> NEW class_or_interface_type LPAREN argument_list_opt RPAREN class_body
class_instance_creation_expression --> primary DOT NEW IDENTIFIER LPAREN argument_list_opt RPAREN
class_instance_creation_expression --> primary DOT NEW IDENTIFIER LPAREN argument_list_opt RPAREN class_body
class_instance_creation_expression --> name DOT NEW IDENTIFIER LPAREN argument_list_opt RPAREN
class_instance_creation_expression --> name DOT NEW IDENTIFIER LPAREN argument_list_opt RPAREN class_body
argument_list_opt -->   
argument_list_opt --> argument_list
argument_list --> expression
argument_list --> argument_list COMMA expression
array_creation_uninit --> NEW primitive_type dim_exprs dims_opt
array_creation_uninit --> NEW class_or_interface_type dim_exprs dims_opt
array_creation_init --> NEW primitive_type dims array_initializer
array_creation_init --> NEW class_or_interface_type dims array_initializer
dim_exprs --> dim_expr
dim_exprs --> dim_exprs dim_expr
dim_expr --> LBRACK expression RBRACK
dims_opt -->   
dims_opt --> dims
dims --> LBRACK RBRACK
dims --> dims LBRACK RBRACK
field_access --> primary DOT IDENTIFIER
field_access --> SUPER DOT IDENTIFIER
field_access --> name DOT SUPER DOT IDENTIFIER
method_invocation --> name LPAREN argument_list_opt RPAREN
method_invocation --> primary DOT IDENTIFIER LPAREN argument_list_opt RPAREN
method_invocation --> SUPER DOT IDENTIFIER LPAREN argument_list_opt RPAREN
method_invocation --> name DOT SUPER DOT IDENTIFIER LPAREN argument_list_opt RPAREN
array_access --> name LBRACK expression RBRACK
array_access --> primary_no_new_array LBRACK expression RBRACK
array_access --> array_creation_init LBRACK expression RBRACK
postfix_expression --> primary
postfix_expression --> name
postfix_expression --> postincrement_expression
postfix_expression --> postdecrement_expression
postincrement_expression --> postfix_expression PLUSPLUS
postdecrement_expression --> postfix_expression MINUSMINUS
unary_expression --> preincrement_expression
unary_expression --> predecrement_expression
unary_expression --> PLUS unary_expression
unary_expression --> MINUS unary_expression
unary_expression --> unary_expression_not_plus_minus
preincrement_expression --> PLUSPLUS unary_expression
predecrement_expression --> MINUSMINUS unary_expression
unary_expression_not_plus_minus --> postfix_expression
unary_expression_not_plus_minus --> COMP unary_expression
unary_expression_not_plus_minus --> NOT unary_expression
unary_expression_not_plus_minus --> cast_expression
cast_expression --> LPAREN primitive_type dims_opt RPAREN unary_expression
cast_expression --> LPAREN expression RPAREN unary_expression_not_plus_minus
cast_expression --> LPAREN name dims RPAREN unary_expression_not_plus_minus
multiplicative_expression --> unary_expression
multiplicative_expression --> multiplicative_expression MULT unary_expression
multiplicative_expression --> multiplicative_expression DIV unary_expression
multiplicative_expression --> multiplicative_expression MOD unary_expression
additive_expression --> multiplicative_expression
additive_expression --> additive_expression PLUS multiplicative_expression
additive_expression --> additive_expression MINUS multiplicative_expression
shift_expression --> additive_expression
shift_expression --> shift_expression LSHIFT additive_expression
shift_expression --> shift_expression RSHIFT additive_expression
shift_expression --> shift_expression URSHIFT additive_expression
relational_expression --> shift_expression
relational_expression --> relational_expression LT shift_expression
relational_expression --> relational_expression GT shift_expression
relational_expression --> relational_expression LTEQ shift_expression
relational_expression --> relational_expression GTEQ shift_expression
relational_expression --> relational_expression INSTANCEOF reference_type
equality_expression --> relational_expression
equality_expression --> equality_expression EQEQ relational_expression
equality_expression --> equality_expression NOTEQ relational_expression
and_expression --> equality_expression
and_expression --> and_expression AND equality_expression
exclusive_or_expression --> and_expression
exclusive_or_expression --> exclusive_or_expression XOR and_expression
inclusive_or_expression --> exclusive_or_expression
inclusive_or_expression --> inclusive_or_expression OR exclusive_or_expression
conditional_and_expression --> inclusive_or_expression
conditional_and_expression --> conditional_and_expression ANDAND inclusive_or_expression
conditional_or_expression --> conditional_and_expression
conditional_or_expression --> conditional_or_expression OROR conditional_and_expression
conditional_expression --> conditional_or_expression
conditional_expression --> conditional_or_expression QUESTION expression COLON conditional_expression
assignment_expression --> conditional_expression
assignment_expression --> assignment
assignment --> postfix_expression assignment_operator assignment_expression
assignment_operator --> EQ
assignment_operator --> MULTEQ
assignment_operator --> DIVEQ
assignment_operator --> MODEQ
assignment_operator --> PLUSEQ
assignment_operator --> MINUSEQ
assignment_operator --> LSHIFTEQ
assignment_operator --> RSHIFTEQ
assignment_operator --> URSHIFTEQ
assignment_operator --> ANDEQ
assignment_operator --> XOREQ
assignment_operator --> OREQ
expression_opt -->   
expression_opt --> expression
expression --> assignment_expression
constant_expression --> expression

EOF