All pastes #34918 Raw Edit

Casanova

public text v1 · immutable
#34918 ·published 2005-12-26 17:57 UTC
rendered paste body
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;
}