Next: , Previous: Keywords, Up: Top


Appendix B Grammar

"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 '{' embedded_module '}'
    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: 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 generic_type_ref: generic_id strict_relaxed_template_arguments optional_chan_dir
   69 optional_chan_dir: '?'
   70                  | '!'
   71                  | '?' '?'
   72                  | '!' '!'
   73                  | /* empty */
   74 physical_type_ref: generic_type_ref
   75                  | base_chan_type
   76                  | base_data_type_ref
   77 base_data_type_ref: base_data_type strict_relaxed_template_arguments
   78 data_type_ref: base_data_type_ref
   79              | generic_type_ref
   80 type_id: physical_type_ref
   81        | base_param_type
   82 base_param_type: PINT_TYPE
   83                | PBOOL_TYPE
   84                | PREAL_TYPE
   85 base_chan_type: chan_or_port data_type_ref_list_optional_in_parens
   86 chan_or_port: CHANNEL optional_chan_dir
   87 data_type_ref_list_optional_in_parens: '(' data_type_ref_list_optional ')'
   88 data_type_ref_list_optional: data_type_ref_list
   89                            | /* empty */
   90 data_type_ref_list: data_type_ref_list ',' data_type_ref
   91                   | data_type_ref
   92 base_data_type: INT_TYPE
   93               | BOOL_TYPE
   94 declare_datatype_proto: optional_export optional_template_specification DEFTYPE ID DEFINEOP data_type_ref optional_port_formal_decl_list_in_parens
   95 defdatatype: declare_datatype_proto '{' optional_datatype_body set_body_optional get_body_optional '}'
   96 set_body_optional: set_body
   97                  | /* empty */
   98 get_body_optional: get_body
   99                  | /* empty */
  100 set_body: SET '{' chp_body_optional '}'
  101 get_body: GET '{' chp_body_optional '}'
  102 declare_enum: ENUM ID
  103 defenum: ENUM ID '{' enum_member_list '}'
  104 enum_member_list: enum_member_list ',' ID
  105                 | ID
  106 declare_chan_proto: optional_export optional_template_specification DEFCHAN ID DEFINEOP base_chan_type optional_port_formal_decl_list_in_parens
  107 defchan: declare_chan_proto '{' optional_datatype_body send_body_optional recv_body_optional '}'
  108 send_body_optional: send_body
  109                   | /* empty */
  110 recv_body_optional: recv_body
  111                   | /* empty */
  112 send_body: SEND '{' chp_body_optional '}'
  113 recv_body: RECV '{' chp_body_optional '}'
  114 definition_body: definition_body definition_body_item
  115                | definition_body_item
  116 definition_body_item: instance_item_extended
  117                     | type_alias
  118 optional_definition_body: definition_body
  119                         | /* empty */
  120 optional_datatype_body: datatype_body
  121                       | /* empty */
  122 datatype_body: datatype_body datatype_body_item
  123              | datatype_body_item
  124 datatype_body_item: connection_body_item
  125                   | lang_spec
  126 connection_body_optional: connection_body
  127                         | /* empty */
  128 connection_body: connection_body connection_body_item
  129                | connection_body_item
  130 connection_body_item_base: connection_statement
  131                          | nonempty_alias_list ';'
  132                          | instance_type_completion_statement
  133                          | instance_type_completion_connection_statement
  134                          | instance_attribute_statement
  135 connection_body_item: connection_body_item_base
  136                     | loop_connections
  137                     | conditional_connections
  138 instance_management_list_optional: instance_management_list
  139                                  | /* empty */
  140 instance_management_list: instance_management_list instance_item_extended
  141                         | instance_item_extended
  142 instance_item_extended: instance_item
  143                       | language_body
  144 instance_item: type_instance_declaration
  145              | connection_body_item_base
  146              | loop_instantiation
  147              | conditional_instantiation
  148 loop_instantiation: '(' ';' ID ':' range ':' instance_management_list ')'
  149 conditional_instantiation: '[' guarded_instance_management_list ']'
  150 loop_connections: '(' ';' ID ':' range ':' connection_body ')'
  151 conditional_connections: '[' guarded_connection_body ']'
  152 type_instance_declaration: type_id instance_id_list ';'
  153 instance_id_list: instance_id_list ',' instance_id_item
  154                 | instance_id_item
  155 instance_id_item: ID optional_template_arguments_in_angles sparse_range_list
  156                 | ID optional_template_arguments_in_angles
  157                 | ID optional_template_arguments_in_angles connection_actuals_list
  158                 | ID optional_template_arguments_in_angles '=' alias_list
  159 connection_statement: member_index_expr connection_actuals_list ';'
  160 generic_attribute: ID '=' expr_list
  161                  | ID
  162 generic_attribute_list: generic_attribute_list ';' generic_attribute
  163                       | generic_attribute
  164 generic_attribute_list_in_brackets: '[' generic_attribute_list ']'
  165 instance_type_completion_statement: index_expr complex_expr_optional_list_in_angles ';'
  166                                   | generic_id complex_expr_optional_list_in_angles ';'
  167 instance_attribute_statement: member_index_expr '@' generic_attribute_list_in_brackets ';'
  168 instance_type_completion_connection_statement: index_expr complex_expr_optional_list_in_angles connection_actuals_list ';'
  169                                              | generic_id complex_expr_optional_list_in_angles connection_actuals_list ';'
  170 nonempty_alias_list: nonempty_alias_list '=' complex_aggregate_reference
  171                    | complex_aggregate_reference '=' complex_aggregate_reference
  172 alias_list: alias_list '=' complex_aggregate_reference
  173           | complex_aggregate_reference
  174 connection_actuals_list: '(' complex_aggregate_reference_list ')'
  175 guarded_instance_management_list: guarded_instance_management_list_unmatched THICKBAR instance_management_else_clause
  176                                 | guarded_instance_management_list_unmatched
  177 guarded_instance_management_list_unmatched: guarded_instance_management_list_unmatched THICKBAR guarded_instance_management
  178                                           | guarded_instance_management
  179 guarded_instance_management: expr RARROW instance_management_list_optional
  180 instance_management_else_clause: ELSE RARROW instance_management_list_optional
  181 guarded_connection_body: guarded_connection_body_unmatched THICKBAR connection_body_else_clause
  182                        | guarded_connection_body_unmatched
  183 guarded_connection_body_unmatched: guarded_connection_body_unmatched THICKBAR guarded_connection_body_clause
  184                                  | guarded_connection_body_clause
  185 guarded_connection_body_clause: expr RARROW connection_body_optional
  186 connection_body_else_clause: ELSE RARROW connection_body_optional
  187 language_body: CHP_LANG '{' chp_body_optional '}'
  188              | HSE_LANG '{' hse_body_optional '}'
  189              | PRS_LANG optional_template_arguments_in_angles '{' prs_body_optional '}'
  190              | lang_spec
  191 lang_spec: SPEC_LANG '{' spec_body_optional '}'
  192 chp_body: full_chp_body_item_list
  193 chp_body_optional: chp_body
  194                  | /* empty */
  195 chp_body_or_skip: chp_body
  196                 | SKIP
  197 chp_sequence_group: '{' full_chp_body_item_list '}'
  198 full_chp_body_item_list: full_chp_body_item_list ';' full_chp_body_item
  199                        | full_chp_body_item
  200 full_chp_body_item: chp_concurrent_group
  201 chp_body_item: chp_statement_attributes chp_statement
  202              | chp_statement
  203 chp_statement_attributes: '$' '(' generic_attribute_list ')'
  204 chp_statement: chp_loop
  205              | chp_do_until
  206              | chp_selection
  207              | chp_wait
  208              | chp_binary_assignment
  209              | chp_bool_assignment
  210              | chp_send
  211              | chp_recv
  212              | chp_peek
  213              | LOG expr_list_in_parens
  214              | chp_metaloop_selection
  215              | chp_metaloop_statement
  216              | function_call_expr
  217 chp_loop: BEGINLOOP chp_body ']'
  218 chp_do_until: BEGINLOOP chp_unmatched_det_guarded_command_list ']'
  219 chp_wait: '[' chp_guard_expr ']'
  220 chp_selection: '[' chp_matched_det_guarded_command_list ']'
  221              | '[' chp_nondet_guarded_command_list ']'
  222 chp_metaloop_selection: '[' ':' ID ':' range ':' chp_guarded_command ']'
  223                       | '[' THICKBAR ID ':' range ':' chp_guarded_command ']'
  224 chp_metaloop_statement: '{' ',' ID ':' range ':' chp_body '}'
  225                       | '{' ';' ID ':' range ':' chp_body '}'
  226 chp_nondet_guarded_command_list: chp_nondet_guarded_command_list ':' chp_guarded_command
  227                                | chp_guarded_command ':' chp_guarded_command
  228 chp_matched_det_guarded_command_list: chp_unmatched_det_guarded_command_list THICKBAR chp_else_clause
  229                                     | chp_unmatched_det_guarded_command_list
  230 chp_unmatched_det_guarded_command_list: chp_unmatched_det_guarded_command_list THICKBAR chp_guarded_command
  231                                       | chp_guarded_command
  232 chp_guarded_command: chp_guard_expr RARROW chp_body_or_skip
  233 chp_guard_expr: chp_logical_or_expr
  234 chp_unary_bool_expr: chp_simple_bool_expr
  235                    | chp_not_expr
  236                    | '(' chp_logical_or_expr ')'
  237                    | chp_probe_expr
  238                    | function_call_expr
  239 chp_probe_expr: '#' member_index_expr
  240 chp_simple_bool_expr: member_index_expr
  241                     | BOOL_TRUE
  242                     | BOOL_FALSE
  243 chp_unary_expr: '-' chp_unary_expr
  244               | chp_unary_bool_expr
  245               | loop_expr
  246               | INT
  247               | FLOAT
  248 chp_mult_expr: chp_unary_expr
  249              | chp_mult_expr muldiv_op chp_unary_expr
  250 chp_add_expr: chp_mult_expr
  251             | chp_add_expr_only
  252 chp_add_expr_only: chp_add_expr '+' chp_mult_expr
  253                  | chp_add_expr '-' chp_mult_expr
  254 chp_paren_add_expr: '(' chp_add_expr_only ')'
  255                   | chp_mult_expr
  256 chp_shift_expr: chp_paren_add_expr
  257               | chp_shift_expr EXTRACT chp_add_expr
  258               | chp_shift_expr INSERT chp_add_expr
  259 chp_relational_expr: chp_shift_expr relational_op chp_shift_expr
  260                    | chp_paren_add_expr
  261 chp_bitwise_and_expr: chp_relational_expr
  262                     | chp_bitwise_and_expr '&' chp_relational_expr
  263 chp_bitwise_xor_expr: chp_bitwise_and_expr
  264                     | chp_bitwise_xor_expr '^' chp_bitwise_and_expr
  265 chp_bitwise_or_expr: chp_bitwise_xor_expr
  266                    | chp_bitwise_or_expr '|' chp_bitwise_xor_expr
  267 chp_logical_and_expr: chp_bitwise_or_expr
  268                     | chp_logical_and_expr LOGICAL_AND chp_bitwise_or_expr
  269 chp_logical_or_expr: chp_logical_and_expr
  270                    | chp_logical_or_expr LOGICAL_OR chp_logical_and_expr
  271 chp_not_expr: '~' chp_unary_bool_expr
  272 chp_else_clause: ELSE RARROW chp_body_or_skip
  273 chp_binary_assignment: member_index_expr ASSIGN expr
  274 chp_bool_assignment: member_index_expr '+'
  275                    | member_index_expr '-'
  276 chp_concurrent_item: chp_body_item
  277                    | chp_sequence_group
  278 chp_concurrent_group: chp_concurrent_group ',' chp_concurrent_item
  279                     | chp_concurrent_item
  280 chp_send: member_index_expr '!' connection_actuals_list
  281         | member_index_expr '!'
  282 chp_recv: member_index_expr '?' member_index_expr_list_in_parens_optional
  283 chp_peek: member_index_expr '#' member_index_expr_list_in_parens
  284 hse_body_optional: hse_body
  285                  | /* empty */
  286 hse_body: full_hse_body_item_list
  287 full_hse_body_item_list: full_hse_body_item_list ';' full_hse_body_item
  288                        | full_hse_body_item
  289 full_hse_body_item: hse_body_item
  290 hse_body_item: hse_loop
  291              | hse_do_until
  292              | hse_wait
  293              | hse_selection
  294              | hse_assignment
  295              | SKIP
  296 hse_loop: BEGINLOOP hse_body ']'
  297 hse_do_until: BEGINLOOP hse_matched_det_guarded_command_list ']'
  298 hse_wait: '[' expr ']'
  299 hse_selection: '[' hse_matched_det_guarded_command_list ']'
  300              | '[' hse_nondet_guarded_command_list ']'
  301 hse_guarded_command: expr RARROW hse_body
  302 hse_else_clause: ELSE RARROW hse_body
  303 hse_nondet_guarded_command_list: hse_nondet_guarded_command_list ':' hse_guarded_command
  304                                | hse_guarded_command ':' hse_guarded_command
  305 hse_matched_det_guarded_command_list: hse_unmatched_det_guarded_command_list THICKBAR hse_else_clause
  306                                     | hse_unmatched_det_guarded_command_list
  307 hse_unmatched_det_guarded_command_list: hse_unmatched_det_guarded_command_list THICKBAR hse_guarded_command
  308                                       | hse_guarded_command
  309 hse_assignment: unary_assignment
  310 prs_body_optional: prs_body
  311                  | /* empty */
  312 prs_body: prs_body prs_body_item
  313         | prs_body_item
  314 prs_body_item: single_prs
  315              | prs_loop
  316              | prs_conditional
  317              | prs_macro
  318              | TREE_LANG optional_template_arguments_in_angles '{' prs_body_optional '}'
  319              | SUBCKT_LANG optional_template_arguments_in_angles '{' prs_body_optional '}'
  320 prs_macro: prs_literal mandatory_member_index_expr_list_in_parens
  321          | generic_attribute_list_in_brackets prs_literal mandatory_member_index_expr_list_in_parens
  322 prs_loop: '(' ':' ID ':' range ':' prs_body ')'
  323 prs_conditional: '[' prs_guarded_list ']'
  324 prs_guarded_list: prs_guarded_list_unmatched THICKBAR prs_else_clause
  325                 | prs_guarded_list_unmatched
  326 prs_guarded_list_unmatched: prs_guarded_list_unmatched THICKBAR prs_guarded_body
  327                           | prs_guarded_body
  328 prs_guarded_body: expr RARROW prs_body_optional
  329 prs_else_clause: ELSE RARROW prs_body_optional
  330 single_prs: generic_attribute_list_in_brackets prs_expr prs_arrow prs_literal_base dir
  331           | prs_expr prs_arrow prs_literal_base dir
  332 prs_arrow: RARROW
  333          | IMPLIES
  334          | HASH_ARROW
  335 dir: '+'
  336    | '-'
  337 prs_expr: prs_or
  338 prs_paren_expr: '(' prs_expr ')'
  339 prs_literal_base: relative_member_index_expr
  340                 | '@' ID optional_dense_range_list
  341 prs_literal: prs_literal_base prs_literal_params_in_angles_optional
  342 prs_literal_params_in_angles_optional: '<' prs_literal_params_optional ';' generic_attribute_list '>'
  343                                      | '<' prs_literal_params '>'
  344                                      | /* empty */
  345 prs_literal_params_optional: prs_literal_params
  346                            | /* empty */
  347 prs_literal_params: prs_literal_params ',' prs_literal_param
  348                   | prs_literal_param
  349 prs_literal_param: expr
  350 prs_unary_expr: prs_literal
  351               | prs_paren_expr
  352               | prs_and_loop
  353               | prs_or_loop
  354 prs_not: '~' prs_unary_expr
  355        | prs_unary_expr
  356 prs_and: prs_and '&' prs_operator_attribute_optional prs_not
  357        | prs_not
  358 prs_or: prs_or '|' prs_and
  359       | prs_and
  360 prs_operator_attribute: '{' dir prs_expr '}'
  361 prs_operator_attribute_optional: prs_operator_attribute
  362                                | /* empty */
  363 prs_and_loop: '(' '&' ':' ID ':' range ':' prs_expr ')'
  364 prs_or_loop: '(' '|' ':' ID ':' range ':' prs_expr ')'
  365 spec_body_optional: spec_body
  366                   | /* empty */
  367 spec_body: spec_body spec_item
  368          | spec_item
  369 spec_item: spec_directive
  370          | spec_invariant
  371 spec_invariant: '$' '(' prs_expr ')'
  372 spec_directive: ID expr_list_in_angles_optional grouped_reference_list_in_parens
  373 grouped_reference_list_in_parens: '(' grouped_reference_list ')'
  374 grouped_reference_list: grouped_reference_list ',' grouped_reference
  375                       | grouped_reference
  376 grouped_reference: '{' mandatory_member_index_expr_list '}'
  377                  | member_index_expr
  378 paren_expr: '(' expr ')'
  379 literal: INT
  380        | FLOAT
  381        | string
  382        | BOOL_TRUE
  383        | BOOL_FALSE
  384 string: string STRING
  385       | STRING
  386 id_expr: generic_id
  387 generic_id: relative_id
  388           | absolute_id
  389 absolute_id: SCOPE relative_id
  390 relative_id: qualified_id
  391            | ID
  392 qualified_id: qualified_id SCOPE ID
  393             | ID SCOPE ID
  394 mandatory_member_index_expr_list_in_parens: '(' mandatory_member_index_expr_list ')'
  395 mandatory_member_index_expr_list: mandatory_member_index_expr_list ',' member_index_expr
  396                                 | member_index_expr
  397 member_index_expr_list: member_index_expr_list ',' optional_member_index_expr
  398                       | optional_member_index_expr
  399 optional_member_index_expr: member_index_expr
  400                           | /* empty */
  401 member_index_expr: id_expr
  402                  | index_expr
  403                  | member_expr
  404 relative_member_index_expr: ID
  405                           | local_index_expr
  406                           | local_member_expr
  407 local_index_expr: local_member_expr sparse_range_list
  408                 | ID sparse_range_list
  412 index_expr: member_expr sparse_range_list
  413           | id_expr sparse_range_list
  417 simple_expr: member_index_expr
  418            | literal
  419 unary_expr: simple_expr
  420           | function_call_expr
  421           | paren_expr
  422           | loop_expr
  423           | '-' unary_expr
  424           | '!' unary_expr
  425           | '~' unary_expr
  426 function_call_expr: member_index_expr connection_actuals_list
  427 multiplicative_expr: unary_expr
  428                    | multiplicative_expr muldiv_op unary_expr
  429 muldiv_op: '*'
  430          | '/'
  431          | '%'
  432 additive_expr: multiplicative_expr
  433              | additive_expr '+' multiplicative_expr
  434              | additive_expr '-' multiplicative_expr
  435 shift_expr: additive_expr
  436           | shift_expr EXTRACT additive_expr
  437           | shift_expr INSERT additive_expr
  438 relational_equality_expr: shift_expr
  439                         | '(' relational_equality_expr '<' shift_expr ')'
  440                         | '(' relational_equality_expr '>' shift_expr ')'
  441                         | relational_equality_expr LE shift_expr
  442                         | relational_equality_expr GE shift_expr
  443                         | relational_equality_expr EQUAL shift_expr
  444                         | relational_equality_expr NOTEQUAL shift_expr
  445                         | '(' relational_equality_expr '=' shift_expr ')'
  446 relational_op: '<'
  447              | '>'
  448              | LE
  449              | GE
  450              | EQUAL
  451              | NOTEQUAL
  452 and_expr: relational_equality_expr
  453         | and_expr '&' relational_equality_expr
  454 exclusive_or_expr: and_expr
  455                  | exclusive_or_expr '^' and_expr
  456 inclusive_or_expr: exclusive_or_expr
  457                  | inclusive_or_expr '|' exclusive_or_expr
  458 logical_and_expr: inclusive_or_expr
  459                 | logical_and_expr LOGICAL_AND inclusive_or_expr
  460 logical_or_expr: logical_and_expr
  461                | logical_or_expr LOGICAL_OR logical_and_expr
  462 unary_assignment: member_index_expr PLUSPLUS
  463                 | member_index_expr MINUSMINUS
  464 loop_expr: '(' loop_assoc_op ':' ID ':' range ':' expr ')'
  465 loop_assoc_op: '+'
  466              | '*'
  467              | '&'
  468              | '|'
  469              | '^'
  470              | LOGICAL_AND
  471              | LOGICAL_OR
  472 expr: logical_or_expr
  473 strict_relaxed_template_arguments: complex_expr_optional_list_in_angles optional_template_arguments_in_angles
  474                                  | /* empty */
  475 optional_template_arguments_in_angles: complex_expr_optional_list_in_angles
  476                                      | /* empty */
  477 expr_list_in_angles_optional: expr_list_in_angles
  478                             | /* empty */
  479 expr_list_in_angles: '<' expr_list '>'
  480 complex_expr_optional_list_in_angles: '<' complex_expr_optional_list '>'
  481 complex_expr_optional_list: complex_expr_optional_list ',' optional_complex_expr
  482                           | optional_complex_expr
  483 optional_complex_expr: array_concatenation
  484                      | /* empty */
  485 member_index_expr_list_in_parens_optional: member_index_expr_list_in_parens
  486                                          | /* empty */
  487 member_index_expr_list_in_parens: '(' member_index_expr_list ')'
  488 expr_list_in_parens: '(' expr_list ')'
  489 expr_list: expr_list ',' expr
  490          | expr
  491 range: expr RANGE expr
  492      | expr
  493 optional_dense_range_list: dense_range_list
  494                          | /* empty */
  495 dense_range_list: dense_range_list bracketed_dense_range
  496                 | bracketed_dense_range
  497 sparse_range_list: sparse_range_list bracketed_sparse_range
  498                  | bracketed_sparse_range
  499 bracketed_dense_range: '[' expr ']'
  500 bracketed_sparse_range: '[' range ']'
  501 complex_aggregate_reference: array_concatenation
  502 array_concatenation: array_concatenation '#' complex_expr_term
  503                    | complex_expr_term
  504 complex_expr_term: array_construction
  505                  | expr
  506 array_construction: '{' mandatory_complex_aggregate_reference_list '}'
  507 optional_complex_aggregate_reference: complex_aggregate_reference
  508                                     | /* empty */
  509 mandatory_complex_aggregate_reference_list: mandatory_complex_aggregate_reference_list ',' complex_aggregate_reference
  510                                           | complex_aggregate_reference
  511 complex_aggregate_reference_list: complex_aggregate_reference_list ',' optional_complex_aggregate_reference
  512                                 | optional_complex_aggregate_reference