1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
%{
// $Id: parsedFunctionLexer.l,v 1.2 2002/12/12 10:22:09 oliver Exp $
#include <BALL/MATHS/parsedFunction.h>
#include <BALL/COMMON/parserDefinitions.h>
using namespace BALL;
#include "parsedFunctionParser.h"
%}
%option noyywrap
%option nounput
LETTER [a-zA-Z]
SIGN "+"|"-"
DIGIT [0-9]
INT {SIGN}?{DIGIT}+
REAL {SIGN}?({DIGIT}*)((\.({DIGIT}*))?)((E|e)({SIGN}?){DIGIT}{1,3})?
ID {LETTER}(({LETTER}|{DIGIT})*)
%%
[ \t] /* Good bye white space...*/
"\n" {return '\n';}
";" {return ';';}
"\+" {return '+';}
"\-" {return '-';}
"\*" {return '*';}
"\/" {return '/';}
"\^" {return '^';}
"(" {return '(';}
")" {return ')';}
"=" {return '=';}
{INT} {ParsedFunctionlval.val=atoi(yytext); return NUM;}
{REAL} {ParsedFunctionlval.val=atof(yytext); return NUM;}
{ID} {if (ParsedFunctionFunctions->has(yytext))
{
double(*func)(double)=(*ParsedFunctionFunctions)[yytext];
ParsedFunctionlval.func = func;
return FNCT;
}
else
{ if (ParsedFunctionConstants->has(yytext))
{
ParsedFunctionlval.var = (*ParsedFunctionConstants)[yytext];
return VAR;
}
else
{
double *v = new double;
(*ParsedFunctionConstants)[yytext] = v;
ParsedFunctionlval.var = v;
return VAR;
}
}
}
%%
YY_BUFFER_STATE ParsedFunction_buffer;
void ParsedFunction_initBuffer(const char* buf)
{
ParsedFunction_buffer = ParsedFunction_scan_string(buf);
}
void ParsedFunction_delBuffer()
{
ParsedFunction_delete_buffer(ParsedFunction_buffer);
}
|