@classmethod
def parse_list(cls, ctxt, description, addr):
    """
        Parse a list of step descriptions.  "Eager" steps will also be
        evaluated, and the results of those calls will be presumed to
        be a list of steps to include in the list.  (The "eager"
        attribute of steps in the returned list will not be checked;
        the caller must implement the "eager" behavior, possibly by
        recursively calling the ``parse_list()`` method.)

        :param ctxt: An application-specific execution context.  Will
                     be passed to "eager" steps.
        :param description: A description of the list of steps.
        :type description: ``list`` of ``dict`` or ``str``.
        :param addr: The address of the list of steps.  This is to be
                     used when raising errors to help users determine
                     which step reported the error.
        :type addr: ``stepmaker.StepAddress``

        :returns: A list of parsed steps.
        :rtype: ``list`` of ``Step``
        """
    steps = []
    for idx, step_desc in enumerate(description):
        step = cls.parse(step_desc, addr.idx(idx))
        if step.eager:
            steps.extend(step(ctxt))
        else:
            steps.append(step)
    return steps
