%{
#include <stdio.h>
#include <stdlib.h>
int ctIdentifier = 0;
int ctLine = 0;
int ctBlankLine = 0;
%}
/* Regular Expressions */
IDENTIFIER [a-zA-Z_][a-zA-Z0-9_]*
EOL \n
WS [ \t]+
%%
/* Identifier rule */
{IDENTIFIER} { ctIdentifier++; }
/* Blank line: consists only of spaces/tabs followed by newline */
^{WS}*{EOL} { ctBlankLine++; ctLine++; }
/* End of line (non-blank) */
{EOL} { ctLine++; }
/* Ignore other characters */
. { /* Do nothing */ }
%%
int yywrap() {
return 1;
}
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("Usage:\n\t./a.out <FILENAME>\n");
exit(0);
}
yyin = fopen(argv[1], "r");
if (!yyin) {
perror("Error opening file");
exit(1);
}
yylex();
printf("Identifier Count: %d\n", ctIdentifier);
printf("Total Lines: %d\n", ctLine);
printf("Blank Lines: %d\n", ctBlankLine);
fclose(yyin);
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCBjdElkZW50aWZpZXIgPSAwOwppbnQgY3RMaW5lID0gMDsKaW50IGN0QmxhbmtMaW5lID0gMDsKJX0KCi8qIFJlZ3VsYXIgRXhwcmVzc2lvbnMgKi8KSURFTlRJRklFUiAgIFthLXpBLVpfXVthLXpBLVowLTlfXSoKRU9MICAgICAgICAgIFxuCldTICAgICAgICAgICBbIFx0XSsKJSUKLyogSWRlbnRpZmllciBydWxlICovCntJREVOVElGSUVSfSAgIHsgY3RJZGVudGlmaWVyKys7IH0KCi8qIEJsYW5rIGxpbmU6IGNvbnNpc3RzIG9ubHkgb2Ygc3BhY2VzL3RhYnMgZm9sbG93ZWQgYnkgbmV3bGluZSAqLwpee1dTfSp7RU9MfSAgICB7IGN0QmxhbmtMaW5lKys7IGN0TGluZSsrOyB9CgovKiBFbmQgb2YgbGluZSAobm9uLWJsYW5rKSAqLwp7RU9MfSAgICAgICAgICB7IGN0TGluZSsrOyB9CgovKiBJZ25vcmUgb3RoZXIgY2hhcmFjdGVycyAqLwouICAgICAgICAgICAgICB7IC8qIERvIG5vdGhpbmcgKi8gfQolJQoKaW50IHl5d3JhcCgpIHsKICAgIHJldHVybiAxOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CiAgICBpZiAoYXJnYyAhPSAyKSB7CiAgICAgICAgcHJpbnRmKCJVc2FnZTpcblx0Li9hLm91dCA8RklMRU5BTUU+XG4iKTsKICAgICAgICBleGl0KDApOwogICAgfQoKICAgIHl5aW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwogICAgaWYgKCF5eWluKSB7CiAgICAgICAgcGVycm9yKCJFcnJvciBvcGVuaW5nIGZpbGUiKTsKICAgICAgICBleGl0KDEpOwogICAgfQoKICAgIHl5bGV4KCk7CgogICAgcHJpbnRmKCJJZGVudGlmaWVyIENvdW50OiAlZFxuIiwgY3RJZGVudGlmaWVyKTsKICAgIHByaW50ZigiVG90YWwgTGluZXM6ICVkXG4iLCBjdExpbmUpOwogICAgcHJpbnRmKCJCbGFuayBMaW5lczogJWRcbiIsIGN0QmxhbmtMaW5lKTsKCiAgICBmY2xvc2UoeXlpbik7CiAgICByZXR1cm4gMDsKfQo=