title: shift/reduce conflicts while writing rule to resolve nested preprocessor inside a structure.How to resolve this?
body: <p>This gives 66 shift/reduce conflicts</p>
  
  <pre><code>initializer
      : '{' initializer_list '}'           
      | '{' initializer_list ',' '}'            
      | '{' preprocessor_list  initializer_list    '}'    
      ;
  preprocessor_list
      : preprocessor
      | preprocessor_list preprocessor
      ;
  </code></pre>
  
  <p>but this works:</p>
  
  <pre><code>initializer
      : '{' initializer_list '}'       
      | '{' initializer_list ',' '}'     
      | '{' preprocessor initializer_list '}'    
      | '{' preprocessor preprocessor initializer_list '}    
      | '{' preprocessor preprocessor  preprocessor  initializer_list '}'
      ;
  </code></pre>
  
  <p>Please find below the definition of initializer list:</p>
  
  <pre><code>initializer_list
      : designation initializer
      | preprocessor
      | preprocessor initializer_list ','
      | preprocessor initializer_list ','  preprocessor_list
      | initializer_list ',' preprocessor_list designation initializer
      | initializer_list ','  designation initializer
      | initializer_list ',' initializer
      ;
  
  designation
      : designator_list '='
      ;
  designator_list
      : designator
      | designator_list designator
      ;
  
  designator
      : '[' constant_expression ']'
      | '.' IDENTIFIER
      ;
  </code></pre>
  
  <p>Rules for preprocessor:</p>
  
  <pre><code>preprocessor
      : hash_define BLACK_SPACE define_expression
      | hash_else NEW_LINE
      | hash_if BLACK_SPACE unary_expression NEW_LINE
      | hash_ifdef BLACK_SPACE unary_expression NEW_LINE
      | hash_ifndef BLACK_SPACE unary_expression NEW_LINE
      | hash_ident BLACK_SPACE STRING_LITERAL NEW_LINE
      | hash_include STRING_LITERAL 
                   {printf("string identified in #include\n");}
        NEW_LINE   {printf("#include with quotes\n");}
      | hash_include '&lt;' filepath  '&gt;' NEW_LINE
      | hash_line BLACK_SPACE I_CONSTANT NEW_LINE
      | hash_line BLACK_SPACE I_CONSTANT {enable_space = 1;}
                  BLACK_SPACE STRING_LITERAL NEW_LINE
      | hash_undef BLACK_SPACE IDENTIFIER NEW_LINE
      | hash_LINK BLACK_SPACE STRING_LITERAL NEW_LINE
      | hash_endif NEW_LINE
      ;
  </code></pre>