Lex State Example


$ cat state.lex
%{
/*
 * Example of pattern names and states in Lex.
 */
%}

%s ASTATE ESTATE

DIGIT [0-9]
ALPHA [A-Za-z]
VARNM [a-zA-Z][a-zA-Z0-9]*
OP    [-+\*\/\^]

%%

[\t ]+          /* ignore */ ;

<ASTATE>=               { BEGIN ESTATE; printf("Got assignment.\n"); }

<ESTATE>{DIGIT}+        { printf("Got number: %s\n",yytext); }

<ESTATE>{ALPHA}+        { printf("Got name: %s\n",yytext); }

<ESTATE>{OP}            { printf("Got op: %s\n",yytext); }

<ESTATE>\n              { BEGIN 0; printf(".\n"); }

quit                    { exit(0); }

{VARNM}                 { BEGIN ASTATE; printf("Got variable: %s\n",yytext); }

.\n             /* ignore */ ;

%%

int main( int c , char **argv ) {
   yylex();
}
$ lex state.lex
$ gcc lex.yy.c -o state -ll
$ ./state
foo = 1 + 2 + bar++ * qux / bid
Got variable: foo
Got assignment.
Got number: 1
Got op: +
Got number: 2
Got op: +
Got name: bar
Got op: +
Got op: +
Got op: *
Got name: qux
Got op: /
Got name: bid
.
quit
$ ^D
exit


$Id: LexStateExample.html,v 1.2 2003/04/30 23:50:53 stremler Exp stremler $