code: def tokenize_descriptor(descriptor_string, prev_names=None):
      # split on '(', ')', ',', '@', and space.  Note: the parenthesis () in the
      # regexp causes it to output the stuff inside the () as if it were a field,
      # which is how the call to re.split() keeps characters like '(' and ')' as
      # tokens.
      fields = re.split(
          r"(\(|\)|@|,|\s)\s*",
          replace_bracket_expressions_in_descriptor(
              descriptor_string, prev_names
          ),
      )
      ans = []
      for f in fields:
          # don't include fields that are space, or are empty.
          if re.match(r"^\s*$", f) is None:
              ans.append(f)
  
      ans.append("end of string")
      return ans
  
imports: from __future__ import print_function
  from __future__ import division
  import re
  import sys
label_desc: Use image node_id 10 for calling a global function with example usage: tokenize_descriptor(descriptor_string, prev_names) and returns: ans