%{
    #include <stdio.h>
    int letter_count = 0, digit_count = 0, special_count = 0;
%}

%%
[a-zA-Z] { letter_count++; }
[0-9] { digit_count++; }
[^a-zA-Z0-9\n\t ] { special_count++; }

%%

int main(int argc, char *argv[]) {
    if (argc != 2) {
        printf("Usage: %s <filename>\n", argv[0]);
        return 1;
    }
    FILE *file = fopen(argv[1], "r");
    if (!file) {
        printf("Error: Could not open file %s\n", argv[1]);
        return 1;
    }
    yyin = file;
    yylex();
    fclose(file);
    
    printf("Letters: %d\n", letter_count);
    printf("Numbers: %d\n", digit_count);
    printf("Special Characters: %d\n", special_count);
    return 0;
}

int yywrap() {
    return 1;
}
