"Yacc" owes much to a most stimulating collection of users, who have goaded me beyond my inclination, and frequently beyond my ability in their endless search for "one more feature". Their irritating unwillingness to learn how to do things my way has usually led to my doing things their way; most of the time, they have been right.– S. C. Johnson, "Yacc guide acknowledgements
This appendix describes the HAC language's grammar. The grammar is context-free and LR(1), so traditional yacc and bison (LALR(1)) parser generators will work with it.
0 $accept: module $end 1 module: embedded_module 2 embedded_module: imports_optional top_root 3 imports_optional: imports 4 | /* empty */ 5 imports: imports import_item 6 | import_item 7 import_item: IMPORT 8 | EMBEDFILE BEGINFILE embedded_module ENDFILE 9 top_root: body 10 | /* empty */ 11 body: body body_item 12 | body_item 13 body_item: namespace_item 14 | definition 15 | prototype_declaration 16 namespace_item: namespace_management 17 | instance_item_extended 18 | type_alias 19 namespace_management: NAMESPACE ID '{' top_root '}' 20 | OPEN namespace_id RARROW ID ';' 21 | OPEN namespace_id ';' 22 namespace_id: relative_id 23 definition: defproc 24 | defdatatype 25 | defchan 26 | defenum 27 prototype_declaration: declare_proc_proto ';' 28 | declare_datatype_proto ';' 29 | declare_chan_proto ';' 30 | declare_enum ';' 31 type_alias: optional_export optional_template_specification TYPEDEF physical_type_ref ID ';' 32 template_specification: TEMPLATE template_formal_decl_list_in_angles 33 | TEMPLATE template_formal_decl_list_optional_in_angles template_formal_decl_nodefault_list_in_angles 34 optional_template_specification: template_specification 35 | /* empty */ 36 optional_export: EXPORT 37 | /* empty */ 38 def_or_proc: DEFINE 39 | DEFPROC 40 declare_proc_proto: optional_export optional_template_specification def_or_proc ID optional_port_formal_decl_list_in_parens 41 defproc: declare_proc_proto '{' optional_definition_body '}' 42 optional_port_formal_decl_list_in_parens: '(' port_formal_decl_list ')' 43 | '(' ')' 44 template_formal_decl_list_in_angles: '<' template_formal_decl_list '>' 45 template_formal_decl_nodefault_list_in_angles: '<' template_formal_decl_nodefault_list '>' 46 template_formal_decl_list_optional_in_angles: template_formal_decl_list_in_angles 47 | '<' '>' 48 template_formal_decl_list: template_formal_decl_list ';' template_formal_decl 49 | template_formal_decl 50 template_formal_decl_nodefault_list: template_formal_decl_nodefault_list ';' template_formal_decl_nodefault 51 | template_formal_decl_nodefault 52 template_formal_decl: base_param_type template_formal_id_list 53 template_formal_decl_nodefault: base_param_type template_formal_id_nodefault_list 54 template_formal_id_list: template_formal_id_list ',' template_formal_id 55 | template_formal_id 56 template_formal_id_nodefault_list: template_formal_id_nodefault_list ',' template_formal_id_nodefault 57 | template_formal_id_nodefault 58 template_formal_id_default: ID optional_dense_range_list '=' expr 59 template_formal_id_nodefault: ID optional_dense_range_list 60 template_formal_id: template_formal_id_default 61 | template_formal_id_nodefault 62 port_formal_decl_list: port_formal_decl_list ';' port_formal_decl 63 | port_formal_decl 64 port_formal_decl: port_physical_type_ref port_formal_id_list 65 port_formal_id_list: port_formal_id_list ',' port_formal_id 66 | port_formal_id 67 port_formal_id: ID optional_dense_range_list 68 port_generic_type_ref: generic_type_ref optional_chan_dir 69 generic_type_ref: generic_id strict_relaxed_template_arguments 70 optional_chan_dir: chan_dir 71 | /* empty */ 72 chan_dir: '?' 73 | '!' 74 | '?' '?' 75 | '!' '!' 76 port_physical_type_ref: port_generic_type_ref 77 | port_base_chan_type 78 | port_base_data_type_ref 79 physical_type_ref: generic_type_ref 80 | base_chan_type 81 | base_data_type_ref 82 port_base_data_type_ref: base_data_type_ref optional_chan_dir 83 base_data_type_ref: base_data_type strict_relaxed_template_arguments 84 data_type_ref: base_data_type_ref 85 | generic_type_ref 86 type_id: physical_type_ref 87 | base_param_type 88 base_param_type: PINT_TYPE 89 | PBOOL_TYPE 90 | PREAL_TYPE 91 | PSTRING_TYPE 92 port_base_chan_type: chan_or_port data_type_ref_list_optional_in_parens 93 base_chan_type: CHANNEL data_type_ref_list_optional_in_parens 94 chan_or_port: CHANNEL optional_chan_dir 95 data_type_ref_list_optional_in_parens: '(' data_type_ref_list_optional ')' 96 data_type_ref_list_optional: data_type_ref_list 97 | /* empty */ 98 data_type_ref_list: data_type_ref_list ',' data_type_ref 99 | data_type_ref 100 base_data_type: INT_TYPE 101 | BOOL_TYPE 102 declare_datatype_proto: optional_export optional_template_specification DEFTYPE ID DEFINEOP data_type_ref optional_port_formal_decl_list_in_parens 103 defdatatype: declare_datatype_proto '{' optional_datatype_body set_body_optional get_body_optional '}' 104 set_body_optional: set_body 105 | /* empty */ 106 get_body_optional: get_body 107 | /* empty */ 108 set_body: SET '{' chp_body_optional '}' 109 get_body: GET '{' chp_body_optional '}' 110 declare_enum: ENUM ID 111 defenum: ENUM ID '{' enum_member_list '}' 112 enum_member_list: enum_member_list ',' ID 113 | ID 114 declare_chan_proto: optional_export optional_template_specification DEFCHAN ID DEFINEOP base_chan_type optional_port_formal_decl_list_in_parens 115 defchan: declare_chan_proto '{' optional_datatype_body send_body_optional recv_body_optional '}' 116 send_body_optional: send_body 117 | /* empty */ 118 recv_body_optional: recv_body 119 | /* empty */ 120 send_body: SEND '{' chp_body_optional '}' 121 recv_body: RECV '{' chp_body_optional '}' 122 definition_body: definition_body definition_body_item 123 | definition_body_item 124 definition_body_item: instance_item_extended 125 | type_alias 126 optional_definition_body: definition_body 127 | /* empty */ 128 optional_datatype_body: datatype_body 129 | /* empty */ 130 datatype_body: datatype_body datatype_body_item 131 | datatype_body_item 132 datatype_body_item: connection_body_item 133 | lang_spec 134 connection_body_optional: connection_body 135 | /* empty */ 136 connection_body: connection_body connection_body_item 137 | connection_body_item 138 connection_body_item_base: connection_statement 139 | nonempty_alias_list ';' 140 | instance_direction_statement 141 | instance_type_completion_statement 142 | instance_type_completion_connection_statement 143 | instance_attribute_statement 144 connection_body_item: connection_body_item_base 145 | loop_connections 146 | conditional_connections 147 instance_management_list_optional: instance_management_list 148 | /* empty */ 149 instance_management_list: instance_management_list instance_item_extended 150 | instance_item_extended 151 instance_item_extended: instance_item 152 | language_body 153 instance_item: type_instance_declaration 154 | connection_body_item_base 155 | loop_instantiation 156 | conditional_instantiation 157 loop_instantiation: '(' ';' ID ':' range ':' instance_management_list ')' 158 conditional_instantiation: '[' guarded_instance_management_list ']' 159 loop_connections: '(' ';' ID ':' range ':' connection_body ')' 160 conditional_connections: '[' guarded_connection_body ']' 161 type_instance_declaration: type_id instance_id_list ';' 162 instance_id_list: instance_id_list ',' instance_id_item 163 | instance_id_item 164 instance_id_item: ID optional_template_arguments_in_angles sparse_range_list 165 | ID optional_template_arguments_in_angles 166 | ID optional_template_arguments_in_angles extended_connection_actuals_list 167 | ID optional_template_arguments_in_angles '=' alias_list 168 connection_statement: member_index_expr extended_connection_actuals_list ';' 169 extended_connection_actuals_list: optional_implicit_global_connections connection_actuals_list 170 | implicit_global_connections 171 optional_implicit_global_connections: implicit_global_connections 172 | /* empty */ 173 implicit_global_connections: '$' member_index_expr_list_in_parens 174 generic_attribute: ID '=' expr_list 175 | ID 176 | string 177 generic_attribute_list: generic_attribute_list ';' generic_attribute 178 | generic_attribute 179 generic_attribute_list_in_brackets: '[' generic_attribute_list ']' 180 instance_type_completion_statement: index_expr complex_expr_optional_list_in_angles ';' 181 | generic_id complex_expr_optional_list_in_angles ';' 182 instance_direction_statement: member_index_expr chan_dir ';' 183 instance_attribute_statement: member_index_expr '@' generic_attribute_list_in_brackets ';' 184 instance_type_completion_connection_statement: index_expr complex_expr_optional_list_in_angles extended_connection_actuals_list ';' 185 | generic_id complex_expr_optional_list_in_angles extended_connection_actuals_list ';' 186 nonempty_alias_list: nonempty_alias_list '=' complex_aggregate_reference 187 | complex_aggregate_reference '=' complex_aggregate_reference 188 alias_list: alias_list '=' complex_aggregate_reference 189 | complex_aggregate_reference 190 connection_actuals_list: '(' complex_aggregate_reference_list ')' 191 guarded_instance_management_list: guarded_instance_management_list_unmatched THICKBAR instance_management_else_clause 192 | guarded_instance_management_list_unmatched 193 guarded_instance_management_list_unmatched: guarded_instance_management_list_unmatched THICKBAR guarded_instance_management 194 | guarded_instance_management 195 guarded_instance_management: expr RARROW instance_management_list_optional 196 instance_management_else_clause: ELSE RARROW instance_management_list_optional 197 guarded_connection_body: guarded_connection_body_unmatched THICKBAR connection_body_else_clause 198 | guarded_connection_body_unmatched 199 guarded_connection_body_unmatched: guarded_connection_body_unmatched THICKBAR guarded_connection_body_clause 200 | guarded_connection_body_clause 201 guarded_connection_body_clause: expr RARROW connection_body_optional 202 connection_body_else_clause: ELSE RARROW connection_body_optional 203 language_body: CHP_LANG '{' chp_body_optional '}' 204 | HSE_LANG '{' hse_body_optional '}' 205 | PRS_LANG member_index_expr_list_in_angles_optional '{' prs_body_optional '}' 206 | lang_spec 207 lang_spec: SPEC_LANG '{' spec_body_optional '}' 208 chp_body: full_chp_body_item_list 209 chp_body_optional: chp_body 210 | /* empty */ 211 chp_body_or_skip: chp_body 212 | SKIP 213 chp_sequence_group: '{' full_chp_body_item_list '}' 214 full_chp_body_item_list: full_chp_body_item_list ';' full_chp_body_item 215 | full_chp_body_item 216 full_chp_body_item: chp_concurrent_group 217 chp_body_item: chp_statement_attributes chp_statement 218 | chp_statement 219 chp_statement_attributes: '$' '(' generic_attribute_list ')' 220 chp_statement: chp_loop 221 | chp_do_until 222 | chp_selection 223 | chp_wait 224 | chp_binary_assignment 225 | chp_bool_assignment 226 | chp_send 227 | chp_recv 228 | chp_peek 229 | chp_metaloop_selection 230 | chp_metaloop_statement 231 | function_call_expr 232 chp_loop: BEGINLOOP chp_body ']' 233 chp_do_until: BEGINLOOP chp_unmatched_det_guarded_command_list ']' 234 chp_wait: '[' chp_guard_expr ']' 235 chp_selection: '[' chp_matched_det_guarded_command_list ']' 236 | '[' chp_nondet_guarded_command_list ']' 237 chp_metaloop_selection: '[' ':' ID ':' range ':' chp_guarded_command ']' 238 | '[' THICKBAR ID ':' range ':' chp_guarded_command ']' 239 chp_metaloop_statement: '{' ',' ID ':' range ':' chp_body '}' 240 | '{' ';' ID ':' range ':' chp_body '}' 241 chp_nondet_guarded_command_list: chp_nondet_guarded_command_list ':' chp_guarded_command 242 | chp_guarded_command ':' chp_guarded_command 243 chp_matched_det_guarded_command_list: chp_unmatched_det_guarded_command_list THICKBAR chp_else_clause 244 | chp_unmatched_det_guarded_command_list 245 chp_unmatched_det_guarded_command_list: chp_unmatched_det_guarded_command_list THICKBAR chp_guarded_command 246 | chp_guarded_command 247 chp_guarded_command: chp_guard_expr RARROW chp_body_or_skip 248 chp_guard_expr: chp_logical_or_expr 249 chp_unary_bool_expr: chp_simple_bool_expr 250 | chp_not_expr 251 | '(' chp_logical_or_expr ')' 252 | chp_probe_expr 253 | function_call_expr 254 chp_probe_expr: '#' member_index_expr 255 chp_simple_bool_expr: member_index_expr 256 | BOOL_TRUE 257 | BOOL_FALSE 258 chp_unary_expr: '-' chp_unary_expr 259 | chp_unary_bool_expr 260 | loop_expr 261 | INT 262 | FLOAT 263 chp_mult_expr: chp_unary_expr 264 | chp_mult_expr muldiv_op chp_unary_expr 265 chp_add_expr: chp_mult_expr 266 | chp_add_expr_only 267 chp_add_expr_only: chp_add_expr '+' chp_mult_expr 268 | chp_add_expr '-' chp_mult_expr 269 chp_paren_add_expr: '(' chp_add_expr_only ')' 270 | chp_mult_expr 271 chp_shift_expr: chp_paren_add_expr 272 | chp_shift_expr EXTRACT chp_add_expr 273 | chp_shift_expr INSERT chp_add_expr 274 chp_relational_expr: chp_shift_expr relational_op chp_shift_expr 275 | chp_paren_add_expr 276 chp_bitwise_and_expr: chp_relational_expr 277 | chp_bitwise_and_expr '&' chp_relational_expr 278 chp_bitwise_xor_expr: chp_bitwise_and_expr 279 | chp_bitwise_xor_expr '^' chp_bitwise_and_expr 280 chp_bitwise_or_expr: chp_bitwise_xor_expr 281 | chp_bitwise_or_expr '|' chp_bitwise_xor_expr 282 chp_logical_and_expr: chp_bitwise_or_expr 283 | chp_logical_and_expr LOGICAL_AND chp_bitwise_or_expr 284 chp_logical_or_expr: chp_logical_and_expr 285 | chp_logical_or_expr LOGICAL_OR chp_logical_and_expr 286 chp_not_expr: '~' chp_unary_bool_expr 287 chp_else_clause: ELSE RARROW chp_body_or_skip 288 chp_binary_assignment: member_index_expr ASSIGN expr 289 chp_bool_assignment: member_index_expr '+' 290 | member_index_expr '-' 291 chp_concurrent_item: chp_body_item 292 | chp_sequence_group 293 chp_concurrent_group: chp_concurrent_group ',' chp_concurrent_item 294 | chp_concurrent_item 295 chp_send: member_index_expr '!' connection_actuals_list 296 | member_index_expr '!' 297 chp_recv: member_index_expr '?' member_index_expr_list_in_parens_optional 298 chp_peek: member_index_expr '#' member_index_expr_list_in_parens 299 hse_body_optional: hse_body 300 | /* empty */ 301 hse_body: full_hse_body_item_list 302 full_hse_body_item_list: full_hse_body_item_list ';' full_hse_body_item 303 | full_hse_body_item 304 full_hse_body_item: hse_body_item 305 hse_body_item: hse_loop 306 | hse_do_until 307 | hse_wait 308 | hse_selection 309 | hse_assignment 310 | SKIP 311 hse_loop: BEGINLOOP hse_body ']' 312 hse_do_until: BEGINLOOP hse_matched_det_guarded_command_list ']' 313 hse_wait: '[' expr ']' 314 hse_selection: '[' hse_matched_det_guarded_command_list ']' 315 | '[' hse_nondet_guarded_command_list ']' 316 hse_guarded_command: expr RARROW hse_body 317 hse_else_clause: ELSE RARROW hse_body 318 hse_nondet_guarded_command_list: hse_nondet_guarded_command_list ':' hse_guarded_command 319 | hse_guarded_command ':' hse_guarded_command 320 hse_matched_det_guarded_command_list: hse_unmatched_det_guarded_command_list THICKBAR hse_else_clause 321 | hse_unmatched_det_guarded_command_list 322 hse_unmatched_det_guarded_command_list: hse_unmatched_det_guarded_command_list THICKBAR hse_guarded_command 323 | hse_guarded_command 324 hse_assignment: unary_assignment 325 prs_body_optional: prs_body 326 | /* empty */ 327 prs_body: prs_body prs_body_item 328 | prs_body_item 329 prs_body_item: single_prs 330 | prs_loop 331 | prs_conditional 332 | prs_macro 333 | TREE_LANG optional_template_arguments_in_angles '{' prs_body_optional '}' 334 | SUBCKT_LANG optional_template_arguments_in_angles '{' prs_body_optional '}' 335 prs_macro: prs_literal mandatory_member_index_expr_list_in_parens 336 | generic_attribute_list_in_brackets prs_literal mandatory_member_index_expr_list_in_parens 337 prs_loop: '(' ':' ID ':' range ':' prs_body ')' 338 prs_conditional: '[' prs_guarded_list ']' 339 prs_guarded_list: prs_guarded_list_unmatched THICKBAR prs_else_clause 340 | prs_guarded_list_unmatched 341 prs_guarded_list_unmatched: prs_guarded_list_unmatched THICKBAR prs_guarded_body 342 | prs_guarded_body 343 prs_guarded_body: expr RARROW prs_body_optional 344 prs_else_clause: ELSE RARROW prs_body_optional 345 single_prs: generic_attribute_list_in_brackets prs_expr prs_arrow prs_literal_base dir 346 | prs_expr prs_arrow prs_literal_base dir 347 prs_arrow: RARROW 348 | IMPLIES 349 | HASH_ARROW 350 dir: '+' 351 | '-' 352 prs_expr: prs_or 353 prs_paren_expr: '(' prs_expr ')' 354 prs_literal_base: relative_member_index_expr 355 | '@' ID optional_dense_range_list 356 prs_literal: prs_literal_base prs_literal_params_in_angles_optional 357 prs_literal_params_in_angles_optional: '<' prs_literal_params_optional ';' generic_attribute_list '>' 358 | '<' prs_literal_params '>' 359 | /* empty */ 360 prs_literal_params_optional: prs_literal_params 361 | /* empty */ 362 prs_literal_params: prs_literal_params ',' prs_literal_param 363 | prs_literal_param 364 prs_literal_param: expr 365 prs_unary_expr: prs_literal 366 | prs_paren_expr 367 | prs_and_loop 368 | prs_or_loop 369 prs_not: '~' prs_unary_expr 370 | prs_unary_expr 371 prs_and: prs_and '&' prs_operator_attribute_optional prs_not 372 | prs_not 373 prs_or: prs_or '|' prs_and 374 | prs_and 375 prs_operator_attribute: '{' dir prs_expr '}' 376 prs_operator_attribute_optional: prs_operator_attribute 377 | /* empty */ 378 prs_and_loop: '(' '&' ':' ID ':' range ':' prs_expr ')' 379 prs_or_loop: '(' '|' ':' ID ':' range ':' prs_expr ')' 380 spec_body_optional: spec_body 381 | /* empty */ 382 spec_body: spec_body spec_item 383 | spec_item 384 spec_item: spec_directive 385 | spec_invariant 386 spec_invariant: '$' '(' prs_expr ')' 387 | '$' '(' prs_expr ',' string ')' 388 spec_directive: ID expr_list_in_angles_optional grouped_reference_list_in_parens 389 grouped_reference_list_in_parens: '(' grouped_reference_list_optional ')' 390 grouped_reference_list_optional: grouped_reference_list 391 | /* empty */ 392 grouped_reference_list: grouped_reference_list ',' grouped_reference 393 | grouped_reference 394 grouped_reference: '{' mandatory_member_index_expr_list '}' 395 | member_index_expr 396 paren_expr: '(' expr ')' 397 literal: INT 398 | FLOAT 399 | string 400 | BOOL_TRUE 401 | BOOL_FALSE 402 string: string STRING 403 | STRING 404 id_expr: generic_id 405 generic_id: relative_id 406 | absolute_id 407 absolute_id: SCOPE relative_id 408 relative_id: qualified_id 409 | ID 410 qualified_id: qualified_id SCOPE ID 411 | ID SCOPE ID 412 mandatory_member_index_expr_list_in_parens: '(' mandatory_member_index_expr_list ')' 413 mandatory_member_index_expr_list: mandatory_member_index_expr_list ',' member_index_expr 414 | member_index_expr 415 member_index_expr_list: member_index_expr_list ',' optional_member_index_expr 416 | optional_member_index_expr 417 member_index_expr_pair: optional_member_index_expr ',' optional_member_index_expr 418 | optional_member_index_expr 419 optional_member_index_expr: member_index_expr 420 | /* empty */ 421 member_index_expr: id_expr 422 | index_expr 423 | member_expr 424 relative_member_index_expr: ID 425 | local_index_expr 426 | local_member_expr 427 local_index_expr: local_member_expr sparse_range_list 428 | ID sparse_range_list 432 index_expr: member_expr sparse_range_list 433 | id_expr sparse_range_list 437 simple_expr: member_index_expr 438 | literal 439 unary_expr: simple_expr 440 | function_call_expr 441 | paren_expr 442 | loop_expr 443 | '-' unary_expr 444 | '!' unary_expr 445 | '~' unary_expr 446 function_call_expr: member_index_expr optional_implicit_global_connections connection_actuals_list 447 multiplicative_expr: unary_expr 448 | multiplicative_expr muldiv_op unary_expr 449 muldiv_op: '*' 450 | '/' 451 | '%' 452 additive_expr: multiplicative_expr 453 | additive_expr '+' multiplicative_expr 454 | additive_expr '-' multiplicative_expr 455 shift_expr: additive_expr 456 | shift_expr EXTRACT additive_expr 457 | shift_expr INSERT additive_expr 458 relational_equality_expr: shift_expr 459 | '(' relational_equality_expr '<' shift_expr ')' 460 | '(' relational_equality_expr '>' shift_expr ')' 461 | relational_equality_expr LE shift_expr 462 | relational_equality_expr GE shift_expr 463 | relational_equality_expr EQUAL shift_expr 464 | relational_equality_expr NOTEQUAL shift_expr 465 | '(' relational_equality_expr '=' shift_expr ')' 466 relational_op: '<' 467 | '>' 468 | LE 469 | GE 470 | EQUAL 471 | NOTEQUAL 472 and_expr: relational_equality_expr 473 | and_expr '&' relational_equality_expr 474 exclusive_or_expr: and_expr 475 | exclusive_or_expr '^' and_expr 476 inclusive_or_expr: exclusive_or_expr 477 | inclusive_or_expr '|' exclusive_or_expr 478 logical_and_expr: inclusive_or_expr 479 | logical_and_expr LOGICAL_AND inclusive_or_expr 480 logical_or_expr: logical_and_expr 481 | logical_or_expr LOGICAL_OR logical_and_expr 482 unary_assignment: member_index_expr PLUSPLUS 483 | member_index_expr MINUSMINUS 484 loop_expr: '(' loop_assoc_op ':' ID ':' range ':' expr ')' 485 loop_assoc_op: '+' 486 | '*' 487 | '&' 488 | '|' 489 | '^' 490 | LOGICAL_AND 491 | LOGICAL_OR 492 expr: logical_or_expr 493 strict_relaxed_template_arguments: complex_expr_optional_list_in_angles optional_template_arguments_in_angles 494 | /* empty */ 495 optional_template_arguments_in_angles: complex_expr_optional_list_in_angles 496 | /* empty */ 497 expr_list_in_angles_optional: expr_list_in_angles 498 | /* empty */ 499 expr_list_in_angles: '<' expr_list '>' 500 complex_expr_optional_list_in_angles: '<' complex_expr_optional_list '>' 501 complex_expr_optional_list: complex_expr_optional_list ',' optional_complex_expr 502 | optional_complex_expr 503 optional_complex_expr: array_concatenation 504 | /* empty */ 505 member_index_expr_list_in_parens_optional: member_index_expr_list_in_parens 506 | /* empty */ 507 member_index_expr_list_in_parens: '(' member_index_expr_list ')' 508 member_index_expr_list_in_angles_optional: member_index_expr_list_in_angles 509 | /* empty */ 510 member_index_expr_list_in_angles: '<' member_index_expr_pair '>' 511 | '<' member_index_expr_pair '|' member_index_expr_pair '>' 512 expr_list: expr_list ',' expr 513 | expr 514 range: expr RANGE expr 515 | expr 516 optional_dense_range_list: dense_range_list 517 | /* empty */ 518 dense_range_list: dense_range_list bracketed_dense_range 519 | bracketed_dense_range 520 sparse_range_list: sparse_range_list bracketed_sparse_range 521 | bracketed_sparse_range 522 bracketed_dense_range: '[' expr ']' 523 bracketed_sparse_range: '[' range ']' 524 complex_aggregate_reference: array_concatenation 525 array_concatenation: array_concatenation '#' complex_expr_term 526 | complex_expr_term 527 complex_expr_term: array_construction 528 | expr 529 array_construction: '{' mandatory_complex_aggregate_reference_list '}' 530 optional_complex_aggregate_reference: complex_aggregate_reference 531 | /* empty */ 532 mandatory_complex_aggregate_reference_list: mandatory_complex_aggregate_reference_list ',' complex_aggregate_reference 533 | complex_aggregate_reference 534 complex_aggregate_reference_list: complex_aggregate_reference_list ',' optional_complex_aggregate_reference 535 | optional_complex_aggregate_reference