Ваша yywrap()
реализация вызывает exit()
. Это означает, что как только сканер увидит конец файла, приложение будет остановлено. Поэтому парсер не сможет завершить свою работу.
Как правило, вы должны использовать %option noyywrap
в вашем (f) файле lex, чтобы избежать необходимости предоставления yywrap
. Или используйте реализацию по умолчанию в -lfl
. Но если вы настаиваете на его реализации, он должен возвратить 1, чтобы указать, что больше нечего читать.
Кроме того, extern int yytext[];
не является необходимым, поскольку вы нигде не ссылаетесь на yytext
в вашем парсере. И вам не следует ссылаться на yytext
в вашем парсере; такое использование почти всегда является ошибкой. Но если бы вы использовали yytext
, объявление было бы неправильным: это указатель (не массив) на char
(не int
). Ваш компилятор C, вероятно, не будет отмечать эту ошибку.