Ответ 1
Вы пытались помещать код для добавления элемента в текущий список в каждом атоме и код для управления деревом списков при обработке скобок? Это самый простой способ, если вы не столкнетесь с другими проблемами:
listend: members ')' { cur = cur->parent; }
| ')' { cur = cur->parent; }
;
list: '(' listend { cur = newList(cur);}
;
atom: ID { appendAtom(cur, "ID"); }
| NUM { appendAtom(cur, "NUM");}
| STR { appendAtom(cur, "STR");}
;
Это предполагает, что вы сохраняете родительскую точку в каждой структуре списка.