File: parsedFunctionLexer.l

package info (click to toggle)
ball 1.5.0%2Bgit20180813.37fc53c-6
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 239,888 kB
  • sloc: cpp: 326,149; ansic: 4,208; python: 2,303; yacc: 1,778; lex: 1,099; xml: 958; sh: 322; makefile: 95
file content (67 lines) | stat: -rw-r--r-- 1,597 bytes parent folder | download | duplicates (9)
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);
}