Tuesday, April 7, 2009

source code

LEXTOOL.l

%{
#include
int num_lines=0,comment=0;
%}

label [a-z][a-zA-Z]*
number[0-9]*

%%
“\n”{num_lines++;}
char|int|float|double|for|while|if|exit|break|else|struct|case|long|const|typedef|return|goto|do|switch|void{if(!comment)
printf(“Keyword=%s\n”,yytext);
}
printf|scanf|main|getch|clrscr{if(!=comment)
printf(“Function=%s\n”,yytext);
}
“;”|”{“|”}”|”(“|”)”{if(!comment)
printf(“Delimitter=%s\n”yytext);
}
{number}{if(!comment)
printf(“number=%s\n”,yytext);
}
{label}{if(!comment)
printf(“Label=%s\n”,yytext);
}
“/*”{comment=1;
printf(“Command line Begins”);
}
“*/”{comment=0;
printf(“Command Line Ends”);
}
“<=”|”>=”|”==”|”>”|”<”{if(!comment)
printf(“Relational operator=%s\n”,yytext);
}
“=”{if(!comment)
printf(“Assignment Operator=%s\n”,yytext);
}
“+”|”-“|”*”|”/”{if(!comment)
printf(“Arithmetic Operator=%s\n”,yytext);
}
“++”{if(!comment)
printf(“Increment operator”);
}
“--“if(comment)
printf(“Decrement operator”);
}
“$”{return;}
%%
main()
{
yylex();
printf(“number of lines scanned=%d”,num_lines);
}


OUTPUT:

#lextool.l
#cc lex.yy.c –ll
#./a.out
For(i=0;i<10;i++)
Keyword=for
Delimiter=(
Label=i
Assignment Operator ==
Number =0
Delimiter=;
Label=i
Relational Operator =<
Number =10
Delimiter =;
Label = i
Increment Operator
Delimiter = )
int a=7;
Keyword= int
Label =a
Assignment Operator ==
Number =7
Delimiter =;
$
number of lines scanned = 2