Я делаю домашнее задание по созданию лексического анализатора с помощью Flex.
Я должен преобразовать какое-то инфиксное выражение только с оператором +, - для выражения после исправления. Также я должен обрабатывать целые числа, действительные числа, идентификаторы (их не нужно объявлять) как операнд.
Я определил некоторые регулярные определения и шаблоны, подобные этому,
/* regular definition */
delim [ \t]
ws {delim}+
letter [A-Za-z_]
digit [0-9]
id {letter}({letter}|{digit})*
number {digit}+(\.{digit}+)?(E[+-]?{digit}+)?
%%
{ws} {/* no action and no returns */}
{id} { return (ID); }
{number} { return (NUMBER); }
[+-] { return (OPERATOR); }
[\n] { return (ENTER); }
<<EOF>> { return (END_OF_FILE); }
[.*] { return (INVALID); }
%%
и я определил шаблон [. *], Чтобы описать все недействительные токены.
Например, неверный идентификатор, начинающийся с цифры (0abc), неверное литеральное представление (12.23.2) ...
Если в выражении есть недопустимый токен (каждое выражение - одна строка), я просто хочу напечатать какое-нибудь сообщение об ошибке и проигнорировать эту строку.
Итак, мой вопрос: есть ли лучшие способы описать или обнаружить неверный токен в моем случае?