#@title Writing Lex program
%%writefile program.l
 
%{
    #include <stdio.h>
    int ctChar=0;
    int ctSpace=0;
    int ctWord=0;
    int ctLine=0;
%}
WORD [^ \t\n,\.:]+
EOL [\n]
BLANK [ ]
%%
 
{WORD} {ctWord++; ctChar+=yyleng;}
{BLANK} {ctSpace++;}
{EOL} {ctLine++;}
. {ctChar++;}
%%
 
void main(int argc, char *argv[]){
    if(argc!=2){
        printf("Usage:\n\t./a.out <FILENAME>\n");
        exit(0);
    }
 
    yyin=fopen(argv[1],"r");
    yylex();
 
    printf("Word Count: %d\n",ctWord);
    printf("Character Count: %d\n",ctChar);
    printf("Space Count: %d\n",ctSpace);
    printf("Line Count: %d\n",ctLine);
    fclose(yyin);
 
}
 
int yywrap(){
    return 1;
}
				I0B0aXRsZSBXcml0aW5nIExleCBwcm9ncmFtCiUld3JpdGVmaWxlIHByb2dyYW0ubAoKJXsKICAgICNpbmNsdWRlIDxzdGRpby5oPgogICAgaW50IGN0Q2hhcj0wOwogICAgaW50IGN0U3BhY2U9MDsKICAgIGludCBjdFdvcmQ9MDsKICAgIGludCBjdExpbmU9MDsKJX0KV09SRCBbXiBcdFxuLFwuOl0rCkVPTCBbXG5dCkJMQU5LIFsgXQolJQoKe1dPUkR9IHtjdFdvcmQrKzsgY3RDaGFyKz15eWxlbmc7fQp7QkxBTkt9IHtjdFNwYWNlKys7fQp7RU9MfSB7Y3RMaW5lKys7fQouIHtjdENoYXIrKzt9CiUlCgp2b2lkIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSl7CiAgICBpZihhcmdjIT0yKXsKICAgICAgICBwcmludGYoIlVzYWdlOlxuXHQuL2Eub3V0IDxGSUxFTkFNRT5cbiIpOwogICAgICAgIGV4aXQoMCk7CiAgICB9CgogICAgeXlpbj1mb3Blbihhcmd2WzFdLCJyIik7CiAgICB5eWxleCgpOwoKICAgIHByaW50ZigiV29yZCBDb3VudDogJWRcbiIsY3RXb3JkKTsKICAgIHByaW50ZigiQ2hhcmFjdGVyIENvdW50OiAlZFxuIixjdENoYXIpOwogICAgcHJpbnRmKCJTcGFjZSBDb3VudDogJWRcbiIsY3RTcGFjZSk7CiAgICBwcmludGYoIkxpbmUgQ291bnQ6ICVkXG4iLGN0TGluZSk7CiAgICBmY2xvc2UoeXlpbik7Cgp9CgppbnQgeXl3cmFwKCl7CiAgICByZXR1cm4gMTsKfQ==