From 945625665efe31ece707dd4a1be17aee946530d3 Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Mon, 11 Jan 2021 10:29:05 -0800 Subject: [PATCH 1/5] 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. --- Source/Parser/wp_parser.l | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Parser/wp_parser.l b/Source/Parser/wp_parser.l index 1b8689eb834..cfca24ad9b7 100644 --- a/Source/Parser/wp_parser.l +++ b/Source/Parser/wp_parser.l @@ -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. */ From 8120699c10d297f5d108c1e8d6bbcfce36b4f16f Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Mon, 11 Jan 2021 10:30:06 -0800 Subject: [PATCH 2/5] Parser: Flex Rebuild --- Source/Parser/wp_parser.lex.cpp | 261 +++++++++++++++++++++++- Source/Parser/wp_parser.lex.h | 342 +++++++++++++++++++++++++++----- 2 files changed, 548 insertions(+), 55 deletions(-) diff --git a/Source/Parser/wp_parser.lex.cpp b/Source/Parser/wp_parser.lex.cpp index bea65033766..a531b7af1e1 100644 --- a/Source/Parser/wp_parser.lex.cpp +++ b/Source/Parser/wp_parser.lex.cpp @@ -3,6 +3,31 @@ /* A lexical scanner generated by flex */ +#define yy_create_buffer wxparser_create_buffer +#define yy_delete_buffer wxparser_delete_buffer +#define yy_scan_buffer wxparser_scan_buffer +#define yy_scan_string wxparser_scan_string +#define yy_scan_bytes wxparser_scan_bytes +#define yy_init_buffer wxparser_init_buffer +#define yy_flush_buffer wxparser_flush_buffer +#define yy_load_buffer_state wxparser_load_buffer_state +#define yy_switch_to_buffer wxparser_switch_to_buffer +#define yypush_buffer_state wxparserpush_buffer_state +#define yypop_buffer_state wxparserpop_buffer_state +#define yyensure_buffer_stack wxparserensure_buffer_stack +#define yy_flex_debug wxparser_flex_debug +#define yyin wxparserin +#define yyleng wxparserleng +#define yylex wxparserlex +#define yylineno wxparserlineno +#define yyout wxparserout +#define yyrestart wxparserrestart +#define yytext wxparsertext +#define yywrap wxparserwrap +#define yyalloc wxparseralloc +#define yyrealloc wxparserrealloc +#define yyfree wxparserfree + #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 @@ -11,6 +36,240 @@ #define FLEX_BETA #endif +#ifdef yy_create_buffer +#define wxparser_create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer wxparser_create_buffer +#endif + +#ifdef yy_delete_buffer +#define wxparser_delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer wxparser_delete_buffer +#endif + +#ifdef yy_scan_buffer +#define wxparser_scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer wxparser_scan_buffer +#endif + +#ifdef yy_scan_string +#define wxparser_scan_string_ALREADY_DEFINED +#else +#define yy_scan_string wxparser_scan_string +#endif + +#ifdef yy_scan_bytes +#define wxparser_scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes wxparser_scan_bytes +#endif + +#ifdef yy_init_buffer +#define wxparser_init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer wxparser_init_buffer +#endif + +#ifdef yy_flush_buffer +#define wxparser_flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer wxparser_flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define wxparser_load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state wxparser_load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define wxparser_switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer wxparser_switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define wxparserpush_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state wxparserpush_buffer_state +#endif + +#ifdef yypop_buffer_state +#define wxparserpop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state wxparserpop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define wxparserensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack wxparserensure_buffer_stack +#endif + +#ifdef yylex +#define wxparserlex_ALREADY_DEFINED +#else +#define yylex wxparserlex +#endif + +#ifdef yyrestart +#define wxparserrestart_ALREADY_DEFINED +#else +#define yyrestart wxparserrestart +#endif + +#ifdef yylex_init +#define wxparserlex_init_ALREADY_DEFINED +#else +#define yylex_init wxparserlex_init +#endif + +#ifdef yylex_init_extra +#define wxparserlex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra wxparserlex_init_extra +#endif + +#ifdef yylex_destroy +#define wxparserlex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy wxparserlex_destroy +#endif + +#ifdef yyget_debug +#define wxparserget_debug_ALREADY_DEFINED +#else +#define yyget_debug wxparserget_debug +#endif + +#ifdef yyset_debug +#define wxparserset_debug_ALREADY_DEFINED +#else +#define yyset_debug wxparserset_debug +#endif + +#ifdef yyget_extra +#define wxparserget_extra_ALREADY_DEFINED +#else +#define yyget_extra wxparserget_extra +#endif + +#ifdef yyset_extra +#define wxparserset_extra_ALREADY_DEFINED +#else +#define yyset_extra wxparserset_extra +#endif + +#ifdef yyget_in +#define wxparserget_in_ALREADY_DEFINED +#else +#define yyget_in wxparserget_in +#endif + +#ifdef yyset_in +#define wxparserset_in_ALREADY_DEFINED +#else +#define yyset_in wxparserset_in +#endif + +#ifdef yyget_out +#define wxparserget_out_ALREADY_DEFINED +#else +#define yyget_out wxparserget_out +#endif + +#ifdef yyset_out +#define wxparserset_out_ALREADY_DEFINED +#else +#define yyset_out wxparserset_out +#endif + +#ifdef yyget_leng +#define wxparserget_leng_ALREADY_DEFINED +#else +#define yyget_leng wxparserget_leng +#endif + +#ifdef yyget_text +#define wxparserget_text_ALREADY_DEFINED +#else +#define yyget_text wxparserget_text +#endif + +#ifdef yyget_lineno +#define wxparserget_lineno_ALREADY_DEFINED +#else +#define yyget_lineno wxparserget_lineno +#endif + +#ifdef yyset_lineno +#define wxparserset_lineno_ALREADY_DEFINED +#else +#define yyset_lineno wxparserset_lineno +#endif + +#ifdef yywrap +#define wxparserwrap_ALREADY_DEFINED +#else +#define yywrap wxparserwrap +#endif + +#ifdef yyalloc +#define wxparseralloc_ALREADY_DEFINED +#else +#define yyalloc wxparseralloc +#endif + +#ifdef yyrealloc +#define wxparserrealloc_ALREADY_DEFINED +#else +#define yyrealloc wxparserrealloc +#endif + +#ifdef yyfree +#define wxparserfree_ALREADY_DEFINED +#else +#define yyfree wxparserfree +#endif + +#ifdef yytext +#define wxparsertext_ALREADY_DEFINED +#else +#define yytext wxparsertext +#endif + +#ifdef yyleng +#define wxparserleng_ALREADY_DEFINED +#else +#define yyleng wxparserleng +#endif + +#ifdef yyin +#define wxparserin_ALREADY_DEFINED +#else +#define yyin wxparserin +#endif + +#ifdef yyout +#define wxparserout_ALREADY_DEFINED +#else +#define yyout wxparserout +#endif + +#ifdef yy_flex_debug +#define wxparser_flex_debug_ALREADY_DEFINED +#else +#define yy_flex_debug wxparser_flex_debug +#endif + +#ifdef yylineno +#define wxparserlineno_ALREADY_DEFINED +#else +#define yylineno wxparserlineno +#endif + /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ @@ -321,7 +580,7 @@ void yyfree ( void * ); /* Begin user sect3 */ -#define yywrap() (/*CONSTCOND*/1) +#define wxparserwrap() (/*CONSTCOND*/1) #define YY_SKIP_YYWRAP typedef flex_uint8_t YY_CHAR; diff --git a/Source/Parser/wp_parser.lex.h b/Source/Parser/wp_parser.lex.h index 8ed383d3735..31321f12f0e 100644 --- a/Source/Parser/wp_parser.lex.h +++ b/Source/Parser/wp_parser.lex.h @@ -1,6 +1,6 @@ -#ifndef yyHEADER_H -#define yyHEADER_H 1 -#define yyIN_HEADER 1 +#ifndef wxparserHEADER_H +#define wxparserHEADER_H 1 +#define wxparserIN_HEADER 1 #define YY_INT_ALIGNED short int @@ -14,6 +14,240 @@ #define FLEX_BETA #endif +#ifdef yy_create_buffer +#define wxparser_create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer wxparser_create_buffer +#endif + +#ifdef yy_delete_buffer +#define wxparser_delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer wxparser_delete_buffer +#endif + +#ifdef yy_scan_buffer +#define wxparser_scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer wxparser_scan_buffer +#endif + +#ifdef yy_scan_string +#define wxparser_scan_string_ALREADY_DEFINED +#else +#define yy_scan_string wxparser_scan_string +#endif + +#ifdef yy_scan_bytes +#define wxparser_scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes wxparser_scan_bytes +#endif + +#ifdef yy_init_buffer +#define wxparser_init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer wxparser_init_buffer +#endif + +#ifdef yy_flush_buffer +#define wxparser_flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer wxparser_flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define wxparser_load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state wxparser_load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define wxparser_switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer wxparser_switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define wxparserpush_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state wxparserpush_buffer_state +#endif + +#ifdef yypop_buffer_state +#define wxparserpop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state wxparserpop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define wxparserensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack wxparserensure_buffer_stack +#endif + +#ifdef yylex +#define wxparserlex_ALREADY_DEFINED +#else +#define yylex wxparserlex +#endif + +#ifdef yyrestart +#define wxparserrestart_ALREADY_DEFINED +#else +#define yyrestart wxparserrestart +#endif + +#ifdef yylex_init +#define wxparserlex_init_ALREADY_DEFINED +#else +#define yylex_init wxparserlex_init +#endif + +#ifdef yylex_init_extra +#define wxparserlex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra wxparserlex_init_extra +#endif + +#ifdef yylex_destroy +#define wxparserlex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy wxparserlex_destroy +#endif + +#ifdef yyget_debug +#define wxparserget_debug_ALREADY_DEFINED +#else +#define yyget_debug wxparserget_debug +#endif + +#ifdef yyset_debug +#define wxparserset_debug_ALREADY_DEFINED +#else +#define yyset_debug wxparserset_debug +#endif + +#ifdef yyget_extra +#define wxparserget_extra_ALREADY_DEFINED +#else +#define yyget_extra wxparserget_extra +#endif + +#ifdef yyset_extra +#define wxparserset_extra_ALREADY_DEFINED +#else +#define yyset_extra wxparserset_extra +#endif + +#ifdef yyget_in +#define wxparserget_in_ALREADY_DEFINED +#else +#define yyget_in wxparserget_in +#endif + +#ifdef yyset_in +#define wxparserset_in_ALREADY_DEFINED +#else +#define yyset_in wxparserset_in +#endif + +#ifdef yyget_out +#define wxparserget_out_ALREADY_DEFINED +#else +#define yyget_out wxparserget_out +#endif + +#ifdef yyset_out +#define wxparserset_out_ALREADY_DEFINED +#else +#define yyset_out wxparserset_out +#endif + +#ifdef yyget_leng +#define wxparserget_leng_ALREADY_DEFINED +#else +#define yyget_leng wxparserget_leng +#endif + +#ifdef yyget_text +#define wxparserget_text_ALREADY_DEFINED +#else +#define yyget_text wxparserget_text +#endif + +#ifdef yyget_lineno +#define wxparserget_lineno_ALREADY_DEFINED +#else +#define yyget_lineno wxparserget_lineno +#endif + +#ifdef yyset_lineno +#define wxparserset_lineno_ALREADY_DEFINED +#else +#define yyset_lineno wxparserset_lineno +#endif + +#ifdef yywrap +#define wxparserwrap_ALREADY_DEFINED +#else +#define yywrap wxparserwrap +#endif + +#ifdef yyalloc +#define wxparseralloc_ALREADY_DEFINED +#else +#define yyalloc wxparseralloc +#endif + +#ifdef yyrealloc +#define wxparserrealloc_ALREADY_DEFINED +#else +#define yyrealloc wxparserrealloc +#endif + +#ifdef yyfree +#define wxparserfree_ALREADY_DEFINED +#else +#define yyfree wxparserfree +#endif + +#ifdef yytext +#define wxparsertext_ALREADY_DEFINED +#else +#define yytext wxparsertext +#endif + +#ifdef yyleng +#define wxparserleng_ALREADY_DEFINED +#else +#define yyleng wxparserleng +#endif + +#ifdef yyin +#define wxparserin_ALREADY_DEFINED +#else +#define yyin wxparserin +#endif + +#ifdef yyout +#define wxparserout_ALREADY_DEFINED +#else +#define yyout wxparserout +#endif + +#ifdef yy_flex_debug +#define wxparser_flex_debug_ALREADY_DEFINED +#else +#define yy_flex_debug wxparser_flex_debug +#endif + +#ifdef yylineno +#define wxparserlineno_ALREADY_DEFINED +#else +#define yylineno wxparserlineno +#endif + /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ @@ -199,7 +433,7 @@ void yyfree ( void * ); /* Begin user sect3 */ -#define yywrap() (/*CONSTCOND*/1) +#define wxparserwrap() (/*CONSTCOND*/1) #define YY_SKIP_YYWRAP extern int yylineno; @@ -320,150 +554,150 @@ extern int yylex (void); #undef YY_DECL #endif -#ifndef yy_create_buffer_ALREADY_DEFINED +#ifndef wxparser_create_buffer_ALREADY_DEFINED #undef yy_create_buffer #endif -#ifndef yy_delete_buffer_ALREADY_DEFINED +#ifndef wxparser_delete_buffer_ALREADY_DEFINED #undef yy_delete_buffer #endif -#ifndef yy_scan_buffer_ALREADY_DEFINED +#ifndef wxparser_scan_buffer_ALREADY_DEFINED #undef yy_scan_buffer #endif -#ifndef yy_scan_string_ALREADY_DEFINED +#ifndef wxparser_scan_string_ALREADY_DEFINED #undef yy_scan_string #endif -#ifndef yy_scan_bytes_ALREADY_DEFINED +#ifndef wxparser_scan_bytes_ALREADY_DEFINED #undef yy_scan_bytes #endif -#ifndef yy_init_buffer_ALREADY_DEFINED +#ifndef wxparser_init_buffer_ALREADY_DEFINED #undef yy_init_buffer #endif -#ifndef yy_flush_buffer_ALREADY_DEFINED +#ifndef wxparser_flush_buffer_ALREADY_DEFINED #undef yy_flush_buffer #endif -#ifndef yy_load_buffer_state_ALREADY_DEFINED +#ifndef wxparser_load_buffer_state_ALREADY_DEFINED #undef yy_load_buffer_state #endif -#ifndef yy_switch_to_buffer_ALREADY_DEFINED +#ifndef wxparser_switch_to_buffer_ALREADY_DEFINED #undef yy_switch_to_buffer #endif -#ifndef yypush_buffer_state_ALREADY_DEFINED +#ifndef wxparserpush_buffer_state_ALREADY_DEFINED #undef yypush_buffer_state #endif -#ifndef yypop_buffer_state_ALREADY_DEFINED +#ifndef wxparserpop_buffer_state_ALREADY_DEFINED #undef yypop_buffer_state #endif -#ifndef yyensure_buffer_stack_ALREADY_DEFINED +#ifndef wxparserensure_buffer_stack_ALREADY_DEFINED #undef yyensure_buffer_stack #endif -#ifndef yylex_ALREADY_DEFINED +#ifndef wxparserlex_ALREADY_DEFINED #undef yylex #endif -#ifndef yyrestart_ALREADY_DEFINED +#ifndef wxparserrestart_ALREADY_DEFINED #undef yyrestart #endif -#ifndef yylex_init_ALREADY_DEFINED +#ifndef wxparserlex_init_ALREADY_DEFINED #undef yylex_init #endif -#ifndef yylex_init_extra_ALREADY_DEFINED +#ifndef wxparserlex_init_extra_ALREADY_DEFINED #undef yylex_init_extra #endif -#ifndef yylex_destroy_ALREADY_DEFINED +#ifndef wxparserlex_destroy_ALREADY_DEFINED #undef yylex_destroy #endif -#ifndef yyget_debug_ALREADY_DEFINED +#ifndef wxparserget_debug_ALREADY_DEFINED #undef yyget_debug #endif -#ifndef yyset_debug_ALREADY_DEFINED +#ifndef wxparserset_debug_ALREADY_DEFINED #undef yyset_debug #endif -#ifndef yyget_extra_ALREADY_DEFINED +#ifndef wxparserget_extra_ALREADY_DEFINED #undef yyget_extra #endif -#ifndef yyset_extra_ALREADY_DEFINED +#ifndef wxparserset_extra_ALREADY_DEFINED #undef yyset_extra #endif -#ifndef yyget_in_ALREADY_DEFINED +#ifndef wxparserget_in_ALREADY_DEFINED #undef yyget_in #endif -#ifndef yyset_in_ALREADY_DEFINED +#ifndef wxparserset_in_ALREADY_DEFINED #undef yyset_in #endif -#ifndef yyget_out_ALREADY_DEFINED +#ifndef wxparserget_out_ALREADY_DEFINED #undef yyget_out #endif -#ifndef yyset_out_ALREADY_DEFINED +#ifndef wxparserset_out_ALREADY_DEFINED #undef yyset_out #endif -#ifndef yyget_leng_ALREADY_DEFINED +#ifndef wxparserget_leng_ALREADY_DEFINED #undef yyget_leng #endif -#ifndef yyget_text_ALREADY_DEFINED +#ifndef wxparserget_text_ALREADY_DEFINED #undef yyget_text #endif -#ifndef yyget_lineno_ALREADY_DEFINED +#ifndef wxparserget_lineno_ALREADY_DEFINED #undef yyget_lineno #endif -#ifndef yyset_lineno_ALREADY_DEFINED +#ifndef wxparserset_lineno_ALREADY_DEFINED #undef yyset_lineno #endif -#ifndef yyget_column_ALREADY_DEFINED +#ifndef wxparserget_column_ALREADY_DEFINED #undef yyget_column #endif -#ifndef yyset_column_ALREADY_DEFINED +#ifndef wxparserset_column_ALREADY_DEFINED #undef yyset_column #endif -#ifndef yywrap_ALREADY_DEFINED +#ifndef wxparserwrap_ALREADY_DEFINED #undef yywrap #endif -#ifndef yyget_lval_ALREADY_DEFINED +#ifndef wxparserget_lval_ALREADY_DEFINED #undef yyget_lval #endif -#ifndef yyset_lval_ALREADY_DEFINED +#ifndef wxparserset_lval_ALREADY_DEFINED #undef yyset_lval #endif -#ifndef yyget_lloc_ALREADY_DEFINED +#ifndef wxparserget_lloc_ALREADY_DEFINED #undef yyget_lloc #endif -#ifndef yyset_lloc_ALREADY_DEFINED +#ifndef wxparserset_lloc_ALREADY_DEFINED #undef yyset_lloc #endif -#ifndef yyalloc_ALREADY_DEFINED +#ifndef wxparseralloc_ALREADY_DEFINED #undef yyalloc #endif -#ifndef yyrealloc_ALREADY_DEFINED +#ifndef wxparserrealloc_ALREADY_DEFINED #undef yyrealloc #endif -#ifndef yyfree_ALREADY_DEFINED +#ifndef wxparserfree_ALREADY_DEFINED #undef yyfree #endif -#ifndef yytext_ALREADY_DEFINED +#ifndef wxparsertext_ALREADY_DEFINED #undef yytext #endif -#ifndef yyleng_ALREADY_DEFINED +#ifndef wxparserleng_ALREADY_DEFINED #undef yyleng #endif -#ifndef yyin_ALREADY_DEFINED +#ifndef wxparserin_ALREADY_DEFINED #undef yyin #endif -#ifndef yyout_ALREADY_DEFINED +#ifndef wxparserout_ALREADY_DEFINED #undef yyout #endif -#ifndef yy_flex_debug_ALREADY_DEFINED +#ifndef wxparser_flex_debug_ALREADY_DEFINED #undef yy_flex_debug #endif -#ifndef yylineno_ALREADY_DEFINED +#ifndef wxparserlineno_ALREADY_DEFINED #undef yylineno #endif -#ifndef yytables_fload_ALREADY_DEFINED +#ifndef wxparsertables_fload_ALREADY_DEFINED #undef yytables_fload #endif -#ifndef yytables_destroy_ALREADY_DEFINED +#ifndef wxparsertables_destroy_ALREADY_DEFINED #undef yytables_destroy #endif -#ifndef yyTABLES_NAME_ALREADY_DEFINED +#ifndef wxparserTABLES_NAME_ALREADY_DEFINED #undef yyTABLES_NAME #endif -#undef yyIN_HEADER -#endif /* yyHEADER_H */ +#undef wxparserIN_HEADER +#endif /* wxparserHEADER_H */ From 2862bdf37c145963991e430483b0647bea8f16fe Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Mon, 11 Jan 2021 12:53:08 -0800 Subject: [PATCH 3/5] Flex Prefix: Update Parser Usage --- Source/Parser/wp_parser_c.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Parser/wp_parser_c.cpp b/Source/Parser/wp_parser_c.cpp index ad7d5ec510e..311c562ac88 100644 --- a/Source/Parser/wp_parser_c.cpp +++ b/Source/Parser/wp_parser_c.cpp @@ -5,9 +5,9 @@ struct wp_parser* wp_c_parser_new (char const* body) { - YY_BUFFER_STATE buffer = yy_scan_string(body); + YY_BUFFER_STATE buffer = wxparser_scan_string(body); yyparse(); struct wp_parser* parser = wp_parser_new(); - yy_delete_buffer(buffer); + wxparser_delete_buffer(buffer); return parser; } From 0fb147285373812fd9176bc7d189bcc81ca34573 Mon Sep 17 00:00:00 2001 From: Weiqun Zhang Date: Mon, 11 Jan 2021 14:57:31 -0800 Subject: [PATCH 4/5] Parser: Fix prefixes --- Source/Parser/wp_parser.l | 64 +++++++++++++++++------------------ Source/Parser/wp_parser.y | 3 +- Source/Parser/wp_parser_c.cpp | 2 +- Source/Parser/wp_parser_y.cpp | 4 +-- Source/Parser/wp_parser_y.h | 2 +- 5 files changed, 38 insertions(+), 37 deletions(-) diff --git a/Source/Parser/wp_parser.l b/Source/Parser/wp_parser.l index cfca24ad9b7..0c76f4e4ad7 100644 --- a/Source/Parser/wp_parser.l +++ b/Source/Parser/wp_parser.l @@ -26,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 */ "//".* @@ -73,6 +73,6 @@ EXP ([Ee][-+]?[0-9]+) "\n" { return EOL; } /* everything else */ -. { yyerror("Unknown character %c\n", *yytext); } +. { wxparsererror("Unknown character %c\n", *wxparsertext); } %% diff --git a/Source/Parser/wp_parser.y b/Source/Parser/wp_parser.y index 809dbfa5e55..aabe6ff467b 100644 --- a/Source/Parser/wp_parser.y +++ b/Source/Parser/wp_parser.y @@ -4,7 +4,7 @@ #include #include #include "wp_parser_y.h" - int yylex (void); + int wxparserlex (void); %} /* We do not need to make this reentrant safe, because we use flex and @@ -12,6 +12,7 @@ thread safe. */ /*%define api.pure full */ +%define api.prefix {wxparser} /* This is the type returned by functions wp_new* declared in wp_parser_y.h. See also bison rules at the end of this file. diff --git a/Source/Parser/wp_parser_c.cpp b/Source/Parser/wp_parser_c.cpp index 311c562ac88..fe217fdcc83 100644 --- a/Source/Parser/wp_parser_c.cpp +++ b/Source/Parser/wp_parser_c.cpp @@ -6,7 +6,7 @@ struct wp_parser* wp_c_parser_new (char const* body) { YY_BUFFER_STATE buffer = wxparser_scan_string(body); - yyparse(); + wxparserparse(); struct wp_parser* parser = wp_parser_new(); wxparser_delete_buffer(buffer); return parser; diff --git a/Source/Parser/wp_parser_y.cpp b/Source/Parser/wp_parser_y.cpp index 0095d0170b1..9783522015e 100644 --- a/Source/Parser/wp_parser_y.cpp +++ b/Source/Parser/wp_parser_y.cpp @@ -71,7 +71,7 @@ wp_newf2 (enum wp_f2_t ftype, struct wp_node* l, struct wp_node* r) } void -yyerror (char const *s, ...) +wxparsererror (char const *s, ...) { std::va_list vl; va_start(vl, s); @@ -916,7 +916,7 @@ wp_ast_depth (struct wp_node* node, int* n) case WP_DIV_PP: break; default: - yyerror("wp_ast_depth: unknown node type %d\n", node->type); + wxparsererror("wp_ast_depth: unknown node type %d\n", node->type); exit(1); } *n += std::max(nl,nr) + 1; diff --git a/Source/Parser/wp_parser_y.h b/Source/Parser/wp_parser_y.h index dd02fb988c9..1a66ac944f3 100644 --- a/Source/Parser/wp_parser_y.h +++ b/Source/Parser/wp_parser_y.h @@ -134,7 +134,7 @@ struct wp_node* wp_newf1 (enum wp_f1_t ftype, struct wp_node* l); struct wp_node* wp_newf2 (enum wp_f2_t ftype, struct wp_node* l, struct wp_node* r); -void yyerror (char const *s, ...); +void wxparsererror (char const *s, ...); /*******************************************************************/ From 46f5bca3dee26d27722c01e5dcad7a63b51ad619 Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Mon, 11 Jan 2021 15:05:29 -0800 Subject: [PATCH 5/5] Parser: Flex Rebuild --- Source/Parser/wp_parser.lex.cpp | 64 ++++++++++++++-------------- Source/Parser/wp_parser.tab.cpp | 74 ++++++++++++++++++++------------- Source/Parser/wp_parser.tab.h | 42 +++++++++++-------- 3 files changed, 102 insertions(+), 78 deletions(-) diff --git a/Source/Parser/wp_parser.lex.cpp b/Source/Parser/wp_parser.lex.cpp index a531b7af1e1..308b31c7722 100644 --- a/Source/Parser/wp_parser.lex.cpp +++ b/Source/Parser/wp_parser.lex.cpp @@ -1060,128 +1060,128 @@ case 9: case 10: case 11: YY_RULE_SETUP -{ return yytext[0]; } /* simply pass through */ +{ return wxparsertext[0]; } /* simply pass through */ YY_BREAK -/* 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 */ case 12: YY_RULE_SETUP -{ yylval.f1 = WP_SQRT; return F1; } +{ wxparserlval.f1 = WP_SQRT; return F1; } YY_BREAK case 13: YY_RULE_SETUP -{ yylval.f1 = WP_EXP; return F1; } +{ wxparserlval.f1 = WP_EXP; return F1; } YY_BREAK case 14: YY_RULE_SETUP -{ yylval.f1 = WP_LOG; return F1; } +{ wxparserlval.f1 = WP_LOG; return F1; } YY_BREAK case 15: YY_RULE_SETUP -{ yylval.f1 = WP_LOG10; return F1; } +{ wxparserlval.f1 = WP_LOG10; return F1; } YY_BREAK case 16: YY_RULE_SETUP -{ yylval.f1 = WP_SIN; return F1; } +{ wxparserlval.f1 = WP_SIN; return F1; } YY_BREAK case 17: YY_RULE_SETUP -{ yylval.f1 = WP_COS; return F1; } +{ wxparserlval.f1 = WP_COS; return F1; } YY_BREAK case 18: YY_RULE_SETUP -{ yylval.f1 = WP_TAN; return F1; } +{ wxparserlval.f1 = WP_TAN; return F1; } YY_BREAK case 19: YY_RULE_SETUP -{ yylval.f1 = WP_ASIN; return F1; } +{ wxparserlval.f1 = WP_ASIN; return F1; } YY_BREAK case 20: YY_RULE_SETUP -{ yylval.f1 = WP_ACOS; return F1; } +{ wxparserlval.f1 = WP_ACOS; return F1; } YY_BREAK case 21: YY_RULE_SETUP -{ yylval.f1 = WP_ATAN; return F1; } +{ wxparserlval.f1 = WP_ATAN; return F1; } YY_BREAK case 22: YY_RULE_SETUP -{ yylval.f1 = WP_SINH; return F1; } +{ wxparserlval.f1 = WP_SINH; return F1; } YY_BREAK case 23: YY_RULE_SETUP -{ yylval.f1 = WP_COSH; return F1; } +{ wxparserlval.f1 = WP_COSH; return F1; } YY_BREAK case 24: YY_RULE_SETUP -{ yylval.f1 = WP_TANH; return F1; } +{ wxparserlval.f1 = WP_TANH; return F1; } YY_BREAK case 25: YY_RULE_SETUP -{ yylval.f1 = WP_ABS; return F1; } +{ wxparserlval.f1 = WP_ABS; return F1; } YY_BREAK case 26: YY_RULE_SETUP -{ yylval.f1 = WP_ABS; return F1; } +{ wxparserlval.f1 = WP_ABS; return F1; } YY_BREAK case 27: YY_RULE_SETUP -{ yylval.f2 = WP_POW; return POW;} +{ wxparserlval.f2 = WP_POW; return POW;} YY_BREAK case 28: YY_RULE_SETUP -{ yylval.f2 = WP_POW; return POW;} +{ wxparserlval.f2 = WP_POW; return POW;} YY_BREAK case 29: YY_RULE_SETUP -{ yylval.f2 = WP_GEQ; return GEQ;} +{ wxparserlval.f2 = WP_GEQ; return GEQ;} YY_BREAK case 30: YY_RULE_SETUP -{ yylval.f2 = WP_LEQ; return LEQ;} +{ wxparserlval.f2 = WP_LEQ; return LEQ;} YY_BREAK case 31: YY_RULE_SETUP -{ yylval.f2 = WP_EQ; return EQ;} +{ wxparserlval.f2 = WP_EQ; return EQ;} YY_BREAK case 32: YY_RULE_SETUP -{ yylval.f2 = WP_NEQ; return NEQ;} +{ wxparserlval.f2 = WP_NEQ; return NEQ;} YY_BREAK case 33: YY_RULE_SETUP -{ yylval.f2 = WP_AND; return AND;} +{ wxparserlval.f2 = WP_AND; return AND;} YY_BREAK case 34: YY_RULE_SETUP -{ yylval.f2 = WP_OR; return OR;} +{ wxparserlval.f2 = WP_OR; return OR;} YY_BREAK case 35: YY_RULE_SETUP -{ yylval.f2 = WP_POW; return F2; } +{ wxparserlval.f2 = WP_POW; return F2; } YY_BREAK case 36: YY_RULE_SETUP -{ yylval.f2 = WP_HEAVISIDE; return F2; } +{ wxparserlval.f2 = WP_HEAVISIDE; return F2; } YY_BREAK case 37: YY_RULE_SETUP -{ yylval.f2 = WP_MIN; return F2; } +{ wxparserlval.f2 = WP_MIN; return F2; } YY_BREAK case 38: YY_RULE_SETUP -{ yylval.f2 = WP_MAX; return F2; } +{ wxparserlval.f2 = WP_MAX; return F2; } YY_BREAK /* We use SYMBOL to hold variables and constants */ case 39: YY_RULE_SETUP -{ yylval.s = wp_makesymbol(yytext); return SYMBOL; } +{ wxparserlval.s = wp_makesymbol(wxparsertext); return SYMBOL; } YY_BREAK /* Number */ case 40: case 41: YY_RULE_SETUP -{ yylval.d = atof(yytext); return NUMBER; } +{ wxparserlval.d = atof(wxparsertext); return NUMBER; } YY_BREAK /* Special characters */ case 42: @@ -1205,7 +1205,7 @@ YY_RULE_SETUP /* everything else */ case 46: YY_RULE_SETUP -{ yyerror("Unknown character %c\n", *yytext); } +{ wxparsererror("Unknown character %c\n", *wxparsertext); } YY_BREAK case 47: YY_RULE_SETUP diff --git a/Source/Parser/wp_parser.tab.cpp b/Source/Parser/wp_parser.tab.cpp index 6b276e89fb4..4870395b75f 100644 --- a/Source/Parser/wp_parser.tab.cpp +++ b/Source/Parser/wp_parser.tab.cpp @@ -62,8 +62,16 @@ /* Pull parsers. */ #define YYPULL 1 - - +/* Substitute the type names. */ +#define YYSTYPE WXPARSERSTYPE +/* Substitute the variable and function names. */ +#define yyparse wxparserparse +#define yylex wxparserlex +#define yyerror wxparsererror +#define yydebug wxparserdebug +#define yynerrs wxparsernerrs +#define yylval wxparserlval +#define yychar wxparserchar /* First part of user prologue. */ @@ -71,7 +79,7 @@ #include #include #include "wp_parser_y.h" - int yylex (void); + int wxparserlex (void); # ifndef YY_CAST @@ -105,20 +113,28 @@ /* Use api.header.include to #include this header instead of duplicating it here. */ -#ifndef YY_YY_WP_PARSER_TAB_H_INCLUDED -# define YY_YY_WP_PARSER_TAB_H_INCLUDED +#ifndef YY_WXPARSER_WP_PARSER_TAB_H_INCLUDED +# define YY_WXPARSER_WP_PARSER_TAB_H_INCLUDED /* Debug traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif +#ifndef WXPARSERDEBUG +# if defined YYDEBUG #if YYDEBUG -extern int yydebug; +# define WXPARSERDEBUG 1 +# else +# define WXPARSERDEBUG 0 +# endif +# else /* ! defined YYDEBUG */ +# define WXPARSERDEBUG 0 +# endif /* ! defined YYDEBUG */ +#endif /* ! defined WXPARSERDEBUG */ +#if WXPARSERDEBUG +extern int wxparserdebug; #endif /* Token type. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - enum yytokentype +#ifndef WXPARSERTOKENTYPE +# define WXPARSERTOKENTYPE + enum wxparsertokentype { NODE = 258, NUMBER = 259, @@ -139,8 +155,8 @@ extern int yydebug; #endif /* Value type. */ -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -union YYSTYPE +#if ! defined WXPARSERSTYPE && ! defined WXPARSERSTYPE_IS_DECLARED +union WXPARSERSTYPE { struct wp_node* n; @@ -151,17 +167,17 @@ union YYSTYPE }; -typedef union YYSTYPE YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define YYSTYPE_IS_DECLARED 1 +typedef union WXPARSERSTYPE WXPARSERSTYPE; +# define WXPARSERSTYPE_IS_TRIVIAL 1 +# define WXPARSERSTYPE_IS_DECLARED 1 #endif -extern YYSTYPE yylval; +extern WXPARSERSTYPE wxparserlval; -int yyparse (void); +int wxparserparse (void); -#endif /* !YY_YY_WP_PARSER_TAB_H_INCLUDED */ +#endif /* !YY_WXPARSER_WP_PARSER_TAB_H_INCLUDED */ @@ -406,7 +422,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + || (defined WXPARSERSTYPE_IS_TRIVIAL && WXPARSERSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc @@ -521,17 +537,17 @@ static const yytype_int8 yytranslate[] = 16, 24, 25 }; -#if YYDEBUG +#if WXPARSERDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int8 yyrline[] = { - 0, 67, 67, 68, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96 + 0, 68, 68, 69, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97 }; #endif -#if YYDEBUG || YYERROR_VERBOSE || 0 +#if WXPARSERDEBUG || YYERROR_VERBOSE || 0 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = @@ -712,7 +728,7 @@ static const yytype_int8 yyr2[] = /* Enable debugging if requested. */ -#if YYDEBUG +#if WXPARSERDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ @@ -835,12 +851,12 @@ do { \ /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; -#else /* !YYDEBUG */ +#else /* !WXPARSERDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ +#endif /* !WXPARSERDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ diff --git a/Source/Parser/wp_parser.tab.h b/Source/Parser/wp_parser.tab.h index 89f1f341b0f..7ea4d92a79b 100644 --- a/Source/Parser/wp_parser.tab.h +++ b/Source/Parser/wp_parser.tab.h @@ -34,20 +34,28 @@ /* Undocumented macros, especially those whose name start with YY_, are private implementation details. Do not rely on them. */ -#ifndef YY_YY_WP_PARSER_TAB_H_INCLUDED -# define YY_YY_WP_PARSER_TAB_H_INCLUDED +#ifndef YY_WXPARSER_WP_PARSER_TAB_H_INCLUDED +# define YY_WXPARSER_WP_PARSER_TAB_H_INCLUDED /* Debug traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif +#ifndef WXPARSERDEBUG +# if defined YYDEBUG #if YYDEBUG -extern int yydebug; +# define WXPARSERDEBUG 1 +# else +# define WXPARSERDEBUG 0 +# endif +# else /* ! defined YYDEBUG */ +# define WXPARSERDEBUG 0 +# endif /* ! defined YYDEBUG */ +#endif /* ! defined WXPARSERDEBUG */ +#if WXPARSERDEBUG +extern int wxparserdebug; #endif /* Token type. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - enum yytokentype +#ifndef WXPARSERTOKENTYPE +# define WXPARSERTOKENTYPE + enum wxparsertokentype { NODE = 258, NUMBER = 259, @@ -68,8 +76,8 @@ extern int yydebug; #endif /* Value type. */ -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -union YYSTYPE +#if ! defined WXPARSERSTYPE && ! defined WXPARSERSTYPE_IS_DECLARED +union WXPARSERSTYPE { struct wp_node* n; @@ -80,14 +88,14 @@ union YYSTYPE }; -typedef union YYSTYPE YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define YYSTYPE_IS_DECLARED 1 +typedef union WXPARSERSTYPE WXPARSERSTYPE; +# define WXPARSERSTYPE_IS_TRIVIAL 1 +# define WXPARSERSTYPE_IS_DECLARED 1 #endif -extern YYSTYPE yylval; +extern WXPARSERSTYPE wxparserlval; -int yyparse (void); +int wxparserparse (void); -#endif /* !YY_YY_WP_PARSER_TAB_H_INCLUDED */ +#endif /* !YY_WXPARSER_WP_PARSER_TAB_H_INCLUDED */