diff options
Diffstat (limited to 'Source/Parser/wp_parser.l')
-rw-r--r-- | Source/Parser/wp_parser.l | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/Source/Parser/wp_parser.l b/Source/Parser/wp_parser.l new file mode 100644 index 000000000..e8c99200d --- /dev/null +++ b/Source/Parser/wp_parser.l @@ -0,0 +1,68 @@ +%option noyywrap nodefault +%{ +#include "wp_parser_y.h" +#include "wp_parser.tab.h" +%} + + /* Tokens NUMBER, SYMBOL, F1, POW, F2, etc. are defined in wp_parser.y. */ + /* Types WP_SQRT, WP_SQRT, etc. are defined in wp_parser_y.h. */ + + /* Used leater to define NUMBER */ +EXP ([Ee][-+]?[0-9]+) + +%% + +"+" | +"-" | +"*" | +"/" | +"=" | +"|" | +"," | +"<" | +">" | +"(" | +")" { return yytext[0]; } /* simply pass through */ + + /* yylval is union type defined in wp_parser.tab.h that is generated + * by bison with wp_parser.y */ + +"sqrt" { yylval.f1 = WP_SQRT; return F1; } +"exp" { yylval.f1 = WP_EXP; return F1; } +"log" { yylval.f1 = WP_LOG; return F1; } +"log10" { yylval.f1 = WP_LOG10; return F1; } +"sin" { yylval.f1 = WP_SIN; return F1; } +"cos" { yylval.f1 = WP_COS; return F1; } +"tan" { yylval.f1 = WP_TAN; return F1; } +"asin" { yylval.f1 = WP_ASIN; return F1; } +"acos" { yylval.f1 = WP_ACOS; return F1; } +"atan" { yylval.f1 = WP_ATAN; return F1; } +"sinh" { yylval.f1 = WP_SINH; return F1; } +"cosh" { yylval.f1 = WP_COSH; return F1; } +"tanh" { yylval.f1 = WP_TANH; return F1; } +"abs" { yylval.f1 = WP_ABS; return F1; } +"fabs" { yylval.f1 = WP_ABS; return F1; } +"**" { yylval.f2 = WP_POW; return POW;} +"^" { yylval.f2 = WP_POW; return POW;} +"pow" { yylval.f2 = WP_POW; return F2; } +"heaviside" { yylval.f2 = WP_HEAVISIDE; return F2; } +"min" { yylval.f2 = WP_MIN; return F2; } +"max" { yylval.f2 = WP_MAX; return F2; } + + /* We use SYMBOL to hold variables and constants */ +[a-zA-Z][a-zA-Z0-9]* { yylval.s = wp_makesymbol(yytext); return SYMBOL; } + + /* Number */ +[0-9]+"."[0-9]*{EXP}? | +"."?[0-9]+{EXP}? { yylval.d = atof(yytext); return NUMBER; } + + /* Special characters */ +"//".* +[ \t] /* ignore white space */ +\\\n /* ignore line continuation */ +"\n" { return EOL; } + + /* everything else */ +. { yyerror("Unknow character %c\n", *yytext); } + +%% |