code: def p_arr_decl_initialized(p):
      
  
      def check_bound(boundlist, remaining):
          """ Checks if constant vector bounds matches the array one
          """
          lineno = p.lineno(8)
          if not boundlist:  # Returns on empty list
              if not isinstance(remaining, list):
                  return True  # It's OK :-)
  
              syntax_error(lineno, 'Unexpected extra vector dimensions. It should be %i' % len(remaining))
  
          if not isinstance(remaining, list):
              syntax_error(lineno, 'Mismatched vector size. Missing %i extra dimension(s)' % len(boundlist))
              return False
  
          if len(remaining) != boundlist[0].count:
              syntax_error(lineno, 'Mismatched vector size. Expected %i elements, got %i.' % (boundlist[0].count,
                                                                                              len(remaining)))
              return False  # It's wrong. :-(
  
          for row in remaining:
              if not check_bound(boundlist[1:], row):
                  return False
  
          return True
  
      if p[8] is None:
          p[0] = None
          return
  
      if check_bound(p[4].children, p[8]):
          id_, lineno = p[2][0]
          SYMBOL_TABLE.declare_array(id_, lineno, p[6], p[4], default_value=p[8])
  
      p[0] = None
docs: var_arr_decl : DIM idlist LP bound_list RP typedef RIGHTARROW const_vector
                       | DIM idlist LP bound_list RP typedef EQ const_vector