Skip to content

Commit

Permalink
Parser: Flex Prefix (ECP-WarpX#1615)
Browse files Browse the repository at this point in the history
* Parser: Flex Prefix

Add a prefix to all flex symbols in the parser.
This ensures that in builds with complex dependencies, which might
also use flex for their own purposes, no symbol collisions occur.

* Parser: Flex Rebuild

* Flex Prefix: Update Parser Usage

* Parser: Fix prefixes

* Parser: Flex Rebuild

Co-authored-by: Weiqun Zhang <weiqunzhang@lbl.gov>
  • Loading branch information
2 people authored and dpgrote committed Jan 14, 2021
1 parent e3bcb7a commit 6f7e6f2
Show file tree
Hide file tree
Showing 9 changed files with 691 additions and 172 deletions.
65 changes: 33 additions & 32 deletions Source/Parser/wp_parser.l
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
%}

%option nounput
%option prefix="wxparser"

/* 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. */
Expand All @@ -25,45 +26,45 @@ EXP ([Ee][-+]?[0-9]+)
"<" |
">" |
"(" |
")" { return yytext[0]; } /* simply pass through */
")" { return wxparsertext[0]; } /* simply pass through */

/* yylval is union type defined in wp_parser.tab.h that is generated
/* wxparserlval 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;}
">=" { yylval.f2 = WP_GEQ; return GEQ;}
"<=" { yylval.f2 = WP_LEQ; return LEQ;}
"==" { yylval.f2 = WP_EQ; return EQ;}
"!=" { yylval.f2 = WP_NEQ; return NEQ;}
"and" { yylval.f2 = WP_AND; return AND;}
"or" { yylval.f2 = WP_OR; return OR;}
"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; }
"sqrt" { wxparserlval.f1 = WP_SQRT; return F1; }
"exp" { wxparserlval.f1 = WP_EXP; return F1; }
"log" { wxparserlval.f1 = WP_LOG; return F1; }
"log10" { wxparserlval.f1 = WP_LOG10; return F1; }
"sin" { wxparserlval.f1 = WP_SIN; return F1; }
"cos" { wxparserlval.f1 = WP_COS; return F1; }
"tan" { wxparserlval.f1 = WP_TAN; return F1; }
"asin" { wxparserlval.f1 = WP_ASIN; return F1; }
"acos" { wxparserlval.f1 = WP_ACOS; return F1; }
"atan" { wxparserlval.f1 = WP_ATAN; return F1; }
"sinh" { wxparserlval.f1 = WP_SINH; return F1; }
"cosh" { wxparserlval.f1 = WP_COSH; return F1; }
"tanh" { wxparserlval.f1 = WP_TANH; return F1; }
"abs" { wxparserlval.f1 = WP_ABS; return F1; }
"fabs" { wxparserlval.f1 = WP_ABS; return F1; }
"**" { wxparserlval.f2 = WP_POW; return POW;}
"^" { wxparserlval.f2 = WP_POW; return POW;}
">=" { wxparserlval.f2 = WP_GEQ; return GEQ;}
"<=" { wxparserlval.f2 = WP_LEQ; return LEQ;}
"==" { wxparserlval.f2 = WP_EQ; return EQ;}
"!=" { wxparserlval.f2 = WP_NEQ; return NEQ;}
"and" { wxparserlval.f2 = WP_AND; return AND;}
"or" { wxparserlval.f2 = WP_OR; return OR;}
"pow" { wxparserlval.f2 = WP_POW; return F2; }
"heaviside" { wxparserlval.f2 = WP_HEAVISIDE; return F2; }
"min" { wxparserlval.f2 = WP_MIN; return F2; }
"max" { wxparserlval.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; }
[a-zA-Z_][a-zA-Z0-9_]* { wxparserlval.s = wp_makesymbol(wxparsertext); return SYMBOL; }

/* Number */
[0-9]+"."[0-9]*{EXP}? |
"."?[0-9]+{EXP}? { yylval.d = atof(yytext); return NUMBER; }
"."?[0-9]+{EXP}? { wxparserlval.d = atof(wxparsertext); return NUMBER; }

/* Special characters */
"//".*
Expand All @@ -72,6 +73,6 @@ EXP ([Ee][-+]?[0-9]+)
"\n" { return EOL; }

/* everything else */
. { yyerror("Unknown character %c\n", *yytext); }
. { wxparsererror("Unknown character %c\n", *wxparsertext); }

%%
Loading

0 comments on commit 6f7e6f2

Please sign in to comment.