PoiNtEr->: lex program

                             Difference between a dream and an aim. A dream requires soundless sleep, whereas an aim requires sleepless efforts.

Search This Blog

Saturday, December 25, 2010

lex program


The following is an example of a lex program that implements a rudimentary scanner for a Pascal-like syntax:

%{

/* Need this for the call to atof() below. */

#include <math.h>

/* Need this for printf(), fopen(), and stdin below. */

#include <stdio.h>

%}

DIGIT [0-9]

ID [a-z][a-z0-9]*

%%

{DIGIT}+ {

printf("An integer: %s (%d)\n", yytext,

atoi(yytext));

}

{DIGIT}+"."{DIGIT}* {

printf("A float: %s (%g)\n", yytext,

atof(yytext));

}

if|then|begin|end|procedure|function {

printf("A keyword: %s\n", yytext);

}

{ID} printf("An identifier: %s\n", yytext);

"+"|"-"|"*"|"/" printf("An operator: %s\n", yytext);

"{"[^}\n]*"}" /* Eat up one-line comments. */

[ \t\n]+ /* Eat up white space. */

. printf("Unrecognized character: %s\n", yytext);

%%

int main(int argc, char *argv[])

{

++argv, --argc; /* Skip over program name. */

if (argc > 0)

yyin = fopen(argv[0], "r");

else

yyin = stdin;

yylex();

}

/*command required to run program on linux is "lex <filename.l>" ,where ".l" is extension of lex file.you can also google flex and download it to run above.*/

/*after running above program you will get a "lex.yy.c" if you are using flex. */

No comments:

Post a Comment