%{
#include <stdio.h>
int vow_count = 0, const_count = 0, digit_count = 0;
int space_count = 0, word_count = 0, line_count = 0;
%}
 
%%
 
[aeiouAEIOU]               { vow_count++; }                     /* Count vowels */
[b-df-hj-np-tv-zB-DF-HJ-NP-TV-Z]  { const_count++; }             /* Count consonants */
[0-9]                      { digit_count++; }                    /* Count digits */
[ \t]+                     { space_count++; }                    /* Count spaces/tabs */
\n                         { line_count++; word_count++; }       /* Count new lines */
[^ \t\n]+                  { word_count++; }                     /* Count words */
 
%%
 
int main()
{
    printf("Enter the input text (Ctrl+D or Ctrl+Z to end):\n");
    yylex();
    printf("\n----- OUTPUT -----\n");
    printf("Total vowels       = %d\n", vow_count);
    printf("Total consonants   = %d\n", const_count);
    printf("Total digits       = %d\n", digit_count);
    printf("Total spaces       = %d\n", space_count);
    printf("Total words        = %d\n", word_count);
    printf("Total lines        = %d\n", line_count);
    return 0;
}
 
int yywrap()
{
    return 1;
}
 
				JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CmludCB2b3dfY291bnQgPSAwLCBjb25zdF9jb3VudCA9IDAsIGRpZ2l0X2NvdW50ID0gMDsKaW50IHNwYWNlX2NvdW50ID0gMCwgd29yZF9jb3VudCA9IDAsIGxpbmVfY291bnQgPSAwOwolfQoKJSUKClthZWlvdUFFSU9VXSAgICAgICAgICAgICAgIHsgdm93X2NvdW50Kys7IH0gICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCB2b3dlbHMgKi8KW2ItZGYtaGotbnAtdHYtekItREYtSEotTlAtVFYtWl0gIHsgY29uc3RfY291bnQrKzsgfSAgICAgICAgICAgICAvKiBDb3VudCBjb25zb25hbnRzICovClswLTldICAgICAgICAgICAgICAgICAgICAgIHsgZGlnaXRfY291bnQrKzsgfSAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgZGlnaXRzICovClsgXHRdKyAgICAgICAgICAgICAgICAgICAgIHsgc3BhY2VfY291bnQrKzsgfSAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgc3BhY2VzL3RhYnMgKi8KXG4gICAgICAgICAgICAgICAgICAgICAgICAgeyBsaW5lX2NvdW50Kys7IHdvcmRfY291bnQrKzsgfSAgICAgICAvKiBDb3VudCBuZXcgbGluZXMgKi8KW14gXHRcbl0rICAgICAgICAgICAgICAgICAgeyB3b3JkX2NvdW50Kys7IH0gICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCB3b3JkcyAqLwoKJSUKCmludCBtYWluKCkKewogICAgcHJpbnRmKCJFbnRlciB0aGUgaW5wdXQgdGV4dCAoQ3RybCtEIG9yIEN0cmwrWiB0byBlbmQpOlxuIik7CiAgICB5eWxleCgpOwogICAgcHJpbnRmKCJcbi0tLS0tIE9VVFBVVCAtLS0tLVxuIik7CiAgICBwcmludGYoIlRvdGFsIHZvd2VscyAgICAgICA9ICVkXG4iLCB2b3dfY291bnQpOwogICAgcHJpbnRmKCJUb3RhbCBjb25zb25hbnRzICAgPSAlZFxuIiwgY29uc3RfY291bnQpOwogICAgcHJpbnRmKCJUb3RhbCBkaWdpdHMgICAgICAgPSAlZFxuIiwgZGlnaXRfY291bnQpOwogICAgcHJpbnRmKCJUb3RhbCBzcGFjZXMgICAgICAgPSAlZFxuIiwgc3BhY2VfY291bnQpOwogICAgcHJpbnRmKCJUb3RhbCB3b3JkcyAgICAgICAgPSAlZFxuIiwgd29yZF9jb3VudCk7CiAgICBwcmludGYoIlRvdGFsIGxpbmVzICAgICAgICA9ICVkXG4iLCBsaW5lX2NvdW50KTsKICAgIHJldHVybiAwOwp9CgppbnQgeXl3cmFwKCkKewogICAgcmV0dXJuIDE7Cn0K