%{
#include <stdio.h>
#include <stdlib.h>
 
int COMMENT = 0;   // Flag for multi-line comments
%}
 
identifier [a-zA-Z_][a-zA-Z0-9_]*
 
%%
 
#.*                                     { printf("\n%s is a PREPROCESSOR DIRECTIVE", yytext); }
 
(int
|float|char
|double
|while
|for
|struct
|typedef
|do
|if
|break
|continue
|void
|switch
|return
|else
|goto
)                                         { printf("\n%s is a KEYWORD", yytext); }
 
"/*"                                    { COMMENT = 1; printf("\n%s is a COMMENT", yytext); }
"*/"                                    { COMMENT = 0; printf("\n%s ends COMMENT", yytext); }
 
{identifier}\(                          { if(!COMMENT) printf("\n%s FUNCTION", yytext); }
 
{identifier}(\[[0-9]*\])?               { if(!COMMENT) printf("\n%s IDENTIFIER", yytext); }
 
\{                                      { if(!COMMENT) printf("\nBLOCK BEGINS"); }
\}                                      { if(!COMMENT) printf("\nBLOCK ENDS"); }
 
\;                                      { if(!COMMENT) printf("\n%s PUNCTUATOR", yytext); }
 
\".*\"                                  { if(!COMMENT) printf("\n%s STRING", yytext); }
 
{number}                                { if
(!COMMENT
) printf
("\n
%s NUMBER", yytext); }  
=                                       { if(!COMMENT) printf("\n%s ASSIGNMENT OPERATOR", yytext); }
 
"=="|"<="|">="|"<"|">"                  { if(!COMMENT) printf("\n%s RELATIONAL OPERATOR", yytext); }
 
"+"|"-"|"*"|"/"                         { if(!COMMENT) printf("\n%s ARITHMETIC OPERATOR", yytext); }
 
[ \t\n]+                                { /* ignore whitespace */ }
 
.                                       { /* ignore other characters */ }
 
%%
 
int main(int argc, char **argv) {
    FILE 
*file 
= fopen
("
var.c"
, "r"
);   // File to analyze
    if (!file) {
        printf
("Could not 
open the file\n"
);        exit(0);
    }
 
    yyin = file;   // Set input for lexer
    yylex();       // Start lexical analysis
    printf("\nLexical Analysis Complete.\n");
    return 0;
}
 
int yywrap() {
    return 1;
}
 
				JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCBDT01NRU5UID0gMDsgICAvLyBGbGFnIGZvciBtdWx0aS1saW5lIGNvbW1lbnRzCiV9CgppZGVudGlmaWVyIFthLXpBLVpfXVthLXpBLVowLTlfXSoKbnVtYmVyIFswLTldKwoKJSUKCiMuKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiXG4lcyBpcyBhIFBSRVBST0NFU1NPUiBESVJFQ1RJVkUiLCB5eXRleHQpOyB9CgooaW50fGZsb2F0fGNoYXJ8ZG91YmxlfHdoaWxlfGZvcnxzdHJ1Y3R8dHlwZWRlZnxkb3xpZnxicmVha3xjb250aW51ZXx2b2lkfHN3aXRjaHxyZXR1cm58ZWxzZXxnb3RvKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmludGYoIlxuJXMgaXMgYSBLRVlXT1JEIiwgeXl0ZXh0KTsgfQoKIi8qIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ09NTUVOVCA9IDE7IHByaW50ZigiXG4lcyBpcyBhIENPTU1FTlQiLCB5eXRleHQpOyB9CiIqLyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENPTU1FTlQgPSAwOyBwcmludGYoIlxuJXMgZW5kcyBDT01NRU5UIiwgeXl0ZXh0KTsgfQoKe2lkZW50aWZpZXJ9XCggICAgICAgICAgICAgICAgICAgICAgICAgIHsgaWYoIUNPTU1FTlQpIHByaW50ZigiXG4lcyBGVU5DVElPTiIsIHl5dGV4dCk7IH0KCntpZGVudGlmaWVyfShcW1swLTldKlxdKT8gICAgICAgICAgICAgICB7IGlmKCFDT01NRU5UKSBwcmludGYoIlxuJXMgSURFTlRJRklFUiIsIHl5dGV4dCk7IH0KClx7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlmKCFDT01NRU5UKSBwcmludGYoIlxuQkxPQ0sgQkVHSU5TIik7IH0KXH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaWYoIUNPTU1FTlQpIHByaW50ZigiXG5CTE9DSyBFTkRTIik7IH0KClw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlmKCFDT01NRU5UKSBwcmludGYoIlxuJXMgUFVOQ1RVQVRPUiIsIHl5dGV4dCk7IH0KClwiLipcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlmKCFDT01NRU5UKSBwcmludGYoIlxuJXMgU1RSSU5HIiwgeXl0ZXh0KTsgfQoKe251bWJlcn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaWYoIUNPTU1FTlQpIHByaW50ZigiXG4lcyBOVU1CRVIiLCB5eXRleHQpOyB9Cgo9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpZighQ09NTUVOVCkgcHJpbnRmKCJcbiVzIEFTU0lHTk1FTlQgT1BFUkFUT1IiLCB5eXRleHQpOyB9CgoiPT0ifCI8PSJ8Ij49InwiPCJ8Ij4iICAgICAgICAgICAgICAgICAgeyBpZighQ09NTUVOVCkgcHJpbnRmKCJcbiVzIFJFTEFUSU9OQUwgT1BFUkFUT1IiLCB5eXRleHQpOyB9CgoiKyJ8Ii0ifCIqInwiLyIgICAgICAgICAgICAgICAgICAgICAgICAgeyBpZighQ09NTUVOVCkgcHJpbnRmKCJcbiVzIEFSSVRITUVUSUMgT1BFUkFUT1IiLCB5eXRleHQpOyB9CgpbIFx0XG5dKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAvKiBpZ25vcmUgd2hpdGVzcGFjZSAqLyB9CgouICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAvKiBpZ25vcmUgb3RoZXIgY2hhcmFjdGVycyAqLyB9CgolJQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CiAgICBGSUxFICpmaWxlID0gZm9wZW4oInZhci5jIiwgInIiKTsgICAvLyBGaWxlIHRvIGFuYWx5emUKICAgIGlmICghZmlsZSkgewogICAgICAgIHByaW50ZigiQ291bGQgbm90IG9wZW4gdGhlIGZpbGVcbiIpOwogICAgICAgIGV4aXQoMCk7CiAgICB9CgogICAgeXlpbiA9IGZpbGU7ICAgLy8gU2V0IGlucHV0IGZvciBsZXhlcgogICAgeXlsZXgoKTsgICAgICAgLy8gU3RhcnQgbGV4aWNhbCBhbmFseXNpcwogICAgcHJpbnRmKCJcbkxleGljYWwgQW5hbHlzaXMgQ29tcGxldGUuXG4iKTsKICAgIHJldHVybiAwOwp9CgppbnQgeXl3cmFwKCkgewogICAgcmV0dXJuIDE7Cn0K