<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_config(lines, module=None):
 """Parse a config file. Names referenced within the config file are found within the calling scope. For example:: would find the ``bar`` method of the ``foo`` class, because ``foo`` is in the same scope as the call to parse_config. :param lines: An iterable of configuration lines (an open file object will do). :param module: Optional. If provided and not None, look for referenced names within this object instead of the calling module. """

    if module is None:
        module = _calling_scope(2)
    lines = IndentChecker(lines)
    path_router = PathRouter()
    for depth, line in lines:
        if depth > 0:
            raise SyntaxError('unexpected indent')
        name, path, types = parse_path_spec(line)
        if types:
            template_arg = (path, dict(
                (k, find_object(module, v))
                for k, v in types.iteritems()
            ))
        else:
            template_arg = path
        handler = read_handler_block(lines, module)
        path_router.add(name, template_arg, handler)
    return path_router