From: Akim Demaille Date: Thu, 28 Jun 2012 13:29:18 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/maint' X-Git-Tag: v2.7.90~417 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/7aaaad6c6dc0fae412d608dcf20a3977d8902cd1?hp=22b081deb7ab1d0ec7a279e5213fa7fdc2c85207 Merge remote-tracking branch 'origin/maint' * origin/maint: tests: use the generalized default yylex. tests: AT_YYERROR_DEFINE: prepare for list of ints. skeletons: no longer define YYLSP_NEEDED. c++: do not export YYTOKEN_TABLE and YYERROR_VERBOSE. Conflicts: data/c.m4 data/glr.cc data/lalr1.cc doc/bison.texi tests/regression.at --- diff --git a/NEWS b/NEWS index 41e68519..e1373657 100644 --- a/NEWS +++ b/NEWS @@ -124,14 +124,16 @@ GNU Bison NEWS generated for C supprt ISO C90, and are tested with ISO C99 and ISO C11 compilers. -*** Deprecated features +*** Features deprecated since Bison 1.875 - The definitions of yystype and yyltype will be removed, as announced since - Bison 1.875. Use YYSTYPE and YYLTYPE only. + The definitions of yystype and yyltype will be removed; use YYSTYPE and + YYLTYPE. - YYPARSE_PARAM and YYLEX_PARAM, which were deprecated in favor of - %parse-param and %lex-param (introduced in Bison 1.875), will no longer be - supported. + YYPARSE_PARAM and YYLEX_PARAM, deprecated in favor of %parse-param and + %lex-param, will no longer be supported. + + Support for the preprocessor symbol YYERROR_VERBOSE will be removed, use + %error-verbose. *** The generated header will be included (yacc.c) @@ -141,9 +143,9 @@ GNU Bison NEWS because existing versions of ylwrap (e.g., Automake 1.12.1) do not support it. -** Headers (yacc.c, glr.c, glr.cc) +** Headers -*** Guards +*** Guards (yacc.c, glr.c, glr.cc) The generated headers are now guarded, as is already the case for C++ parsers (lalr1.cc). For intance, with --defines=foo.h: @@ -153,7 +155,7 @@ GNU Bison NEWS ... #endif /* !YY_FOO_H */ -*** New declarations +*** New declarations (yacc.c, glr.c) The generated header now declares yydebug and yyparse. Both honor --name-prefix=bar_, and yield @@ -168,6 +170,17 @@ GNU Bison NEWS in order to facilitate the inclusion of several parser headers inside a single compilation unit. +*** Exported symbols in C++ + + The symbols YYTOKEN_TABLE and YYERROR_VERBOSE, which were defined in the + header, are removed, as they prevent the possibility of including several + generated headers from a single compilation unit. + +*** YYLSP_NEEDED + + For the same reasons, the undocumented and unused macro YYLSP_NEEDED is no + longer defined. + * Noteworthy changes in release 2.5.1 (2012-06-05) [stable] ** Future changes: diff --git a/TODO b/TODO index 21ef4b91..4f628a20 100644 --- a/TODO +++ b/TODO @@ -126,12 +126,6 @@ The code bw glr.c and yacc.c is really alike, we can certainly factor some parts. -* Yacc.c: CPP Macros - -Do some people use YYPURE, YYLSP_NEEDED like we do in the test suite? -They should not: it is not documented. But if they need to, let's -find something clean (not like YYLSP_NEEDED...). - * Report ** Figures diff --git a/data/bison.m4 b/data/bison.m4 index 37bc012f..5fc4f557 100644 --- a/data/bison.m4 +++ b/data/bison.m4 @@ -317,9 +317,9 @@ m4_define([b4_define_flag_if], # _b4_define_flag_if($1, $2, FLAG) # -------------------------------- -# This macro works around the impossibility to define macros -# inside macros, because issuing `[$1]' is not possible in M4 :(. -# This sucks hard, GNU M4 should really provide M5 like $$1. +# Work around the impossibility to define macros inside macros, +# because issuing `[$1]' is not possible in M4. GNU M4 should provide +# $$1 a la M5/TeX. m4_define([_b4_define_flag_if], [m4_if([$1$2], $[1]$[2], [], [m4_fatal([$0: Invalid arguments: $@])])dnl @@ -333,8 +333,12 @@ m4_define([b4_$3_if], b4_define_flag_if([defines]) # Whether headers are requested. b4_define_flag_if([glr]) # Whether a GLR parser is requested. b4_define_flag_if([nondeterministic]) # Whether conflicts should be handled. +b4_define_flag_if([token_table]) # Whether yytoken_table is demanded. b4_define_flag_if([yacc]) # Whether POSIX Yacc is emulated. +# yytoken_table is needed to support verbose errors. +b4_error_verbose_if([m4_define([b4_token_table_flag], [1])]) + ## --------- ## ## Symbols. ## diff --git a/data/c.m4 b/data/c.m4 index 9bd82956..f7179e91 100644 --- a/data/c.m4 +++ b/data/c.m4 @@ -100,9 +100,6 @@ m4_define([b4_identification], /* Pull parsers. */ #define YYPULL ]b4_pull_flag])[ - -/* Using locations. */ -#define YYLSP_NEEDED ]b4_locations_if([1], [0])[ ]]) diff --git a/data/glr.c b/data/glr.c index 3d4120cc..2aa12b50 100644 --- a/data/glr.c +++ b/data/glr.c @@ -223,11 +223,6 @@ b4_percent_code_get([[top]])[ # define YYERROR_VERBOSE ]b4_error_verbose_if([1], [0])[ #endif -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE ]b4_token_table[ -#endif - /* Default (constant) value used for initialization for null right-hand sides. Unlike the standard yacc.c template, here we set the default value of $$ to a zeroed-out value. @@ -362,7 +357,7 @@ static const ]b4_int_type_for([b4_rline])[ yyrline[] = }; #endif -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +#if YYDEBUG || YYERROR_VERBOSE || ]b4_token_table_flag[ /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = diff --git a/data/glr.cc b/data/glr.cc index 9a9d7764..c21de402 100644 --- a/data/glr.cc +++ b/data/glr.cc @@ -236,9 +236,6 @@ b4_copyright([Skeleton interface for Bison GLR parsers in C++], ]b4_percent_define_ifdef([[location_type]], [], [[#include "location.hh"]])[ -/* Using locations. */ -#define YYLSP_NEEDED ]b4_locations_if([1], [0])[ - /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG ]b4_parse_trace_if([1], [0])[ diff --git a/data/lalr1.cc b/data/lalr1.cc index b8334e83..7ad30e5c 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -167,19 +167,6 @@ b4_namespace_close])[ # define YYDEBUG ]b4_parse_trace_if([1], [0])[ #endif -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE ]b4_error_verbose_if([1], [0])[ -#endif - -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE ]b4_token_table[ -#endif - ]b4_namespace_open[ /// A Bison parser. @@ -244,18 +231,16 @@ b4_namespace_close])[ static const ]b4_int_type(b4_pact_ninf, b4_pact_ninf)[ yypact_ninf_; static const ]b4_int_type(b4_table_ninf, b4_table_ninf)[ yytable_ninf_; - /* Tables. */ -]b4_parser_tables_declare[ - -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE - /// For a symbol, its name in clear. - static const char* const yytname_[]; -#endif]b4_error_verbose_if([ + // Tables. +]b4_parser_tables_declare[]b4_error_verbose_if([ /// Convert the symbol name \a n to a form suitable for a diagnostic. static std::string yytnamerr_ (const char *n);])[ -#if YYDEBUG +]b4_token_table_if([], [[#if YYDEBUG]])[ + /// For a symbol, its name in clear. + static const char* const yytname_[]; +]b4_token_table_if([[#if YYDEBUG]])[ ]b4_integral_parser_table_declare([rline], [b4_rline], [YYRLINE[YYN] -- Source line where rule number YYN was defined.])[ /// Report on the debug stream that the rule \a r is going to be reduced. @@ -263,10 +248,10 @@ b4_namespace_close])[ /// Print the state stack on the debug stream. virtual void yystack_print_ (); - /* Debugging. */ + // Debugging. int yydebug_; std::ostream* yycdebug_; -#endif +#endif // YYDEBUG /// Convert a scanner token number \a t to a symbol number. static inline token_number_type yytranslate_ (]b4_lex_symbol_if([token_type], [int])[ t); @@ -654,7 +639,7 @@ b4_percent_code_get[]dnl { yydebug_ = l; } -#endif +#endif // YYDEBUG inline ]b4_parser_class_name[::state_type ]b4_parser_class_name[::yy_lr_goto_state_ (state_type yystate, int yylhs) @@ -1099,7 +1084,7 @@ b4_error_verbose_if([state_type yystate, int yytoken], ]b4_parser_tables_define[ -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +]b4_token_table_if([], [[#if YYDEBUG]])[ /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at \a yyntokens_, nonterminals. */ const char* @@ -1107,9 +1092,8 @@ b4_error_verbose_if([state_type yystate, int yytoken], { ]b4_tname[ }; -#endif -#if YYDEBUG +]b4_token_table_if([[#if YYDEBUG]])[ ]b4_integral_parser_table_define([rline], [b4_rline])[ // Print the state stack on the debug stream. diff --git a/data/yacc.c b/data/yacc.c index b57794f0..fe104080 100644 --- a/data/yacc.c +++ b/data/yacc.c @@ -337,11 +337,6 @@ m4_if(b4_prefix, [yy], [], # define YYERROR_VERBOSE ]b4_error_verbose_if([1], [0])[ #endif -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE ]b4_token_table[ -#endif - /* In a future release of Bison, this section will be replaced by #include "@basename(]b4_spec_defines_file[@)". */ ]b4_shared_declarations[ @@ -594,7 +589,7 @@ static const ]b4_int_type_for([b4_translate])[ yytranslate[] = [YYRLINE[YYN] -- Source line where rule number YYN was defined.])[ #endif -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +#if YYDEBUG || YYERROR_VERBOSE || ]b4_token_table_flag[ /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = diff --git a/src/output.c b/src/output.c index 4fe11ccb..723870de 100644 --- a/src/output.c +++ b/src/output.c @@ -142,7 +142,6 @@ escaped_output (FILE *out, char const *string) static void prepare_symbols (void) { - MUSCLE_INSERT_BOOL ("token_table", token_table_flag); MUSCLE_INSERT_INT ("tokens_number", ntokens); MUSCLE_INSERT_INT ("nterms_number", nvars); MUSCLE_INSERT_INT ("symbols_number", nsyms); @@ -682,6 +681,7 @@ prepare (void) MUSCLE_INSERT_BOOL ("nondeterministic_flag", nondeterministic_parser); MUSCLE_INSERT_BOOL ("synclines_flag", !no_lines_flag); MUSCLE_INSERT_BOOL ("tag_seen_flag", tag_seen); + MUSCLE_INSERT_BOOL ("token_table_flag", token_table_flag); MUSCLE_INSERT_BOOL ("use_push_for_pull_flag", use_push_for_pull_flag); MUSCLE_INSERT_BOOL ("yacc_flag", yacc_flag); diff --git a/tests/actions.at b/tests/actions.at index 1f05eb8e..755d6334 100644 --- a/tests/actions.at +++ b/tests/actions.at @@ -51,7 +51,7 @@ exp: { putchar ('0'); } ; %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE(123456789)[ +]AT_YYLEX_DEFINE(["123456789"])[ int main (void) { @@ -116,7 +116,7 @@ sum_of_the_five_previous_values: %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE([])[ +]AT_YYLEX_DEFINE[ int main (void) { @@ -151,7 +151,7 @@ sum: { printf ("%d\n", $0.val + $-1.val + $-2.val); } ; %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE()[ +]AT_YYLEX_DEFINE[ int main (void) { @@ -636,7 +636,7 @@ start: 'a' 'b' 'c' 'd' 'e' { $$ = 'S'; USE(($1, $2, $3, $4, $5)); } ; %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE([abcd], [[yylval = res]])[ +]AT_YYLEX_DEFINE(["abcd"], [[yylval = res]])[ int main (void) @@ -748,7 +748,7 @@ start: %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE([abcdef])[ +]AT_YYLEX_DEFINE(["abcdef"])[ int main (void) @@ -966,7 +966,7 @@ start: %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE([abd], [yylval = res])[ +]AT_YYLEX_DEFINE(["abd"], [yylval = res])[ int main (void) { @@ -1066,7 +1066,7 @@ start: { USE($$); } ; %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE([])[ +]AT_YYLEX_DEFINE[ int main (void) { @@ -1121,7 +1121,7 @@ start: %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE([])[ +]AT_YYLEX_DEFINE[ int main (void) { @@ -1381,7 +1381,7 @@ accept: /*empty*/ { %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE([a])[ +]AT_YYLEX_DEFINE(["a"])[ int main (void) { @@ -1417,7 +1417,7 @@ AT_DATA_GRAMMAR([input.y], # include ]AT_YYERROR_DECLARE[ - static int yylex (YYSTYPE *yylval); + ]AT_YYLEX_DECLARE[ } %% input: @@ -1432,15 +1432,7 @@ exp: %% ]AT_YYERROR_DEFINE[ -static int -yylex (YYSTYPE *yylval) -{ - static char const input[] = "bcd"; - static size_t toknum; - assert (toknum < sizeof input); - *yylval = (toknum + 1) * 10; - return input[toknum++]; -} +]AT_YYLEX_DEFINE(["bcd"], [*lvalp = (toknum + 1) * 10])[ int main (void) diff --git a/tests/conflicts.at b/tests/conflicts.at index 3cced5d7..ed6d6073 100644 --- a/tests/conflicts.at +++ b/tests/conflicts.at @@ -485,7 +485,7 @@ reduce-nonassoc: %prec 'a'; %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE([aaa])[ +]AT_YYLEX_DEFINE(["aaa"])[ int main (void) diff --git a/tests/glr-regression.at b/tests/glr-regression.at index 91dedb89..07c9fe25 100644 --- a/tests/glr-regression.at +++ b/tests/glr-regression.at @@ -383,7 +383,7 @@ B: 'a' { $$ = make_value ("B", "'a'"); } ; %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE([a])[ +]AT_YYLEX_DEFINE(["a"])[ int main (void) @@ -466,7 +466,7 @@ start: ; %% -]AT_YYLEX_DEFINE(a)[ +]AT_YYLEX_DEFINE(["a"])[ ]AT_YYERROR_DEFINE[ int main (void) @@ -519,7 +519,7 @@ start: 'a' | 'a' ; %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE(a)[ +]AT_YYLEX_DEFINE(["a"])[ int main (void) { @@ -834,7 +834,7 @@ start: %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE()[ +]AT_YYLEX_DEFINE[ int main (void) @@ -889,7 +889,7 @@ start: %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE([a])[ +]AT_YYLEX_DEFINE(["a"])[ int main (void) @@ -998,16 +998,9 @@ merge (YYSTYPE s1, YYSTYPE s2) } ]AT_YYERROR_DEFINE[ -static int -yylex (void) -{ - static int const input[] = { PARENT_RHS_AFTER, 0 }; - static size_t toknum; - assert (toknum < sizeof input / sizeof *input); - if (input[toknum] == PARENT_RHS_AFTER) - parent_rhs_after_value = 1; - return input[toknum++]; -} +]AT_YYLEX_DEFINE([{ PARENT_RHS_AFTER, 0 }], + [if (res == PARENT_RHS_AFTER) + parent_rhs_after_value = 1;])[ int main (void) @@ -1117,17 +1110,8 @@ change_lookahead: %% ]AT_YYERROR_DEFINE[ -static int -yylex (void) -{ - static char const input[] = "ab"; - static size_t toknum; - assert (toknum < sizeof input); - yylloc.first_line = yylloc.last_line = 1; - yylloc.first_column = yylloc.last_column = toknum + 1; - yylval.value = input[toknum] + 'A' - 'a'; - return input[toknum++]; -} +]AT_YYLEX_DEFINE(["ab"], + [yylval.value = res + 'A' - 'a'])[ static void print_lookahead (char const *reduction) @@ -1449,7 +1433,7 @@ ambiguity2: ; %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE()[ +]AT_YYLEX_DEFINE[ int main (void) @@ -1507,16 +1491,9 @@ alt2: ; %% ]AT_YYERROR_DEFINE[ -static int -yylex (void) -{ - static char const input[] = "ab"; - static size_t toknum; - assert (toknum < sizeof input); - if (input[toknum] == 'b') - lookahead_value = 1; - return input[toknum++]; -} +]AT_YYLEX_DEFINE(["ab"], + [if (res == 'b') + lookahead_value = 1])[ int main (void) @@ -1663,7 +1640,7 @@ sym3: %merge { $$ = 0; } ; %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE()[ +]AT_YYLEX_DEFINE[ int main (void) { @@ -1709,7 +1686,7 @@ start: b: 'b'; d: /* nada. */; %% -]AT_YYLEX_DEFINE([abc])[ +]AT_YYLEX_DEFINE(["abc"])[ ]AT_YYERROR_DEFINE[ int main (void) diff --git a/tests/local.at b/tests/local.at index d5c73657..ba5a43ff 100644 --- a/tests/local.at +++ b/tests/local.at @@ -296,8 +296,11 @@ $2]) # AT_YYLEX_PROTOTYPE # AT_YYLEX_DECLARE_EXTERN # AT_YYLEX_DECLARE -# AT_YYLEX_DEFINE(INPUT-STRING, [ACTION]) -# --------------------------------------- +# AT_YYLEX_DEFINE([INPUT], [ACTION]) +# ---------------------------------- +# INPUT can be empty, or in double quotes, or a list (in braces). +# ACTION may compute yylval for instance, using "res" as token type, +# and "toknum" as the number of calls to yylex (starting at 0). m4_define([AT_YYLEX_PROTOTYPE], [int AT_NAME_PREFIX[]lex (]AT_YYLEX_FORMALS[)[]dnl ]) @@ -315,7 +318,9 @@ m4_define([AT_YYLEX_DEFINE], static ]AT_YYLEX_PROTOTYPE[ { - static char const input[] = "$1"; + ]m4_bmatch([$1], [^\(".*"\)?$], + [[static char const input[] = ]m4_default([$1], [""])], + [[static int const input[] = ]$1])[; static size_t toknum = 0; int res; ]AT_USE_LEX_ARGS[; diff --git a/tests/push.at b/tests/push.at index 057807dd..d2c09263 100644 --- a/tests/push.at +++ b/tests/push.at @@ -101,7 +101,7 @@ start: ; %% ]AT_YYERROR_DEFINE[ -]m4_if([$1], [[both]], [AT_YYLEX_DEFINE([])])[ +]m4_if([$1], [[both]], [AT_YYLEX_DEFINE])[ int main (void) diff --git a/tests/regression.at b/tests/regression.at index b23cbcfd..91378feb 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -463,15 +463,7 @@ AT_DATA_GRAMMAR([input.y], exp: "a" "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"; %% ]AT_YYERROR_DEFINE[ - -int -yylex (void) -{ - static int called; - if (called++) - abort (); - return SPECIAL; -} +]AT_YYLEX_DEFINE([{ SPECIAL }])[ int main (void) @@ -837,13 +829,11 @@ AT_CLEANUP # so that possible bound checking compilers could check all the skeletons. m4_define([_AT_DATA_DANCER_Y], [AT_DATA_GRAMMAR([dancer.y], -[%{ -static int yylex (AT_LALR1_CC_IF([int *], [void])); -AT_LALR1_CC_IF([#include ], -[#include -#include -]AT_YYERROR_DECLARE[]) -%} +[[%code provides +{ + ]AT_YYERROR_DECLARE[ + ]AT_YYLEX_DECLARE[ +} $1 %token ARROW INVALID NUMBER STRING DATA %defines @@ -888,7 +878,8 @@ member: STRING | INVALID ; %% -AT_YYERROR_DEFINE[ +]AT_YYERROR_DEFINE[ +]AT_YYLEX_DEFINE([":"])[ ]AT_LALR1_CC_IF( [int yyparse () @@ -899,28 +890,14 @@ yyparse () #endif return parser.parse (); } -]) - -#include -static int -yylex (AT_LALR1_CC_IF([int *lval], [void])) -[{ - static int const tokens[] = - { - ':', -1 - }; - static size_t toknum; - ]AT_LALR1_CC_IF([*lval = 0; /* Pacify GCC. */])[ - assert (toknum < sizeof tokens / sizeof *tokens); - return tokens[toknum++]; -}] +])[ int main (void) { return yyparse (); } -]) +]]) ])# _AT_DATA_DANCER_Y @@ -1062,13 +1039,8 @@ start: %printer { fprintf (yyoutput, "PRINTER"); } 'a'; %% - ]AT_YYERROR_DEFINE[ -static int -yylex (void) -{ - return 'a'; -} +]AT_YYLEX_DEFINE(["a"])[ int main (void) @@ -1201,13 +1173,7 @@ sr_conflict: %% ]AT_YYERROR_DEFINE[ -int -yylex (void) -{ - static int const input[] = { 1, 2, 3, 0 }; - static int const *inputp = input; - return *inputp++; -} +]AT_YYLEX_DEFINE([{ 1, 2, 3, 0 }])[ int main (void) @@ -1304,7 +1270,7 @@ syntax_error: /* Induce two syntax error messages (which requires full error recovery by shifting 3 tokens) in order to detect any loss of the reallocated buffer. */ -]AT_YYLEX_DEFINE([abc])[ +]AT_YYLEX_DEFINE(["abc"])[ int main (void) { @@ -1412,7 +1378,7 @@ syntax_error2: ]AT_YYERROR_DEFINE[ /* Induce two syntax error messages (which requires full error recovery by shifting 3 tokens). */ -]AT_YYLEX_DEFINE([abc])[ +]AT_YYLEX_DEFINE(["abc"])[ int main (void) { @@ -1562,7 +1528,7 @@ A: /*empty*/ | 'a' ; %% ]AT_YYERROR_DEFINE[ -]AT_YYLEX_DEFINE([$1])[ +]AT_YYLEX_DEFINE(["$1"])[ int main (void) {