Я смотрю на парсер, сделанный с помощью flex и bison. Бизон 2.5.
Я добавляю %locations в файл .y, перекомпилирую и пытаюсь запустить, в награду получаю sigsegv (ну, эквивалент macosx):
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x000000010003f123
0x000000010003f38c in yylex (yylval_param=0x7fff5fbff5e8, yyscanner=0x7fff5fbff5d0) at lex.yy.c:2036
2036 *yy_cp = yyg->yy_hold_char;
Все это сгенерированный код, поэтому я действительно не знаю, куда идти в первую очередь, чтобы понять, как yy_cp в конечном итоге указывает на хранилище только для чтения.
Обратите внимание, что исходный код лексера включает
%option noinput
%option reentrant bison-bridge
и источник парсера включает
%lex-param {yyscan_t *scanner } /* Call flex functions with this argument */