<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def parse_compound_file(f, context=None):
 """Iterate over the compound entries in the given file"""


    f.readline()  # Skip header
    for lineno, row in enumerate(csv.reader(f, delimiter='\t')):
        compound_id, names, formula = row[:3]
        names = (decode_name(name) for name in names.split(',<br>'))

        # ModelSEED sometimes uses an asterisk and number at
        # the end of formulas. This seems to have a similar
        # meaning as '(...)n'.
        m = re.match(r'^(.*)\*(\d*)$', formula)
        if m is not None:
            if m.group(2) != '':
                formula = '({}){}'.format(m.group(1), m.group(2))
            else:
                formula = '({})n'.format(m.group(1))

        formula = formula.strip()
        if formula == '' or formula == 'noformula':
            formula = None

        mark = FileMark(context, lineno, 0)
        yield CompoundEntry(compound_id, names, formula, filemark=mark)