class_docstr: A DataShape parser object.
class_docstr_tok: ["A","DataShape","parser","object","."]
docstr: struct_field : struct_field_name COLON datashape
  struct_field_name : NAME_LOWER
                    | NAME_UPPER
                    | NAME_OTHER
                    | STRING
  
  Returns a tuple (name, datashape object) or None
docstr_tok: ["struct_field",":","struct_field_name","COLON","datashape","struct_field_name",":","NAME_LOWER","|","NAME_UPPER","|","NAME_OTHER","|","STRING","Returns","a","tuple","(","name",",","datashape","object",")","or","None"]
code: def parse_struct_field(self):
      """
      struct_field : struct_field_name COLON datashape
      struct_field_name : NAME_LOWER
                        | NAME_UPPER
                        | NAME_OTHER
                        | STRING
  
      Returns a tuple (name, datashape object) or None
      """
      if self.tok.id not in [
          lexer.NAME_LOWER,
          lexer.NAME_UPPER,
          lexer.NAME_OTHER,
          lexer.STRING,
      ]:
          return None
      name = self.tok.val
      self.advance_tok()
      if self.tok.id != lexer.COLON:
          self.raise_error(
              'Expected a ":" separating the field '
              + "name from its datashape"
          )
      self.advance_tok()
      ds = self.parse_datashape()
      if ds is None:
          self.raise_error("Expected the datashape of the field")
      return (name, ds)
  
imports: from __future__ import absolute_import, division, print_function
  from .None import lexer, error
  from .None import coretypes
label_desc: Use image node_id 22 for calling the DataShapeParser obj's underlying member method code with example usage: obj.parse_struct_field() and returns: name,  ds, None