%{
#include <stdio.h>
int ctTab = 0;
int ctSpace = 0;
int ctLine = 0;
%}
%%
[\t] { ctTab++; }
[ ] { ctSpace++; }
[\n] { ctLine++; }
. { /* ignore other characters */ }
%%
int yywrap() {
return 1;
}
int main(int argc, char *argv[]) {
if(argc != 2) {
printf("Usage: ./a.out <FILENAME>\n");
return 1;
}
FILE *file = fopen(argv[1], "r");
if (!file) {
perror("Error opening file");
return 1;
}
yyin = file;
yylex();
printf("Line Count: %d\n", ctLine);
printf("Space Count: %d\n", ctSpace);
printf("Tab Count: %d\n", ctTab);
fclose(file);
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CmludCBjdFRhYiA9IDA7CmludCBjdFNwYWNlID0gMDsKaW50IGN0TGluZSA9IDA7CiV9CgolJQoKW1x0XSAgICAgIHsgY3RUYWIrKzsgfQpbIF0gICAgICAgeyBjdFNwYWNlKys7IH0KW1xuXSAgICAgIHsgY3RMaW5lKys7IH0KLiAgICAgICAgIHsgLyogaWdub3JlIG90aGVyIGNoYXJhY3RlcnMgKi8gfQoKJSUKCmludCB5eXdyYXAoKSB7CiAgICByZXR1cm4gMTsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgewogICAgaWYoYXJnYyAhPSAyKSB7CiAgICAgICAgcHJpbnRmKCJVc2FnZTogLi9hLm91dCA8RklMRU5BTUU+XG4iKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBGSUxFICpmaWxlID0gZm9wZW4oYXJndlsxXSwgInIiKTsKICAgIGlmICghZmlsZSkgewogICAgICAgIHBlcnJvcigiRXJyb3Igb3BlbmluZyBmaWxlIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgeXlpbiA9IGZpbGU7CiAgICB5eWxleCgpOwoKICAgIHByaW50ZigiTGluZSBDb3VudDogJWRcbiIsIGN0TGluZSk7CiAgICBwcmludGYoIlNwYWNlIENvdW50OiAlZFxuIiwgY3RTcGFjZSk7CiAgICBwcmludGYoIlRhYiBDb3VudDogJWRcbiIsIGN0VGFiKTsKCiAgICBmY2xvc2UoZmlsZSk7CiAgICByZXR1cm4gMDsKfQo=