Я пытаюсь написать спецификацию для гибкого лексического анализатора. Одно из правил заключается в том, что идентификатор (например, «foo», «Foo_Bar», «year_2020», «Jan30») не может заканчиваться на «_», например «foo_». До сих пор у меня есть следующее, чтобы поймать эту ошибку:
letter [A-Za-z]
digit [0-9]
identifier {letter}({letter}|{digit}|\_)*({letter}|{digit})*
number {digit}+
character [0-9a-zA-Z_]
...
/*Ends with underscore*/
{letter}({character}*({letter}|{number})+)?\_
{
printf("Error at line %d, column %d: identifier \"%s\" cannot end with an underscore.\n", num_lines, num_cols, yytext);
exit(1);
}
Однако я получаю сообщение об ошибке "mini_l.lex: 89: предупреждение, правило не может быть соответствует », строка 89 - {letter}({character}*({letter}|{number})+)?\_
.
Может кто-нибудь помочь мне?