У меня есть относительно простой файл lex / flex, и я запускаю его с отладочным флагом flex, чтобы убедиться, что он правильно разбит на токены.К сожалению, я всегда сталкиваюсь с одной из двух проблем - либо программа, сгенерированная flex, останавливается, просто беззвучно сдается после пары токенов, либо правило, которое я использую для распознавания символов и строк, не вызывается, и правило по умолчаниювместо этого вызывается.
Может кто-нибудь направить меня в правильном направлении?Я приложил свой гибкий файл и пример ввода / вывода.
Редактировать: я обнаружил, что сгенерированный лексер останавливается после определенного правила: "cdr".Это более подробно, но и гораздо более запутанно.Я опубликовал укороченный измененный файл lex.
/* lex file*/
%option noyywrap
%option nodefault
%{
enum tokens{
CDR,
CHARACTER,
SET
};
%}
%%
"cdr" { return CDR; }
"set" { return SET; }
[ \t\r\n] /*Nothing*/
[a-zA-Z0-9\\!@#$%^&*()\-_+=~`:;"'?<>,\.] { return CHARACTER; }
%%
Пример ввода:
set c cdra + cdr b + () ;
Полный вывод при выполнении ввода через сгенерированный синтаксический анализатор:
--(end of buffer or a NUL)
--accepting rule at line 16 ("set")
--accepting rule at line 18 (" ")
--accepting rule at line 19 ("c")
--accepting rule at line 18 (" ")
--accepting rule at line 15 ("cdr")
Какие-нибудь мысли?Сгенерированная программа сдается после половины ввода!(для справки, я делаю ввод, перенаправляя содержимое файла в сгенерированную программу).