code: def main(testfiles=None, action=printer):
      
      testfiles = get_filename_list(testfiles)
      print(testfiles)
  
      if action:
          for i in (simple_identifier, value, item_list):
              i.setParseAction(action)
  
      success = 0
      failures = []
  
      retval = {}
      for f in testfiles:
          try:
              retval[f] = object_definition.parseFile(f)
              success += 1
          except Exception:
              failures.append(f)
  
      if failures:
          print('\nfailed while processing %s' % ', '.join(failures))
      print('\nsucceeded on %d of %d files' %(success, len(testfiles)))
  
      if len(retval) == 1 and len(testfiles) == 1:
          # if only one file is parsed, return the parseResults directly
          return retval[list(retval.keys())[0]]
  
      # else, return a dictionary of parseResults
      return retval
docs: testfiles can be None, in which case the command line arguments are used as filenames.
      testfiles can be a string, in which case that file is parsed.
      testfiles can be a list.
      In all cases, the filenames will be globbed.
      If more than one file is parsed successfully, a dictionary of ParseResults is returned.
      Otherwise, a simple ParseResults is returned.