Я смотрю на парсер, созданный с помощью flex и bison. Бизон 2.5.
Я добавляю% местоположений в файл .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 */