rendered paste bodyRELOP ">="|"<="|"=="|"!="|">"|"<"
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;
}