docs: def date(name=None):
      """
      Creates the grammar for a Date (D) field, accepting only numbers in a
      certain pattern.
  
      :param name: name for the field
      :return: grammar for the date field
      """
  
      if name is None:
          name = 'Date Field'
  
      # Basic field
      # This regex allows values from 00000101 to 99991231
      field = pp.Regex('[0-9][0-9][0-9][0-9](0[1-9]|1[0-2])'
                       '(0[1-9]|[1-2][0-9]|3[0-1])')
  
      # Parse action
      field.setParseAction(lambda d: datetime.datetime.strptime(d[0], '%Y%m%d')
                           .date())
  
      # Name
      field.setName(name)
  
      # White spaces are not removed
      field.leaveWhitespace()
  
      return field