Насколько я знаю, вы не должны копировать «yytext» в ваши переменные, просто используя присвоение переменной. Вы должны скопировать его, используя strdup или что-то в этом роде.
Также ужасен следующий код:
<in_string>{
[\\.?] {yy_left_string = yytext; return SPECIAL_CHARACTER;}
[^\"\\]* {strncpy(yy_left_string, yytext + 1, strlen(yytext -1)); return SOME_STRING;}
Что такое средство? Это означает, что если вы обрабатываете \ a, то вы будете выполнять "yy_left_string = yytext". И. е. теперь yy_left_string - "char *", указывающая на некоторую внутреннюю память для гибкости. Давайте предположим, что вы обрабатываете обычный символ, скажем, z. Теперь вы делаете "strncpy (yy_left_string, ...)". Итак, вы передаете yy_left_string (т.е. указатель на некоторую внутреннюю память flex!) В strncpy. Итак, вы записываете некоторые данные во флекс. Это может сломать все. И вы даже не знаете, достаточно ли места для yy_left_string для хранения всех символов yytext. Таким образом, вы можете легко попасть в ошибку сегментации.
Вы понимаете, как работает память в C? Вы понимаете указатели и т.д.? Вы понимаете обработку строк в C?
Кроме того, я не уверен во всей информации, которую я предоставил о yytext. И. е. Я не уверен, что yytext действительно не должен храниться в ваших файлах. И я не уверен, что писать в память, на которую указывает yytext, - плохая идея. Прочитайте документацию, чтобы получить всю эту информацию.
(Кроме того, ваш тег «flex» неверен, поскольку речь идет о другом flex.)