xref: /netbsd-src/external/bsd/flex/dist/examples/manual/expr.lex (revision 3c3a7b7603b4ed4cb76dd5c5a3e781ddca2349bb)
1*3c3a7b76Schristos /*
2*3c3a7b76Schristos  * expr.lex : Scanner for a simple
3*3c3a7b76Schristos  *            expression parser.
4*3c3a7b76Schristos  */
5*3c3a7b76Schristos 
6*3c3a7b76Schristos %{
7*3c3a7b76Schristos #include "y.tab.h"
8*3c3a7b76Schristos 
9*3c3a7b76Schristos %}
10*3c3a7b76Schristos 
11*3c3a7b76Schristos %%
12*3c3a7b76Schristos 
13*3c3a7b76Schristos [0-9]+     { yylval.val = atol(yytext);
14*3c3a7b76Schristos              return(NUMBER);
15*3c3a7b76Schristos            }
16*3c3a7b76Schristos [0-9]+\.[0-9]+ {
17*3c3a7b76Schristos              sscanf(yytext,"%f",&yylval.val);
18*3c3a7b76Schristos              return(NUMBER);
19*3c3a7b76Schristos            }
20*3c3a7b76Schristos "+"        return(PLUS);
21*3c3a7b76Schristos "-"        return(MINUS);
22*3c3a7b76Schristos "*"        return(MULT);
23*3c3a7b76Schristos "/"        return(DIV);
24*3c3a7b76Schristos "^"        return(EXPON);
25*3c3a7b76Schristos "("        return(LB);
26*3c3a7b76Schristos ")"        return(RB);
27*3c3a7b76Schristos \n         return(EOL);
28*3c3a7b76Schristos [\t ]*     /* throw away whitespace */
29*3c3a7b76Schristos .          { yyerror("Illegal character");
30*3c3a7b76Schristos              return(EOL);
31*3c3a7b76Schristos            }
32*3c3a7b76Schristos %%
33*3c3a7b76Schristos 
34*3c3a7b76Schristos 
35*3c3a7b76Schristos 
36