Я пытаюсь найти самое длинное слово, состоящее из алфавитов [ghijklpqrswxyz]. Это кажется простой задачей, но, похоже, у меня есть проблемы с пониманием того, как работает lex/yaac. Я тестирую это с файлом linux /usr/share/dict/words, и программа просто возвращает весь список слов вместо того, чтобы печатать самый длинный.
% lex example.l
% cc lex.yy.c -ll
% ./a.out < /usr/share/dict/words
В чем проблема??
%{
char* longest="";
%}
%option noyywrap
%%
^[ghijklpqrswxyz]+$ {if (strlen(yytext)>strlen(longest)) {longest = yytext;}}
.|\n {;}
%%
int main(void)
{
yylex();
printf("The longest matching word: %s\n", longest);
return 0;
}
char longest[1024];
) будет проще и позволит избежать проблем с утечками памяти. Однако вам нужно будет проверить переполнение. 03.03.2014