%{
#include <stdio.h>
int word_count = 0;
%}
/* Reguły leksykalne */
%%
[ \t\n]+ ; /* Pomijamy białe znaki */
[a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]+ { word_count++; } /* Rozpoznajemy słowo jako ciąg liter */
. ; /* Pomijamy wszystkie inne znaki */
%%
int main(int argc, char **argv) {
/* Jeśli przekazano nazwę pliku jako argument, przekierowujemy stdin */
if(argc > 1) {
FILE *file = fopen(argv[1], "r");
if(file == NULL) {
perror("Nie można otworzyć pliku");
return 1;
}
yyin = file;
}
yylex();
printf("Liczba słów: %d\n", word_count);
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CmludCB3b3JkX2NvdW50ID0gMDsKJX0KCi8qIFJlZ3XFgnkgbGVrc3lrYWxuZSAqLwolJQpbIFx0XG5dKyAgICAgICAgOyAgICAgICAgICAgICAgIC8qIFBvbWlqYW15IGJpYcWCZSB6bmFraSAqLwpbYS16QS1axIXEh8SZxYLFhMOzxZvFusW8xITEhsSYxYHFg8OTxZrFucW7XSsgIHsgd29yZF9jb3VudCsrOyB9ICAgLyogUm96cG96bmFqZW15IHPFgm93byBqYWtvIGNpxIVnIGxpdGVyICovCi4gICAgICAgICAgICAgICA7ICAgICAgICAgICAgICAgLyogUG9taWphbXkgd3N6eXN0a2llIGlubmUgem5ha2kgKi8KJSUKCmludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgewogICAgLyogSmXFm2xpIHByemVrYXphbm8gbmF6d8SZIHBsaWt1IGpha28gYXJndW1lbnQsIHByemVraWVyb3d1amVteSBzdGRpbiAqLwogICAgaWYoYXJnYyA+IDEpIHsKICAgICAgICBGSUxFICpmaWxlID0gZm9wZW4oYXJndlsxXSwgInIiKTsKICAgICAgICBpZihmaWxlID09IE5VTEwpIHsKICAgICAgICAgICAgcGVycm9yKCJOaWUgbW/FvG5hIG90d29yennEhyBwbGlrdSIpOwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgeXlpbiA9IGZpbGU7CiAgICB9CiAgICB5eWxleCgpOwogICAgcHJpbnRmKCJMaWN6YmEgc8WCw7N3OiAlZFxuIiwgd29yZF9jb3VudCk7CiAgICByZXR1cm4gMDsKfQo=