title: Resolving shift/reduce in Bison for optional trailing attributes
body: <p>I'm attempting to develop my own programming language.  In my grammar file, I have something akin to:</p>
  
  <pre><code>moduled_name: NAME attribute_trail {$$=$2? createNode('.',$1,$2) : $1;}
      ;
  
  attribute_trail: {$$=NULL:}
      | attribute_trail_item {$$=$1;}
      ;
  
  attribute_trail_item: '.' NAME {$$=$2;}
      | attribute_trail_item '.' NAME {$$=createNode('.',$1,$3);}
      ;
  </code></pre>
  
  <p>So, a <code>moduled_name</code> would be something like <code>foo</code> or <code>foo.bar</code> or <code>foo.bar.kazam</code>.  However, Bison is reporting a shift/reduce error:</p>
  
  <blockquote>
  <pre><code>state 11
  
  21 moduled_name: NAME . attribute_trail
  
  '.'  shift, and go to state 41
  
  '.'       [reduce using rule 22 (attribute_trail)]
  $default  reduce using rule 22 (attribute_trail)
  
  attribute_trail       go to state 42
  attribute_trail_item  go to state 43
  </code></pre>
  </blockquote>
  
  <p>EDIT:</p>
  
  <p>Here's my grammar:</p>
  
  <pre><code>    0 $accept: file $end
  
      1 file: global_content
      2     | file global_content
  
      3 global_content: main_definition
      4               | import_statement
      5               | export_statement
      6               | struct_definition
      7               | source_definition
      8               | pipe_definition
      9               | sink_definition
     10               | filter_definition
     11               | predicate_definition
     12               | global_var_definition
  
     13 main_definition: MAIN '{' statement_list '}'
  
     14 import_statement: IMPORT NAME ';'
  
     15 export_statement: EXPORT NAME ';'
  
     16 struct_definition: STRUCT NAME '{' struct_field '}'
  
     17 struct_field: NAME ':' type
     18             | struct_field ',' NAME ':' type
  
     19 type: TYPE
     20     | moduled_name
  
     21 moduled_name: NAME attribute_trail
  
     22 attribute_trail: /* empty */
     23                | attribute_trail_item
  
     24 attribute_trail_item: '.' NAME
     25                     | attribute_trail_item '.' NAME
  
     26 source_definition: SOURCE optional_name '(' arg_list ')' ARROW type '{' statement_list '}'
  
     27 pipe_definition: PIPE optional_name '(' arg_list ')' ARROW type '{' statement_list '}'
  
     28 sink_definition: SINK optional_name '(' arg_list ')' '{' statement_list '}'
  
     29 local_definition: LOCAL '(' arg_list ')' '{' statement_list '}'
  
     30 filter_definition: FILTER optional_name '(' arg_list ')' '{' statement_list '}'
  
     31 predicate_definition: PREDICATE NAME '(' NAME ':' type ')' '{' statement_list '}'
  
     32 global_var_definition: compilation_expression ARROW NAME ';'
  
     33 optional_name: /* empty */
     34              | NAME
  
     35 arg_list: /* empty */
     36         | arg_element
  
     37 arg_element: NAME ':' type possible_assignment
     38            | arg_element ',' NAME ':' type possible_assignment
  
     39 possible_assignment: /* empty */
     40                    | '=' compilation_expression
  
     41 compilation_expression: moduled_name
     42                       | LITERAL attribute_trail
     43                       | compilation_expression '[' compilation_expression ']' attribute_trail
     44                       | '[' compilation_array_literal ']' attribute_trail
     45                       | '(' compilation_expression ')' attribute_trail
     46                       | function_call attribute_trail
     47                       | compilation_expression AND compilation_expression
     48                       | compilation_expression OR compilation_expression
     49                       | NOT compilation_expression
     50                       | compilation_expression '+' compilation_expression
     51                       | compilation_expression '-' compilation_expression
     52                       | compilation_expression '*' compilation_expression
     53                       | compilation_expression '/' compilation_expression
     54                       | compilation_expression '%' compilation_expression
     55                       | compilation_expression '^' compilation_expression
     56                       | compilation_expression '|' compilation_expression
     57                       | compilation_expression '&amp;' compilation_expression
     58                       | compilation_expression LSHIFT compilation_expression
     59                       | compilation_expression RSHIFT compilation_expression
  
     60 expression: moduled_name
     61           | LITERAL attribute_trail
     62           | CONTEXT attribute_trail
     63           | expression '[' expression ']' attribute_trail
     64           | '[' array_literal ']' attribute_trail
     65           | '(' expression ')' attribute_trail
     66           | function_call attribute_trail
     67           | expression AND expression
     68           | expression OR expression
     69           | NOT expression
     70           | expression COMPARISON expression
     71           | expression '+' expression
     72           | expression '-' expression
     73           | expression '*' expression
     74           | expression '/' expression
     75           | expression '%' expression
     76           | expression '^' expression
     77           | expression '|' expression
     78           | expression '&amp;' expression
     79           | expression LSHIFT expression
     80           | expression RSHIFT expression
     81           | moduled_name IS type
     82           | '(' expression ')' IS type
     83           | '(' arrow_statement ')'
  
     84 compilation_array_literal: /* empty */
     85                          | compilation_array_element
  
     86 compilation_array_element: compilation_expression
     87                          | compilation_array_element ',' compilation_expression
  
     88 array_literal: /* empty */
     89              | array_element
  
     90 array_element: expression
     91              | array_element ',' expression
  
     92 function_call: moduled_name '(' call_list ')'
  
     93 call_list: /* empty */
     94          | call_arg
     95          | call_list ',' call_arg
  
     96 call_arg: expression
     97         | NAME '=' expression
  
     98 statement_list: /* empty */
     99               | actual_statement_list
  
    100 actual_statement_list: general_statement
    101                      | actual_statement_list general_statement
  
    102 general_statement: ';'
    103                  | statement ';'
    104                  | if_section
    105                  | while_section
  
    106 if_section: IF expression '{' statement_list '}' eif_section else_section
  
    107 eif_section: /* empty */
    108            | eif_section EIF expression '{' statement_list '}'
  
    109 else_section: /* empty */
    110             | ELSE '{' statement_list '}'
  
    111 while_section: WHILE expression '{' statement_list '}'
  
    112 statement: PROD expression
    113          | DROP
    114          | END
    115          | CONT
    116          | BREAK
    117          | ABORT expression
    118          | VERIFY expression
    119          | NAME AS type
    120          | expression OPERATOR_ASSIGNMENT expression
    121          | arrow_statement
  
    122 arrow_statement: arrow_sender ARROW arrow_receiver
  
    123 arrow_sender: arrow_sender_item
    124             | '(' arrow_sender_list ',' arrow_sender_item ')'
  
    125 arrow_sender_item: expression
    126                  | source_definition
  
    127 arrow_sender_list: arrow_sender_item
    128                  | arrow_sender_list ',' arrow_sender_item
  
    129 arrow_receiver: arrow_receiver_item
    130               | arrow_receiver ARROW arrow_receiver_item
  
    131 arrow_receiver_item: moduled_name attribute_trail
    132                    | moduled_name attribute_trail ':' NAME
    133                    | TYPE attribute_trail
    134                    | pipe_definition attribute_trail
    135                    | sink_definition attribute_trail
    136                    | sink_definition attribute_trail ':' NAME
    137                    | local_definition attribute_trail
  </code></pre>