import re
def end_form(text, start):
    depth = 0
    quoted = escaped = False
    for i in range(start, len(text)):
        ch = text[i]
        if quoted:
            if escaped: escaped = False
            elif ch == '\\': escaped = True
            elif ch == '"': quoted = False
        elif ch == '"': quoted = True
        elif ch == '(': depth += 1
        elif ch == ')':
            depth -= 1
            if depth == 0: return i + 1
    raise ValueError('Unbalanced form')

def forms(text, tag):
    token = re.compile(r'\(\s*' + re.escape(tag) + r'\s+')
    pos = 0
    while (m := token.search(text, pos)):
        end = end_form(text, m.start())
        yield m.start(), end, text[m.start():end]
        pos = end

