RELOP ">="|"<="|"=="|"!="|">"|"<" ARITHOP "+"|"-"|"*"|"/" UNARY "++"|"--"|"!" BINARY "&"|"~"|"|"|">>"|"<<" WHITE [ \n]* MODIFIER "auto"|"register"|"static"|"signed"|"unsigned"|"volatile" CHAR [A-Za-z_] DIGIT [0-9] TYPE "int"|"long"|"short"|"double"|"float"|"void" LOOP "while"|"for"|"do" COND "if"|"else"|"case"|"switch"|"default" DELIM ","|";" BRACES "{"|"}"|"["|"]"|"("|")" QUOTES "\""|"\'" NUMBER {DIGIT}+ DATATYPE {MODIFIER}?{WHITE}{TYPE}{WHITE}("\*")? ID {CHAR}({CHAR}|{DIGIT})* CONCATOP ({ARITHOP}|{BINARY})?"=" OP {RELOP}|{ARITHOP}|{UNARY}|{BINARY}|{CONCATOP} KEYWORDS {MODIFIER}|"const"|"continue"|"break"|"extern"|"goto"|"return"|"sizeof"|"enum"|"struct"|"typedef"|"union"| %% {DATATYPE} fprintf (yyout,"DATA TYPE:\t %s\n",yytext); {OP} fprintf (yyout,"OPERATOR:\t\t %s\n",yytext); {QUOTES} fprintf (yyout,"QUOTES:\t\t %s\n",yytext); {BRACES} fprintf (yyout,"BRACES:\t\t %s\n",yytext); {LOOP} fprintf (yyout,"LOOP:\t\t %s\n",yytext); {NUMBER} fprintf (yyout,"NUMBER:\t\t %d\n",atoi (yytext)); {ID} fprintf (yyout,"ID:\t\t %s\n",yytext); {DELIM}+ fprintf (yyout,"DELIM:\t\t %s\n",yytext); {WHITE}+ ; /* ignore whitespace */ %% int yywrap(void) { return 1; } int main(int argc, char *argv[]) { if (argc >= 2) yyin = fopen (argv[1],"r"); if (argc >= 3) yyout = fopen (argv[2],"w"); yylex(); close (yyin); close (yyout); return 0; }