aboutsummaryrefslogtreecommitdiff
path: root/Source/Parser/wp_parser.l
diff options
context:
space:
mode:
authorGravatar Weiqun Zhang <weiqunzhang@lbl.gov> 2019-03-13 15:36:46 -0700
committerGravatar Weiqun Zhang <weiqunzhang@lbl.gov> 2019-03-13 15:41:13 -0700
commit77a53d41a63f06089ecc83c84fccd7c4a42a89af (patch)
tree4e7fa36f324dba48dea0aebb158ba7c9ff045ce2 /Source/Parser/wp_parser.l
parent56104548c321aa1d26f6773091e2801c47626dea (diff)
downloadWarpX-77a53d41a63f06089ecc83c84fccd7c4a42a89af.tar.gz
WarpX-77a53d41a63f06089ecc83c84fccd7c4a42a89af.tar.zst
WarpX-77a53d41a63f06089ecc83c84fccd7c4a42a89af.zip
switch to WarpXParser
Diffstat (limited to 'Source/Parser/wp_parser.l')
-rw-r--r--Source/Parser/wp_parser.l68
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); }
+
+%%