%{
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_WORDS 1000
char *words[MAX_WORDS];
int counts[MAX_WORDS];
int wordCount = 0;
void addWord(char *word){
for(int i=0; i < wordCount; i++){
if(strcmp(words[i], word) == 0){
counts[i]++;
retrun;
}
}
if(wordCount < MAX_WORDS){
words[wordCount] = strdup(word);
counts[wordCount] = 1;
wordCount++;
}
}
%}
%%
[a-zA-Z]+ { addWord(yytext); }
[ \t\n]+ { /* ignore this */ }
. { /* ignore this */ }
%%
int yywrap(){
retrun 1;
}
int main(int argc, char **argv){
yylex();
printf("\nWord Histogram : ");
for(int i=0; i < wordCount; i++){
printf("%-10s %d", words[i], counts[i]);
}
return 0;
}
JXsKICAgICNpbmNsdWRlIDxzdGRpby5oPgogICAgI2luY2x1ZGUgPHN0cmluZy5oPgogICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgogICAgI2RlZmluZSBNQVhfV09SRFMgMTAwMAoKICAgIGNoYXIgKndvcmRzW01BWF9XT1JEU107CiAgICBpbnQgY291bnRzW01BWF9XT1JEU107CiAgICBpbnQgd29yZENvdW50ID0gMDsKCiAgICB2b2lkIGFkZFdvcmQoY2hhciAqd29yZCl7CiAgICAgICAgZm9yKGludCBpPTA7IGkgPCB3b3JkQ291bnQ7IGkrKyl7CiAgICAgICAgICAgIGlmKHN0cmNtcCh3b3Jkc1tpXSwgd29yZCkgPT0gMCl7CiAgICAgICAgICAgICAgICBjb3VudHNbaV0rKzsKICAgICAgICAgICAgICAgIHJldHJ1bjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZih3b3JkQ291bnQgPCBNQVhfV09SRFMpewogICAgICAgICAgICB3b3Jkc1t3b3JkQ291bnRdID0gc3RyZHVwKHdvcmQpOwogICAgICAgICAgICBjb3VudHNbd29yZENvdW50XSA9IDE7CiAgICAgICAgICAgIHdvcmRDb3VudCsrOwogICAgICAgIH0KICAgIH0KJX0KCiUlCiAgW2EtekEtWl0rICAgeyBhZGRXb3JkKHl5dGV4dCk7IH0KICBbIFx0XG5dKyAgICB7IC8qIGlnbm9yZSB0aGlzICovIH0KICAuICAgICAgICAgICB7IC8qIGlnbm9yZSB0aGlzICovIH0KJSUKCmludCB5eXdyYXAoKXsKICAgIHJldHJ1biAxOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpewogICAgeXlsZXgoKTsKICAgIHByaW50ZigiXG5Xb3JkIEhpc3RvZ3JhbSA6ICIpOwogICAgZm9yKGludCBpPTA7IGkgPCB3b3JkQ291bnQ7IGkrKyl7CiAgICAgICAgcHJpbnRmKCIlLTEwcyAlZCIsIHdvcmRzW2ldLCBjb3VudHNbaV0pOwogICAgfQogICAgcmV0dXJuIDA7Cn0=