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 $