Есть связка flex/bison. Связка эта таскает текст не со стандартного ввода, а из строки, предоставляемой им другой функцией. Bison по большому счёту делает всего две вещи: собирает структуры из полученных токенов и матерится на синтаксические ошибки. Мне нужно как-то получать собранные им структуры. Первый это впихивать в правила bison'а return'ы. Но тогда во-первых получается, что функция которая должна возвращать int возвращает указатель (что как-то не красиво и запутано), а во-вторых она уже не вернёт 0 после успешного разбора и становится не понятно как отследить тот момент когда разбор завершился. Второй это создать некий внешний «стек» при помощи extern'а и писать в него указатели на структуры из yyparse, чтобы потом прочесть их из функции вызвавшей yyparse. Недостатком этого варианта является то что при вызове yyparse из нескольких нитей одновременно стек превратится в кашу (можно конечно залочить стэк на время его использования, а после этого скопировать его локально для вызывающей функции, но это по моему самый крайний случай, да и замок в таком месте обиден и явно не обоснован). Собственно как можно попытаться решить такую задачу?