def expression_split(src):
    """
        parse a string and return a list of pair with
        open and close parenthesis
        The result is generated in the order that the inner-most and left-most
        parenthesis will be at the start of the list, which logically should be processed first
        :param:
            src: input string
        :return:
            list of pair contains the index of ( and )
    """
    result = []
    open_index = []
    for ind, _ in enumerate(src):
        if src[ind] == "(":
            open_index.append(ind)
        if src[ind] == ")":
            result.append((open_index.pop(), ind))
    return result