From: Akim Demaille Date: Tue, 4 Sep 2012 16:51:55 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/maint' X-Git-Tag: v2.7.90~338 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/6b5a748937ae95af26d78e9e5e7a335351a2970d?hp=-c Merge remote-tracking branch 'origin/maint' * origin/maint: maint: remove useless file update files to ignore remove useless include use locale-indep. c_is* functions for parsing, not isspace, isprint etc gnulib: update --help: include a place to report translation issues tests: style changes tests: fix push-pull test yacc.c: style changes Conflicts: src/system.h --- 6b5a748937ae95af26d78e9e5e7a335351a2970d diff --combined data/yacc.c index da4e9e39,2c57f01d..a15ef770 --- a/data/yacc.c +++ b/data/yacc.c @@@ -1,12 -1,10 +1,12 @@@ -*- C -*- - # Yacc compatible skeleton for Bison # Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, # Inc. +m4_pushdef([b4_copyright_years], + [1984, 1989-1990, 2000-2012]) + # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or @@@ -76,8 -74,8 +76,8 @@@ m4_define([b4_pure_flag] # Expand IF-TRUE, if %pure-parser and %parse-param, IF-FALSE otherwise. m4_define([b4_yacc_pure_if], [b4_pure_if([m4_ifset([b4_parse_param], - [$1], [$2])], - [$2])]) + [$1], [$2])], + [$2])]) # b4_yyerror_args @@@ -85,7 -83,7 +85,7 @@@ # Arguments passed to yyerror: user args plus yylloc. m4_define([b4_yyerror_args], [b4_yacc_pure_if([b4_locations_if([&yylloc, ])])dnl -m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])]) +m4_ifset([b4_parse_param], [b4_args(b4_parse_param), ])]) # b4_lex_param @@@ -117,7 -115,7 +117,7 @@@ m4_define([b4_int_type] m4_eval([0 <= $1]), [1], [unsigned int], - [int])]) + [int])]) ## ----------------- ## @@@ -129,7 -127,7 +129,7 @@@ # -------------------- # Expansion of $$. m4_define([b4_lhs_value], -[(yyval[]m4_ifval([$1], [.$1]))]) +[b4_symbol_value(yyval, [$1])]) # b4_rhs_value(RULE-LENGTH, NUM, [TYPE]) @@@ -137,7 -135,7 +137,7 @@@ # Expansion of $NUM, where the current rule has RULE-LENGTH # symbols on RHS. m4_define([b4_rhs_value], -[(yyvsp@{($2) - ($1)@}m4_ifval([$3], [.$3]))]) + [b4_symbol_value([yyvsp@{b4_subtract([$2], [$1])@}], [$3])]) @@@ -157,7 -155,7 +157,7 @@@ m4_define([b4_lhs_location] # Expansion of @NUM, where the current rule has RULE-LENGTH symbols # on RHS. m4_define([b4_rhs_location], -[(yylsp@{($2) - ($1)@})]) + [(yylsp@{b4_subtract([$2], [$1])@})]) ## -------------- ## @@@ -239,19 -237,19 +239,19 @@@ enum { YYPUSH_MORE = 4 } typedef struct ]b4_prefix[pstate ]b4_prefix[pstate; -]b4_pull_if([b4_c_function_decl([b4_prefix[parse]], [[int]], b4_parse_param) -])b4_c_function_decl([b4_prefix[push_parse]], [[int]], +]b4_pull_if([b4_function_declare([b4_prefix[parse]], [[int]], b4_parse_param) +])b4_function_declare([b4_prefix[push_parse]], [[int]], [[b4_prefix[pstate *ps]], [[ps]]]b4_pure_if([, [[[int pushed_char]], [[pushed_char]]], [[b4_api_PREFIX[STYPE const *pushed_val]], [[pushed_val]]]b4_locations_if([, [[b4_api_PREFIX[LTYPE const *pushed_loc]], [[pushed_loc]]]])])m4_ifset([b4_parse_param], [, b4_parse_param])) -b4_pull_if([b4_c_function_decl([b4_prefix[pull_parse]], [[int]], +b4_pull_if([b4_function_declare([b4_prefix[pull_parse]], [[int]], [[b4_prefix[pstate *ps]], [[ps]]]m4_ifset([b4_parse_param], [, b4_parse_param]))]) -b4_c_function_decl([b4_prefix[pstate_new]], [b4_prefix[pstate *]], +b4_function_declare([b4_prefix[pstate_new]], [b4_prefix[pstate *]], [[[void]], []]) -b4_c_function_decl([b4_prefix[pstate_delete]], [[void]], +b4_function_declare([b4_prefix[pstate_delete]], [[void]], [[b4_prefix[pstate *ps]], [[ps]]])dnl ]) @@@ -259,7 -257,13 +259,7 @@@ # ------------------- # When not the push parser. m4_define([b4_declare_yyparse_], -[[#ifdef YYPARSE_PARAM -]b4_c_function_decl(b4_prefix[parse], [int], - [[void *YYPARSE_PARAM], [YYPARSE_PARAM]])[ -#else /* ! YYPARSE_PARAM */ -]b4_c_function_decl(b4_prefix[parse], [int], b4_parse_param)[ -#endif /* ! YYPARSE_PARAM */]dnl -]) +[b4_function_declare(b4_prefix[parse], [int], b4_parse_param)]) # b4_declare_yyparse @@@ -278,7 -282,7 +278,7 @@@ m4_define([b4_shared_declarations] [b4_cpp_guard_open([b4_spec_defines_file])[ ]b4_declare_yydebug[ ]b4_percent_code_get([[requires]])[ -]b4_token_enums_defines(b4_tokens)[ +]b4_token_enums_defines[ ]b4_declare_yylstype[ ]b4_declare_yyparse[ ]b4_percent_code_get([[provides]])[ @@@ -293,7 -297,8 +293,7 @@@ m4_changecom() m4_divert_push(0)dnl @output(b4_parser_file_name@)@ -b4_copyright([Bison implementation for Yacc-like parsers in C], - [1984, 1989-1990, 2000-2012])[ +b4_copyright([Bison implementation for Yacc-like parsers in C])[ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ @@@ -337,7 -342,7 +337,7 @@@ m4_if(b4_api_prefix, [yy], [] # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else -# define YYERROR_VERBOSE ]b4_error_verbose_flag[ +# define YYERROR_VERBOSE ]b4_error_verbose_if([1], [0])[ #endif /* In a future release of Bison, this section will be replaced @@@ -360,8 -365,10 +360,8 @@@ typedef unsigned char yytype_uint8 #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; -#elif ]b4_c_modern[ -typedef signed char yytype_int8; #else -typedef short int yytype_int8; +typedef signed char yytype_int8; #endif #ifdef YYTYPE_UINT16 @@@ -381,7 -388,7 +381,7 @@@ typedef short int yytype_int16 # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T && ]b4_c_modern[ +# elif ! defined YYSIZE_T # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else @@@ -404,12 -411,22 +404,12 @@@ #endif /* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ +#ifdef __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif -/* Identity function, used to suppress warnings about constant conditions. */ -#ifndef lint -# define YYID(n) (n) -#else -]b4_c_function_def([YYID], [static int], [[int yyi], [yyi]])[ -{ - return yyi; -} -#endif - #if ]b4_lac_if([[1]], [[! defined yyoverflow || YYERROR_VERBOSE]])[ /* The parser invokes alloca or malloc; define the necessary symbols. */]dnl @@@ -428,7 -445,7 +428,7 @@@ b4_push_if([], [b4_lac_if([], [ # define alloca _alloca # else # define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && ]b4_c_modern[ +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS @@@ -441,7 -458,7 +441,7 @@@ # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely @@@ -457,7 -474,7 +457,7 @@@ # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) + && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 @@@ -465,13 -482,13 +465,13 @@@ # endif # ifndef YYMALLOC # define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS && ]b4_c_modern[ +# if ! defined malloc && ! defined EXIT_SUCCESS void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS && ]b4_c_modern[ +# if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif @@@ -482,8 -499,8 +482,8 @@@ #if (! defined yyoverflow \ && (! defined __cplusplus \ - || (]b4_locations_if([[defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL \ - && ]])[defined ]b4_api_PREFIX[STYPE_IS_TRIVIAL && ]b4_api_PREFIX[STYPE_IS_TRIVIAL))) + || (]b4_locations_if([[defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL \ + && ]])[defined ]b4_api_PREFIX[STYPE_IS_TRIVIAL && ]b4_api_PREFIX[STYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc @@@ -513,16 -530,16 +513,16 @@@ elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (YYID (0)) +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) #endif @@@ -541,7 -558,7 +541,7 @@@ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ - while (YYID (0)) + while (0) # endif # endif #endif /* !YYCOPY_NEEDED */ @@@ -557,27 -574,41 +557,27 @@@ #define YYNNTS ]b4_nterms_number[ /* YYNRULES -- Number of rules. */ #define YYNRULES ]b4_rules_number[ -/* YYNRULES -- Number of states. */ +/* YYNSTATES -- Number of states. */ #define YYNSTATES ]b4_states_number[ -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned + by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK ]b4_undef_token_number[ #define YYMAXUTOK ]b4_user_token_number_max[ -#define YYTRANSLATE(YYX) \ +#define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, without out-of-bounds checking. */ static const ]b4_int_type_for([b4_translate])[ yytranslate[] = { ]b4_translate[ }; #if ]b4_api_PREFIX[DEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const ]b4_int_type_for([b4_prhs])[ yyprhs[] = -{ - ]b4_prhs[ -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const ]b4_int_type_for([b4_rhs])[ yyrhs[] = -{ - ]b4_rhs[ -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const ]b4_int_type_for([b4_rline])[ yyrline[] = -{ - ]b4_rline[ -}; +]b4_integral_parser_table_define([rline], [b4_rline], + [YYRLINE[YYN] -- Source line where rule number YYN was defined.])[ #endif #if ]b4_api_PREFIX[DEBUG || YYERROR_VERBOSE || ]b4_token_table_flag[ @@@ -590,35 -621,105 +590,35 @@@ static const char *const yytname[] #endif # ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ +/* YYTOKNUM[NUM] -- (External) token number corresponding to the + (internal) symbol number NUM (which must be that of a token). */ static const ]b4_int_type_for([b4_toknum])[ yytoknum[] = { ]b4_toknum[ }; # endif -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const ]b4_int_type_for([b4_r1])[ yyr1[] = -{ - ]b4_r1[ -}; - -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const ]b4_int_type_for([b4_r2])[ yyr2[] = -{ - ]b4_r2[ -}; - -/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const ]b4_int_type_for([b4_defact])[ yydefact[] = -{ - ]b4_defact[ -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const ]b4_int_type_for([b4_defgoto])[ yydefgoto[] = -{ - ]b4_defgoto[ -}; - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ #define YYPACT_NINF ]b4_pact_ninf[ -static const ]b4_int_type_for([b4_pact])[ yypact[] = -{ - ]b4_pact[ -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const ]b4_int_type_for([b4_pgoto])[ yypgoto[] = -{ - ]b4_pgoto[ -}; - -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF ]b4_table_ninf[ -static const ]b4_int_type_for([b4_table])[ yytable[] = -{ - ]b4_table[ -}; #define yypact_value_is_default(yystate) \ ]b4_table_value_equals([[pact]], [[yystate]], [b4_pact_ninf])[ +#define YYTABLE_NINF ]b4_table_ninf[ + #define yytable_value_is_error(yytable_value) \ ]b4_table_value_equals([[table]], [[yytable_value]], [b4_table_ninf])[ -static const ]b4_int_type_for([b4_check])[ yycheck[] = -{ - ]b4_check[ -}; +]b4_parser_tables_define[ -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const ]b4_int_type_for([b4_stos])[ yystos[] = -{ - ]b4_stos[ -}; +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. However, - YYFAIL appears to be in use. Nevertheless, it is formally deprecated - in Bison 2.4.2's NEWS entry, where a plan to phase it out is - discussed. */ - -#define YYFAIL goto yyerrlab -#if defined YYFAIL - /* This is here to suppress warnings from the GCC cpp's - -Wunused-macros. Normally we don't worry about that warning, but - some users do, and we want to make it easy for users to remove - YYFAIL uses, which will produce warnings from Bison 2.5. */ -#endif #define YYRECOVERING() (!!yyerrstatus) @@@ -636,17 -737,18 +636,17 @@@ d else \ { \ yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (YYID (0)) + YYERROR; \ + } \ +while (0) -#define YYTERROR 1 -#define YYERRCODE 256 +#define YYTERROR 1 +#define YYERRCODE 256 +]b4_locations_if([[ ]b4_yylloc_default_define[ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) -]b4_locations_if([[ - /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know @@@ -654,10 -756,10 +654,10 @@@ #ifndef YY_LOCATION_PRINT # if defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL -# define YY_LOCATION_PRINT(File, Loc) \ - fprintf (File, "%d.%d-%d.%d", \ - (Loc).first_line, (Loc).first_column, \ - (Loc).last_line, (Loc).last_column) +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif @@@ -676,7 -778,7 +676,7 @@@ #ifdef YYLEX_PARAM # define YYLEX yylex (]b4_pure_if([&yylval[]b4_locations_if([, &yylloc]), ])[YYLEX_PARAM) #else -# define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[ +# define YYLEX ]b4_function_call([yylex], [int], b4_lex_param)[ #endif /* Enable debugging if requested. */ @@@ -687,33 -789,33 +687,33 @@@ # define YYFPRINTF fprintf # endif -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (YYID (0)) - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value]b4_locations_if([, Location])[]b4_user_args[); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (YYID (0)) - -]b4_yy_symbol_print_generate([b4_c_function_def])[ +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value]b4_locations_if([, Location])[]b4_user_args[); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + +]b4_yy_symbol_print_define[ /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ -]b4_c_function_def([yy_stack_print], [static void], - [[yytype_int16 *yybottom], [yybottom]], - [[yytype_int16 *yytop], [yytop]])[ +]b4_function_define([yy_stack_print], [static void], + [[yytype_int16 *yybottom], [yybottom]], + [[yytype_int16 *yytop], [yytop]])[ { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@@ -724,47 -826,45 +724,47 @@@ YYFPRINTF (stderr, "\n"); } -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (YYID (0)) +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ -]b4_c_function_def([yy_reduce_print], [static void], - [[YYSTYPE *yyvsp], [yyvsp]], +]b4_function_define([yy_reduce_print], [static void], + [[yytype_int16 *yyssp], [yyssp]], + [[YYSTYPE *yyvsp], [yyvsp]], b4_locations_if([[[YYLTYPE *yylsp], [yylsp]], - ])[[int yyrule], [yyrule]]m4_ifset([b4_parse_param], [, - b4_parse_param]))[ + ])[[int yyrule], [yyrule]]m4_ifset([b4_parse_param], [, + b4_parse_param]))[ { + unsigned long int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); + yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], - &]b4_rhs_value(yynrhs, yyi + 1)[ - ]b4_locations_if([, &]b4_rhs_location(yynrhs, yyi + 1))[]dnl - b4_user_args[); + yy_symbol_print (stderr, + yystos[yyssp[yyi + 1 - yynrhs]], + &]b4_rhs_value(yynrhs, yyi + 1)[ + ]b4_locations_if([, &]b4_rhs_location(yynrhs, yyi + 1))[]dnl + b4_user_args[); YYFPRINTF (stderr, "\n"); } } -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyvsp, ]b4_locations_if([yylsp, ])[Rule]b4_user_args[); \ -} while (YYID (0)) +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, ]b4_locations_if([yylsp, ])[Rule]b4_user_args[); \ +} while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ @@@ -778,7 -878,7 +778,7 @@@ int yydebug /* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH +#ifndef YYINITDEPTH # define YYINITDEPTH ]b4_stack_depth_init[ #endif @@@ -898,7 -998,7 +898,7 @@@ do goto yyerrlab; \ } \ } \ -} while (YYID (0)) +} while (0) /* Discard any previous initial lookahead context because of Event, which may be a lookahead change or an invalidation of the currently @@@ -921,7 -1021,7 +921,7 @@@ do Event "\n"); \ yy_lac_established = 0; \ } \ -} while (YYID (0)) +} while (0) #else # define YY_LAC_DISCARD(Event) yy_lac_established = 0 #endif @@@ -1037,7 -1137,7 +1037,7 @@@ yy_lac (yytype_int16 *yyesa, yytype_int # define yystrlen strlen # else /* Return the length of YYSTR. */ -]b4_c_function_def([yystrlen], [static YYSIZE_T], +]b4_function_define([yystrlen], [static YYSIZE_T], [[const char *yystr], [yystr]])[ { YYSIZE_T yylen; @@@ -1054,7 -1154,7 +1054,7 @@@ # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ -]b4_c_function_def([yystpcpy], [static char *], +]b4_function_define([yystpcpy], [static char *], [[char *yydest], [yydest]], [[const char *yysrc], [yysrc]])[ { char *yyd = yydest; @@@ -1085,27 -1185,27 +1085,27 @@@ yytnamerr (char *yyres, const char *yys char const *yyp = yystr; for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } do_not_strip_quotes: ; } @@@ -1144,6 -1244,10 +1144,6 @@@ yysyntax_error (YYSIZE_T *yymsg_alloc, int yycount = 0; /* There are many possibilities here to consider: - - Assume YYFAIL is not used. It's too flawed to consider. See - - for details. YYERROR is fine as it does not invoke this - function. - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected @@@ -1274,7 -1378,7 +1274,7 @@@ } #endif /* YYERROR_VERBOSE */ -]b4_yydestruct_generate([b4_c_function_def])[ +]b4_yydestruct_define[ ]b4_pure_if([], [ @@@ -1289,13 -1393,13 +1289,13 @@@ struct yypstat static char yypstate_allocated = 0;]])b4_pull_if([ -b4_c_function_def([[yyparse]], [[int]], b4_parse_param)[ +b4_function_define([[yyparse]], [[int]], b4_parse_param)[ { return yypull_parse (YY_NULL]m4_ifset([b4_parse_param], - [[, ]b4_c_args(b4_parse_param)])[); + [[, ]b4_args(b4_parse_param)])[); } -]b4_c_function_def([[yypull_parse]], [[int]], +]b4_function_define([[yypull_parse]], [[int]], [[[yypstate *yyps]], [[yyps]]]m4_ifset([b4_parse_param], [, b4_parse_param]))[ { @@@ -1320,7 -1424,7 +1320,7 @@@ do { yychar = YYLEX; yystatus = - yypush_parse (yyps_local]b4_pure_if([[, yychar, &yylval]b4_locations_if([[, &yylloc]])])m4_ifset([b4_parse_param], [, b4_c_args(b4_parse_param)])[); + yypush_parse (yyps_local]b4_pure_if([[, yychar, &yylval]b4_locations_if([[, &yylloc]])])m4_ifset([b4_parse_param], [, b4_args(b4_parse_param)])[); } while (yystatus == YYPUSH_MORE); if (!yyps) yypstate_delete (yyps_local); @@@ -1328,7 -1432,7 +1328,7 @@@ }]])[ /* Initialize the parser data structure. */ -]b4_c_function_def([[yypstate_new]], [[yypstate *]])[ +]b4_function_define([[yypstate_new]], [[yypstate *]])[ { yypstate *yyps;]b4_pure_if([], [[ if (yypstate_allocated) @@@ -1341,7 -1445,7 +1341,7 @@@ return yyps; } -]b4_c_function_def([[yypstate_delete]], [[void]], +]b4_function_define([[yypstate_delete]], [[void]], [[[yypstate *yyps]], [[yyps]]])[ { #ifndef yyoverflow @@@ -1379,7 -1483,7 +1379,7 @@@ | yypush_parse. | `---------------*/ -]b4_c_function_def([[yypush_parse]], [[int]], +]b4_function_define([[yypush_parse]], [[int]], [[[yypstate *yyps]], [[yyps]]]b4_pure_if([, [[[int yypushed_char]], [[yypushed_char]]], [[[YYSTYPE const *yypushed_val]], [[yypushed_val]]]b4_locations_if([, @@@ -1391,7 -1495,12 +1391,7 @@@ | yyparse. | `----------*/ -#ifdef YYPARSE_PARAM -]b4_c_function_def([yyparse], [int], - [[void *YYPARSE_PARAM], [YYPARSE_PARAM]])[ -#else /* ! YYPARSE_PARAM */ -]b4_c_function_def([yyparse], [int], b4_parse_param)[ -#endif]])[ +]b4_function_define([yyparse], [int], b4_parse_param)])[ {]b4_pure_if([b4_declare_scanner_communication_variables ])b4_push_if([b4_pure_if([], [[ int yypushed_char = yychar; @@@ -1404,7 -1513,7 +1404,7 @@@ int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ - int yytoken; + int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval;]b4_locations_if([[ @@@ -1429,7 -1538,6 +1429,6 @@@ goto yyread_pushed_token; }]])[ - yytoken = 0; yyss = yyssa; yyvs = yyvsa;]b4_locations_if([[ yyls = yylsa;]])[ @@@ -1490,26 -1598,26 +1489,26 @@@ m4_ifdef([b4_at_dollar_used], [[ yylsp #ifdef yyoverflow { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss;]b4_locations_if([ - YYLTYPE *yyls1 = yyls;])[ - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp),]b4_locations_if([ - &yyls1, yysize * sizeof (*yylsp),])[ - &yystacksize); + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss;]b4_locations_if([ + YYLTYPE *yyls1 = yyls;])[ + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp),]b4_locations_if([ + &yyls1, yysize * sizeof (*yylsp),])[ + &yystacksize); ]b4_locations_if([ - yyls = yyls1;])[ - yyss = yyss1; - yyvs = yyvs1; + yyls = yyls1;])[ + yyss = yyss1; + yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE @@@ -1517,23 -1625,23 +1516,23 @@@ # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; + goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; + yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs);]b4_locations_if([ - YYSTACK_RELOCATE (yyls_alloc, yyls);])[ + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs);]b4_locations_if([ + YYSTACK_RELOCATE (yyls_alloc, yyls);])[ # undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ @@@ -1543,10 -1651,10 +1542,10 @@@ yylsp = yyls + yysize - 1;])[ YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) - YYABORT; + YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); @@@ -1726,9 -1834,9 +1725,9 @@@ yyreduce goto yynewstate; -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ @@@ -1782,20 -1890,20 +1781,20 @@@ if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an - error, discard it. */ + error, discard it. */ if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } else - { - yydestruct ("Error: discarding", - yytoken, &yylval]b4_locations_if([, &yylloc])[]b4_user_args[); - yychar = YYEMPTY; - } + { + yydestruct ("Error: discarding", + yytoken, &yylval]b4_locations_if([, &yylloc])[]b4_user_args[); + yychar = YYEMPTY; + } } /* Else will try to reuse lookahead token after shifting the error @@@ -1828,29 -1936,29 +1827,29 @@@ yyerrorlab | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ + yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) - YYABORT; + YYABORT; ]b4_locations_if([[ yyerror_range[1] = *yylsp;]])[ yydestruct ("Error: popping", - yystos[yystate], yyvsp]b4_locations_if([, yylsp])[]b4_user_args[); + yystos[yystate], yyvsp]b4_locations_if([, yylsp])[]b4_user_args[); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); @@@ -1915,7 -2023,7 +1914,7 @@@ yyreturn while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp]b4_locations_if([, yylsp])[]b4_user_args[); + yystos[*yyssp], yyvsp]b4_locations_if([, yylsp])[]b4_user_args[); YYPOPSTACK (1); } #ifndef yyoverflow @@@ -1931,14 -2039,17 +1930,14 @@@ yypushreturn:]]) if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif - /* Make sure YYID is used. */ - return YYID (yyresult); + return yyresult; } - - ]b4_epilogue[]dnl b4_defines_if( [@output(b4_spec_defines_file@)@ -b4_copyright([Bison interface for Yacc-like parsers in C], - [1984, 1989-1990, 2000-2012])[ +b4_copyright([Bison interface for Yacc-like parsers in C])[ ]b4_shared_declarations[ ]])dnl b4_defines_if m4_divert_pop(0) +m4_popdef([b4_copyright_years]) diff --combined doc/.gitignore index 221cbd44,0fb0cca8..8abfdb94 --- a/doc/.gitignore +++ b/doc/.gitignore @@@ -1,14 -1,15 +1,14 @@@ - /*.info* /*~ /.dirstamp -/Makefile -/Makefile.in /bison.1 /bison.aux /bison.cp /bison.cps /bison.dvi /bison.fn +/bison.help /bison.html + /bison.info /bison.ky /bison.log /bison.pdf diff --combined src/getargs.c index d8a527d6,70a25e03..74be4101 --- a/src/getargs.c +++ b/src/getargs.c @@@ -26,7 -26,20 +26,7 @@@ #include #include #include - -/* Hack to get to declare getopt with a prototype. */ -#if lint && ! defined __GNU_LIBRARY__ -# define __GNU_LIBRARY__ -# define HACK_FOR___GNU_LIBRARY___PROTOTYPE 1 -#endif - #include - -#ifdef HACK_FOR___GNU_LIBRARY___PROTOTYPE -# undef __GNU_LIBRARY__ -# undef HACK_FOR___GNU_LIBRARY___PROTOTYPE -#endif - #include #include "complain.h" @@@ -36,18 -49,24 +36,18 @@@ #include "quote.h" #include "uniqstr.h" -bool debug_flag; bool defines_flag; bool graph_flag; bool xml_flag; -bool locations_flag; bool no_lines_flag; bool token_table_flag; -bool yacc_flag; /* for -y */ - -bool error_verbose = false; +bool yacc_flag; /* for -y */ bool nondeterministic_parser = false; bool glr_parser = false; int report_flag = report_none; int trace_flag = trace_none; -int warnings_flag = warnings_conflicts_sr | warnings_conflicts_rr - | warnings_other; static struct bison_language const valid_languages[] = { { "c", "c-skel.m4", ".c", ".h", true }, @@@ -79,32 -98,32 +79,32 @@@ const char *include = NULL */ static void flags_argmatch (const char *option, - const char * const keys[], const int values[], - int all, int *flags, char *args) + const char * const keys[], const int values[], + int all, int *flags, char *args) { if (args) { args = strtok (args, ","); while (args) - { - int no = strncmp (args, "no-", 3) == 0 ? 3 : 0; - int value = XARGMATCH (option, args + no, keys, values); - if (value == 0) - { - if (no) - *flags |= all; - else - *flags &= ~all; - } - else - { - if (no) - *flags &= ~value; - else - *flags |= value; - } - args = strtok (NULL, ","); - } + { + int no = STRPREFIX_LIT ("no-", args) ? 3 : 0; + int value = XARGMATCH (option, args + no, keys, values); + if (value == 0) + { + if (no) + *flags |= all; + else + *flags &= ~all; + } + else + { + if (no) + *flags &= ~value; + else + *flags |= value; + } + args = strtok (NULL, ","); + } } else *flags |= all; @@@ -114,15 -133,15 +114,15 @@@ * * \param FlagName the flag familly to update. * \param Args the effective sub arguments to decode. + * \param All the "all" value. * * \arg FlagName_args the list of keys. * \arg FlagName_types the list of values. - * \arg FlagName_all the all value. * \arg FlagName_flag the flag to update. */ -#define FLAGS_ARGMATCH(FlagName, Args) \ +#define FLAGS_ARGMATCH(FlagName, Args, All) \ flags_argmatch ("--" #FlagName, FlagName ## _args, FlagName ## _types, \ - FlagName ## _all, &FlagName ## _flag, Args) + All, &FlagName ## _flag, Args) /*----------------------. @@@ -218,7 -237,6 +218,7 @@@ static const char * const warnings_args "yacc - incompatibilities with POSIX Yacc", "conflicts-sr - S/R conflicts", "conflicts-rr - R/R conflicts", + "deprecated - obsolete constructs", "other - all other warnings", "all - all of the above", "error - warnings are errors", @@@ -227,19 -245,19 +227,19 @@@ static const int warnings_types[] = { - warnings_none, - warnings_midrule_values, - warnings_yacc, - warnings_conflicts_sr, - warnings_conflicts_rr, - warnings_other, - warnings_all, - warnings_error + Wnone, + Wmidrule_values, + Wyacc, + Wconflicts_sr, + Wconflicts_rr, + Wdeprecated, + Wother, + Wall, + Werror }; ARGMATCH_VERIFY (warnings_args, warnings_types); - /*-------------------------------------------. | Display the help message and exit STATUS. | `-------------------------------------------*/ @@@ -251,13 -269,13 +251,13 @@@ usage (int status { if (status != 0) fprintf (stderr, _("Try `%s --help' for more information.\n"), - program_name); + program_name); else { /* For ../build-aux/cross-options.pl to work, use the format: - ^ -S, --long[=ARGS] (whitespace) - A --long option is required. - Otherwise, add exceptions to ../build-aux/cross-options.pl. */ + ^ -S, --long[=ARGS] (whitespace) + A --long option is required. + Otherwise, add exceptions to ../build-aux/cross-options.pl. */ printf (_("Usage: %s [OPTION]... FILE\n"), program_name); fputs (_("\ @@@ -291,8 -309,7 +291,8 @@@ Parser:\n -L, --language=LANGUAGE specify the output programming language\n\ (this is an experimental feature)\n\ -S, --skeleton=FILE specify the skeleton to use\n\ - -t, --debug instrument the parser for debugging\n\ + -t, --debug instrument the parser for tracing\n\ + same as `-Dparse.trace'\n\ --locations enable location support\n\ -D, --define=NAME[=VALUE] similar to '%define NAME \"VALUE\"'\n\ -F, --force-define=NAME[=VALUE] override '%define NAME \"VALUE\"'\n\ @@@ -344,7 -361,25 +344,25 @@@ THINGS is a list of comma separated wor `none' disable the report\n\ "), stdout); - printf (_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT); + putc ('\n', stdout); + printf (_("Report bugs to <%s>.\n"), PACKAGE_BUGREPORT); + printf (_("%s home page: <%s>.\n"), PACKAGE_NAME, PACKAGE_URL); + fputs (_("General help using GNU software: " + ".\n"), + stdout); + /* Don't output this redundant message for English locales. + Note we still output for 'C' so that it gets included in the + man page. */ + const char *lc_messages = setlocale (LC_MESSAGES, NULL); - if (lc_messages && strcmp (lc_messages, "en_")) ++ if (lc_messages && !STREQ (lc_messages, "en_")) + /* TRANSLATORS: Replace LANG_CODE in this URL with your language + code to + form one of the URLs at http://translationproject.org/team/. + Otherwise, replace the entire URL with your translation team's + email address. */ + fputs (_("Report translation bugs to " + ".\n"), stdout); + fputs (_("For complete documentation, run: info bison.\n"), stdout); } exit (status); @@@ -366,14 -401,14 +384,14 @@@ version (void putc ('\n', stdout); fprintf (stdout, - _("Copyright (C) %d Free Software Foundation, Inc.\n"), - PACKAGE_COPYRIGHT_YEAR); + _("Copyright (C) %d Free Software Foundation, Inc.\n"), + PACKAGE_COPYRIGHT_YEAR); fputs (_("\ This is free software; see the source for copying conditions. There is NO\n\ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ "), - stdout); + stdout); } @@@ -390,8 -425,7 +408,8 @@@ skeleton_arg (char const *arg, int prio skeleton = arg; } else if (prio == skeleton_prio) - complain_at (loc, _("multiple skeleton declarations are invalid")); + complain_at (loc, complaint, + _("multiple skeleton declarations are invalid")); } void @@@ -416,7 -450,7 +434,7 @@@ language_argmatch (char const *arg, in else return; - complain_at (loc, msg, quotearg_colon (arg)); + complain_at (loc, complaint, msg, quotearg_colon (arg)); } /*----------------------. @@@ -462,25 -496,25 +480,25 @@@ enu static struct option const long_options[] = { /* Operation modes. */ - { "help", no_argument, 0, 'h' }, - { "version", no_argument, 0, 'V' }, - { "print-localedir", no_argument, 0, PRINT_LOCALEDIR_OPTION }, - { "print-datadir", no_argument, 0, PRINT_DATADIR_OPTION }, + { "help", no_argument, 0, 'h' }, + { "version", no_argument, 0, 'V' }, + { "print-localedir", no_argument, 0, PRINT_LOCALEDIR_OPTION }, + { "print-datadir", no_argument, 0, PRINT_DATADIR_OPTION }, { "warnings", optional_argument, 0, 'W' }, /* Parser. */ - { "name-prefix", required_argument, 0, 'p' }, + { "name-prefix", required_argument, 0, 'p' }, { "include", required_argument, 0, 'I' }, /* Output. */ - { "file-prefix", required_argument, 0, 'b' }, - { "output", required_argument, 0, 'o' }, - { "output-file", required_argument, 0, 'o' }, - { "graph", optional_argument, 0, 'g' }, + { "file-prefix", required_argument, 0, 'b' }, + { "output", required_argument, 0, 'o' }, + { "output-file", required_argument, 0, 'o' }, + { "graph", optional_argument, 0, 'g' }, { "xml", optional_argument, 0, 'x' }, - { "report", required_argument, 0, 'r' }, + { "report", required_argument, 0, 'r' }, { "report-file", required_argument, 0, REPORT_FILE_OPTION }, - { "verbose", no_argument, 0, 'v' }, + { "verbose", no_argument, 0, 'v' }, /* Hidden. */ { "trace", optional_argument, 0, 'T' }, @@@ -490,13 -524,13 +508,13 @@@ /* Operation modes. */ { "fixed-output-files", no_argument, 0, 'y' }, - { "yacc", no_argument, 0, 'y' }, + { "yacc", no_argument, 0, 'y' }, /* Parser. */ - { "debug", no_argument, 0, 't' }, - { "define", required_argument, 0, 'D' }, + { "debug", no_argument, 0, 't' }, + { "define", required_argument, 0, 'D' }, { "force-define", required_argument, 0, 'F' }, - { "locations", no_argument, 0, LOCATIONS_OPTION }, + { "locations", no_argument, 0, LOCATIONS_OPTION }, { "no-lines", no_argument, 0, 'l' }, { "raw", no_argument, 0, 0 }, { "skeleton", required_argument, 0, 'S' }, @@@ -533,21 -567,21 +551,21 @@@ getargs (int argc, char *argv[] int c; while ((c = getopt_long (argc, argv, short_options, long_options, NULL)) - != -1) + != -1) switch (c) { /* ASCII Sorting for short options (i.e., upper case then lower case), and then long-only options. */ case 0: - /* Certain long options cause getopt_long to return 0. */ - break; + /* Certain long options cause getopt_long to return 0. */ + break; case 'D': /* -DNAME[=VALUE]. */ case 'F': /* -FNAME[=VALUE]. */ { char* name = optarg; - char* value = mbschr (optarg, '='); + char* value = strchr (optarg, '='); if (value) *value++ = 0; muscle_percent_define_insert (name, command_line_location (), @@@ -555,37 -589,37 +573,37 @@@ c == 'D' ? MUSCLE_PERCENT_DEFINE_D : MUSCLE_PERCENT_DEFINE_F); } - break; + break; case 'I': - include = AS_FILE_NAME (optarg); - break; + include = AS_FILE_NAME (optarg); + break; case 'L': - language_argmatch (optarg, command_line_prio, - command_line_location ()); - break; + language_argmatch (optarg, command_line_prio, + command_line_location ()); + break; case 'S': - skeleton_arg (AS_FILE_NAME (optarg), command_line_prio, - command_line_location ()); - break; + skeleton_arg (AS_FILE_NAME (optarg), command_line_prio, + command_line_location ()); + break; case 'T': - FLAGS_ARGMATCH (trace, optarg); - break; + FLAGS_ARGMATCH (trace, optarg, trace_all); + break; case 'V': - version (); - exit (EXIT_SUCCESS); + version (); + exit (EXIT_SUCCESS); case 'W': - FLAGS_ARGMATCH (warnings, optarg); - break; + FLAGS_ARGMATCH (warnings, optarg, Wall); + break; case 'b': - spec_file_prefix = AS_FILE_NAME (optarg); - break; + spec_file_prefix = AS_FILE_NAME (optarg); + break; case 'd': /* Here, the -d and --defines options are differentiated. */ @@@ -598,80 -632,77 +616,80 @@@ break; case 'g': - graph_flag = true; - if (optarg) + graph_flag = true; + if (optarg) { free (spec_graph_file); spec_graph_file = xstrdup (AS_FILE_NAME (optarg)); } - break; + break; case 'h': - usage (EXIT_SUCCESS); + usage (EXIT_SUCCESS); case 'k': - token_table_flag = true; - break; + token_table_flag = true; + break; case 'l': - no_lines_flag = true; - break; + no_lines_flag = true; + break; case 'o': - spec_outfile = AS_FILE_NAME (optarg); - break; + spec_outfile = AS_FILE_NAME (optarg); + break; case 'p': - spec_name_prefix = optarg; - break; + spec_name_prefix = optarg; + break; case 'r': - FLAGS_ARGMATCH (report, optarg); - break; + FLAGS_ARGMATCH (report, optarg, report_all); + break; case 't': - debug_flag = true; - break; + muscle_percent_define_insert ("parse.trace", + command_line_location (), "", + MUSCLE_PERCENT_DEFINE_D); + break; case 'v': - report_flag |= report_states; - break; + report_flag |= report_states; + break; case 'x': - xml_flag = true; - if (optarg) + xml_flag = true; + if (optarg) { free (spec_xml_file); spec_xml_file = xstrdup (AS_FILE_NAME (optarg)); } - break; + break; case 'y': - yacc_flag = true; - break; + yacc_flag = true; + break; case LOCATIONS_OPTION: - locations_flag = true; - break; + muscle_percent_define_ensure ("locations", + command_line_location (), true); + break; case PRINT_LOCALEDIR_OPTION: - printf ("%s\n", LOCALEDIR); - exit (EXIT_SUCCESS); + printf ("%s\n", LOCALEDIR); + exit (EXIT_SUCCESS); case PRINT_DATADIR_OPTION: - printf ("%s\n", compute_pkgdatadir ()); - exit (EXIT_SUCCESS); + printf ("%s\n", pkgdatadir ()); + exit (EXIT_SUCCESS); case REPORT_FILE_OPTION: free (spec_verbose_file); - spec_verbose_file = xstrdup (AS_FILE_NAME (optarg)); - break; + spec_verbose_file = xstrdup (AS_FILE_NAME (optarg)); + break; default: - usage (EXIT_FAILURE); + usage (EXIT_FAILURE); } if (argc - optind != 1) diff --combined src/parse-gram.c index 7a19cf18,037035bc..f92f659d --- a/src/parse-gram.c +++ b/src/parse-gram.c @@@ -1,19 -1,19 +1,19 @@@ -/* A Bison parser, made by GNU Bison 2.6.1.12-3153-dirty. */ +/* A Bison parser, made by GNU Bison 2.6.2.834-6d7b9. */ /* Bison implementation for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. - + + Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program. If not, see . */ @@@ -26,7 -26,7 +26,7 @@@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ @@@ -44,7 -44,7 +44,7 @@@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.6.1.12-3153-dirty" +#define YYBISON_VERSION "2.6.2.834-6d7b9" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@@ -70,8 -70,8 +70,8 @@@ #define yylloc gram_lloc /* Copy the first part of user declarations. */ -/* Line 336 of yacc.c */ -#line 1 "parse-gram.y" +/* Line 331 of yacc.c */ +#line 1 "src/parse-gram.y" /* Bison Grammar Parser -*- C -*- Copyright (C) 2002-2012 Free Software Foundation, Inc. @@@ -94,6 -94,7 +94,7 @@@ #include #include "system.h" + #include "c-ctype.h" #include "complain.h" #include "conflicts.h" #include "files.h" @@@ -104,7 -105,6 +105,7 @@@ #include "quotearg.h" #include "reader.h" #include "symlist.h" +#include "symtab.h" #include "scan-gram.h" #include "scan-code.h" #include "xmemdup0.h" @@@ -113,7 -113,7 +114,7 @@@ static YYLTYPE lloc_default (YYLTYPE const *, int); #define YY_LOCATION_PRINT(File, Loc) \ - location_print (File, Loc) + location_print (File, Loc) static void version_check (location const *loc, char const *version); @@@ -121,13 -121,53 +122,13 @@@ FIXME: depends on the undocumented availability of YYLLOC. */ #undef yyerror #define yyerror(Msg) \ - gram_error (&yylloc, Msg) + gram_error (&yylloc, Msg) static void gram_error (location const *, char const *); static char const *char_name (char); -/** Add a lex-param or a parse-param. - * - * \param type \a lex_param or \a parse_param - * \param decl the formal argument - * \param loc the location in the source. - */ -static void add_param (char const *type, char *decl, location loc); - - -static symbol_class current_class = unknown_sym; -static uniqstr current_type = NULL; -static symbol *current_lhs_symbol; -static location current_lhs_location; -static named_ref *current_lhs_named_ref; -static int current_prec = 0; - -/** Set the new current left-hand side symbol, possibly common - * to several right-hand side parts of rule. - */ -static -void -current_lhs(symbol *sym, location loc, named_ref *ref) -{ - current_lhs_symbol = sym; - current_lhs_location = loc; - /* In order to simplify memory management, named references for lhs - are always assigned by deep copy into the current symbol_list - node. This is because a single named-ref in the grammar may - result in several uses when the user factors lhs between several - rules using "|". Therefore free the parser's original copy. */ - free (current_lhs_named_ref); - current_lhs_named_ref = ref; -} - - -#define YYTYPE_INT16 int_fast16_t -#define YYTYPE_INT8 int_fast8_t -#define YYTYPE_UINT16 uint_fast16_t -#define YYTYPE_UINT8 uint_fast8_t - -/* Line 336 of yacc.c */ -#line 170 "parse-gram.c" +/* Line 331 of yacc.c */ +#line 131 "src/parse-gram.c" # ifndef YY_NULL # if defined __cplusplus && 201103L <= __cplusplus @@@ -146,9 -186,9 +147,9 @@@ #endif /* In a future release of Bison, this section will be replaced - by #include "parse-gram.h". */ -#ifndef GRAM_Y_TAB_H -# define GRAM_Y_TAB_H + by #include "src/parse-gram.h". */ +#ifndef GRAM_SRC_PARSE_GRAM_H +# define GRAM_SRC_PARSE_GRAM_H /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 1 @@@ -156,88 -196,70 +157,88 @@@ #if YYDEBUG extern int gram_debug; #endif +/* "%code requires" blocks. */ +/* Line 345 of yacc.c */ +#line 222 "src/parse-gram.y" + +# ifndef PARAM_TYPE +# define PARAM_TYPE + typedef enum + { + param_none = 0, + param_lex = 1 << 0, + param_parse = 1 << 1, + param_both = param_lex | param_parse + } param_type; +# endif + + +/* Line 345 of yacc.c */ +#line 177 "src/parse-gram.c" /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - GRAM_EOF = 0, - STRING = 258, - INT = 259, - PERCENT_TOKEN = 260, - PERCENT_NTERM = 261, - PERCENT_TYPE = 262, - PERCENT_DESTRUCTOR = 263, - PERCENT_PRINTER = 264, - PERCENT_LEFT = 265, - PERCENT_RIGHT = 266, - PERCENT_NONASSOC = 267, - PERCENT_PREC = 268, - PERCENT_DPREC = 269, - PERCENT_MERGE = 270, - PERCENT_CODE = 271, - PERCENT_DEBUG = 272, - PERCENT_DEFAULT_PREC = 273, - PERCENT_DEFINE = 274, - PERCENT_DEFINES = 275, - PERCENT_ERROR_VERBOSE = 276, - PERCENT_EXPECT = 277, - PERCENT_EXPECT_RR = 278, - PERCENT_FILE_PREFIX = 279, - PERCENT_GLR_PARSER = 280, - PERCENT_INITIAL_ACTION = 281, - PERCENT_LANGUAGE = 282, - PERCENT_LEX_PARAM = 283, - PERCENT_LOCATIONS = 284, - PERCENT_NAME_PREFIX = 285, - PERCENT_NO_DEFAULT_PREC = 286, - PERCENT_NO_LINES = 287, - PERCENT_NONDETERMINISTIC_PARSER = 288, - PERCENT_OUTPUT = 289, - PERCENT_PARSE_PARAM = 290, - PERCENT_PURE_PARSER = 291, - PERCENT_REQUIRE = 292, - PERCENT_SKELETON = 293, - PERCENT_START = 294, - PERCENT_TOKEN_TABLE = 295, - PERCENT_VERBOSE = 296, - PERCENT_YACC = 297, - BRACED_CODE = 298, - BRACKETED_ID = 299, - CHAR = 300, - EPILOGUE = 301, - EQUAL = 302, - ID = 303, - ID_COLON = 304, - PERCENT_PERCENT = 305, - PIPE = 306, - PROLOGUE = 307, - SEMICOLON = 308, - TYPE = 309, - TYPE_TAG_ANY = 310, - TYPE_TAG_NONE = 311, - PERCENT_UNION = 312 - }; + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype + { + GRAM_EOF = 0, + STRING = 258, + INT = 259, + PERCENT_TOKEN = 260, + PERCENT_NTERM = 261, + PERCENT_TYPE = 262, + PERCENT_DESTRUCTOR = 263, + PERCENT_PRINTER = 264, + PERCENT_LEFT = 265, + PERCENT_RIGHT = 266, + PERCENT_NONASSOC = 267, + PERCENT_PRECEDENCE = 268, + PERCENT_PREC = 269, + PERCENT_DPREC = 270, + PERCENT_MERGE = 271, + PERCENT_CODE = 272, + PERCENT_DEFAULT_PREC = 273, + PERCENT_DEFINE = 274, + PERCENT_DEFINES = 275, + PERCENT_ERROR_VERBOSE = 276, + PERCENT_EXPECT = 277, + PERCENT_EXPECT_RR = 278, + PERCENT_FLAG = 279, + PERCENT_FILE_PREFIX = 280, + PERCENT_GLR_PARSER = 281, + PERCENT_INITIAL_ACTION = 282, + PERCENT_LANGUAGE = 283, + PERCENT_NAME_PREFIX = 284, + PERCENT_NO_DEFAULT_PREC = 285, + PERCENT_NO_LINES = 286, + PERCENT_NONDETERMINISTIC_PARSER = 287, + PERCENT_OUTPUT = 288, + PERCENT_REQUIRE = 289, + PERCENT_SKELETON = 290, + PERCENT_START = 291, + PERCENT_TOKEN_TABLE = 292, + PERCENT_VERBOSE = 293, + PERCENT_YACC = 294, + BRACED_CODE = 295, + BRACED_PREDICATE = 296, + BRACKETED_ID = 297, + CHAR = 298, + EPILOGUE = 299, + EQUAL = 300, + ID = 301, + ID_COLON = 302, + PERCENT_PERCENT = 303, + PIPE = 304, + PROLOGUE = 305, + SEMICOLON = 306, + TAG = 307, + TAG_ANY = 308, + TAG_NONE = 309, + PERCENT_PARAM = 310, + PERCENT_UNION = 311 + }; #endif /* Tokens. */ #define GRAM_EOF 0 @@@ -251,80 -273,76 +252,80 @@@ #define PERCENT_LEFT 265 #define PERCENT_RIGHT 266 #define PERCENT_NONASSOC 267 -#define PERCENT_PREC 268 -#define PERCENT_DPREC 269 -#define PERCENT_MERGE 270 -#define PERCENT_CODE 271 -#define PERCENT_DEBUG 272 +#define PERCENT_PRECEDENCE 268 +#define PERCENT_PREC 269 +#define PERCENT_DPREC 270 +#define PERCENT_MERGE 271 +#define PERCENT_CODE 272 #define PERCENT_DEFAULT_PREC 273 #define PERCENT_DEFINE 274 #define PERCENT_DEFINES 275 #define PERCENT_ERROR_VERBOSE 276 #define PERCENT_EXPECT 277 #define PERCENT_EXPECT_RR 278 -#define PERCENT_FILE_PREFIX 279 -#define PERCENT_GLR_PARSER 280 -#define PERCENT_INITIAL_ACTION 281 -#define PERCENT_LANGUAGE 282 -#define PERCENT_LEX_PARAM 283 -#define PERCENT_LOCATIONS 284 -#define PERCENT_NAME_PREFIX 285 -#define PERCENT_NO_DEFAULT_PREC 286 -#define PERCENT_NO_LINES 287 -#define PERCENT_NONDETERMINISTIC_PARSER 288 -#define PERCENT_OUTPUT 289 -#define PERCENT_PARSE_PARAM 290 -#define PERCENT_PURE_PARSER 291 -#define PERCENT_REQUIRE 292 -#define PERCENT_SKELETON 293 -#define PERCENT_START 294 -#define PERCENT_TOKEN_TABLE 295 -#define PERCENT_VERBOSE 296 -#define PERCENT_YACC 297 -#define BRACED_CODE 298 -#define BRACKETED_ID 299 -#define CHAR 300 -#define EPILOGUE 301 -#define EQUAL 302 -#define ID 303 -#define ID_COLON 304 -#define PERCENT_PERCENT 305 -#define PIPE 306 -#define PROLOGUE 307 -#define SEMICOLON 308 -#define TYPE 309 -#define TYPE_TAG_ANY 310 -#define TYPE_TAG_NONE 311 -#define PERCENT_UNION 312 - - +#define PERCENT_FLAG 279 +#define PERCENT_FILE_PREFIX 280 +#define PERCENT_GLR_PARSER 281 +#define PERCENT_INITIAL_ACTION 282 +#define PERCENT_LANGUAGE 283 +#define PERCENT_NAME_PREFIX 284 +#define PERCENT_NO_DEFAULT_PREC 285 +#define PERCENT_NO_LINES 286 +#define PERCENT_NONDETERMINISTIC_PARSER 287 +#define PERCENT_OUTPUT 288 +#define PERCENT_REQUIRE 289 +#define PERCENT_SKELETON 290 +#define PERCENT_START 291 +#define PERCENT_TOKEN_TABLE 292 +#define PERCENT_VERBOSE 293 +#define PERCENT_YACC 294 +#define BRACED_CODE 295 +#define BRACED_PREDICATE 296 +#define BRACKETED_ID 297 +#define CHAR 298 +#define EPILOGUE 299 +#define EQUAL 300 +#define ID 301 +#define ID_COLON 302 +#define PERCENT_PERCENT 303 +#define PIPE 304 +#define PROLOGUE 305 +#define SEMICOLON 306 +#define TAG 307 +#define TAG_ANY 308 +#define TAG_NONE 309 +#define PERCENT_PARAM 310 +#define PERCENT_UNION 311 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { -/* Line 350 of yacc.c */ -#line 114 "parse-gram.y" +/* Line 345 of yacc.c */ +#line 108 "src/parse-gram.y" + assoc assoc; + char *code; + char const *chars; + int integer; + named_ref *named_ref; symbol *symbol; symbol_list *list; - int integer; - char const *chars; - char *code; - assoc assoc; uniqstr uniqstr; unsigned char character; - named_ref *named_ref; +/* Line 345 of yacc.c */ +#line 246 "src/parse-gram.y" + + param_type param; -/* Line 350 of yacc.c */ -#line 342 "parse-gram.c" +/* Line 345 of yacc.c */ +#line 425 "src/parse-gram.y" +code_props_type code_type; + +/* Line 345 of yacc.c */ +#line 326 "src/parse-gram.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif @@@ -336,68 -354,32 +337,68 @@@ typedef struct YYLTYP int last_line; int last_column; } YYLTYPE; -# define yyltype YYLTYPE /* obsolescent; will be withdrawn */ # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int gram_parse (void *YYPARSE_PARAM); -#else -int gram_parse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus int gram_parse (void); -#else -int gram_parse (); -#endif -#endif /* ! YYPARSE_PARAM */ -#endif /* !GRAM_Y_TAB_H */ +#endif /* !GRAM_SRC_PARSE_GRAM_H */ /* Copy the second part of user declarations. */ -/* Line 353 of yacc.c */ -#line 382 "parse-gram.c" +/* Line 348 of yacc.c */ +#line 352 "src/parse-gram.c" +/* Unqualified %code blocks. */ +/* Line 349 of yacc.c */ +#line 57 "src/parse-gram.y" + + static int current_prec = 0; + static location current_lhs_location; + static named_ref *current_lhs_named_ref; + static symbol *current_lhs_symbol; + static symbol_class current_class = unknown_sym; + static uniqstr current_type = NULL; + + /** Set the new current left-hand side symbol, possibly common + * to several right-hand side parts of rule. + */ + static + void + current_lhs(symbol *sym, location loc, named_ref *ref) + { + current_lhs_symbol = sym; + current_lhs_location = loc; + /* In order to simplify memory management, named references for lhs + are always assigned by deep copy into the current symbol_list + node. This is because a single named-ref in the grammar may + result in several uses when the user factors lhs between several + rules using "|". Therefore free the parser's original copy. */ + free (current_lhs_named_ref); + current_lhs_named_ref = ref; + } + + #define YYTYPE_INT16 int_fast16_t + #define YYTYPE_INT8 int_fast8_t + #define YYTYPE_UINT16 uint_fast16_t + #define YYTYPE_UINT8 uint_fast8_t + +/* Line 349 of yacc.c */ +#line 235 "src/parse-gram.y" + + /** Add a lex-param and/or a parse-param. + * + * \param type where to push this formal argument. + * \param decl the formal argument. Destroyed. + * \param loc the location in the source. + */ + static void add_param (param_type type, char *decl, location loc); + static param_type current_param = param_none; + + +/* Line 349 of yacc.c */ +#line 401 "src/parse-gram.c" #ifdef short # undef short @@@ -411,8 -393,11 +412,8 @@@ typedef unsigned char yytype_uint8 #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; -#elif (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -typedef signed char yytype_int8; #else -typedef short int yytype_int8; +typedef signed char yytype_int8; #endif #ifdef YYTYPE_UINT16 @@@ -432,7 -417,8 +433,7 @@@ typedef short int yytype_int16 # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# elif ! defined YYSIZE_T # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else @@@ -455,19 -441,37 +456,19 @@@ #endif /* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ +#ifdef __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif -/* Identity function, used to suppress warnings about constant conditions. */ -#ifndef lint -# define YYID(n) (n) -#else -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static int -YYID (int yyi) -#else -static int -YYID (yyi) - int yyi; -#endif -{ - return yyi; -} -#endif - #if 1 /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely @@@ -483,7 -487,7 +484,7 @@@ # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) + && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 @@@ -491,13 -495,15 +492,13 @@@ # endif # ifndef YYMALLOC # define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# if ! defined malloc && ! defined EXIT_SUCCESS void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif @@@ -508,8 -514,8 +509,8 @@@ #if (! defined yyoverflow \ && (! defined __cplusplus \ - || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ - && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ + && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc @@@ -535,16 -541,16 +536,16 @@@ elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (YYID (0)) +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) #endif @@@ -563,7 -569,7 +564,7 @@@ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ - while (YYID (0)) + while (0) # endif # endif #endif /* !YYCOPY_NEEDED */ @@@ -571,27 -577,25 +572,27 @@@ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 160 +#define YYLAST 163 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 58 +#define YYNTOKENS 57 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 34 +#define YYNNTS 38 /* YYNRULES -- Number of rules. */ -#define YYNRULES 108 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 148 +#define YYNRULES 112 +/* YYNSTATES -- Number of states. */ +#define YYNSTATES 149 -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned + by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 312 +#define YYMAXUTOK 311 -#define YYTRANSLATE(YYX) \ +#define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, without out-of-bounds checking. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@@ -625,25 -629,74 +626,25 @@@ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57 + 55, 56 }; #if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const yytype_uint16 yyprhs[] = -{ - 0, 0, 3, 8, 9, 12, 14, 16, 18, 22, - 24, 27, 29, 32, 35, 38, 42, 44, 47, 50, - 53, 55, 58, 62, 64, 66, 69, 73, 76, 78, - 81, 84, 86, 88, 90, 92, 94, 96, 99, 103, - 107, 109, 111, 114, 118, 119, 121, 125, 126, 130, - 131, 135, 139, 143, 145, 147, 149, 150, 152, 154, - 157, 159, 162, 164, 167, 169, 172, 174, 176, 178, - 180, 182, 184, 187, 190, 194, 196, 199, 201, 204, - 206, 209, 212, 213, 218, 220, 224, 227, 228, 232, - 236, 240, 244, 248, 249, 251, 253, 255, 256, 258, - 260, 262, 264, 266, 268, 270, 272, 274, 275 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yytype_int8 yyrhs[] = -{ - 59, 0, -1, 60, 50, 77, 91, -1, -1, 60, - 61, -1, 62, -1, 52, -1, 17, -1, 19, 84, - 85, -1, 20, -1, 20, 3, -1, 21, -1, 22, - 4, -1, 23, 4, -1, 24, 3, -1, 24, 47, - 3, -1, 25, -1, 26, 43, -1, 27, 3, -1, - 28, 43, -1, 29, -1, 30, 3, -1, 30, 47, - 3, -1, 32, -1, 33, -1, 34, 3, -1, 34, - 47, 3, -1, 35, 43, -1, 36, -1, 37, 3, - -1, 38, 3, -1, 40, -1, 41, -1, 42, -1, - 53, -1, 67, -1, 64, -1, 39, 89, -1, 8, - 43, 73, -1, 9, 43, 73, -1, 18, -1, 31, - -1, 16, 86, -1, 16, 48, 86, -1, -1, 48, - -1, 57, 63, 86, -1, -1, 6, 65, 76, -1, - -1, 5, 66, 76, -1, 7, 54, 72, -1, 68, - 69, 70, -1, 10, -1, 11, -1, 12, -1, -1, - 54, -1, 71, -1, 70, 71, -1, 89, -1, 89, - 4, -1, 89, -1, 72, 89, -1, 74, -1, 73, - 74, -1, 89, -1, 54, -1, 55, -1, 56, -1, - 54, -1, 87, -1, 87, 4, -1, 87, 90, -1, - 87, 4, 90, -1, 75, -1, 76, 75, -1, 78, - -1, 77, 78, -1, 79, -1, 62, 53, -1, 1, - 53, -1, -1, 88, 83, 80, 81, -1, 82, -1, - 81, 51, 82, -1, 81, 53, -1, -1, 82, 89, - 83, -1, 82, 43, 83, -1, 82, 13, 89, -1, - 82, 14, 4, -1, 82, 15, 54, -1, -1, 44, - -1, 48, -1, 3, -1, -1, 48, -1, 3, -1, - 43, -1, 48, -1, 45, -1, 49, -1, 87, -1, - 90, -1, 3, -1, -1, 50, 46, -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ + /* YYRLINEYYN -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 229, 229, 237, 239, 243, 244, 254, 255, 260, - 261, 266, 267, 268, 269, 270, 271, 276, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 310, - 311, 335, 336, 337, 338, 342, 343, 344, 348, 360, - 372, 376, 380, 387, 402, 403, 407, 419, 419, 424, - 424, 429, 440, 455, 456, 457, 461, 462, 467, 469, - 474, 475, 480, 482, 487, 488, 492, 493, 494, 495, - 500, 505, 510, 516, 522, 533, 534, 543, 544, 550, - 551, 552, 559, 559, 567, 568, 569, 574, 576, 578, - 580, 582, 584, 589, 591, 602, 603, 608, 609, 610, - 619, 639, 641, 650, 655, 656, 661, 668, 670 + 0, 271, 271, 279, 281, 285, 286, 296, 300, 305, + 306, 311, 316, 317, 318, 319, 320, 325, 334, 335, + 336, 337, 338, 339, 340, 341, 341, 342, 343, 367, + 368, 369, 370, 374, 375, 384, 385, 386, 390, 402, + 406, 410, 417, 428, 429, 439, 440, 444, 456, 456, + 461, 461, 466, 477, 492, 493, 494, 495, 499, 500, + 505, 507, 512, 513, 518, 520, 525, 526, 530, 531, + 535, 536, 537, 542, 547, 552, 558, 564, 575, 576, + 585, 586, 592, 593, 594, 601, 601, 609, 610, 611, + 616, 618, 620, 622, 624, 626, 628, 633, 635, 645, + 646, 651, 652, 653, 662, 682, 684, 693, 698, 699, + 704, 711, 713 }; #endif @@@ -654,32 -707,32 +655,32 @@@ static const char *const yytname[] { "\"end of file\"", "error", "$undefined", "\"string\"", "\"integer\"", "\"%token\"", "\"%nterm\"", "\"%type\"", "\"%destructor\"", - "\"%printer\"", "\"%left\"", "\"%right\"", "\"%nonassoc\"", "\"%prec\"", - "\"%dprec\"", "\"%merge\"", "\"%code\"", "\"%debug\"", + "\"%printer\"", "\"%left\"", "\"%right\"", "\"%nonassoc\"", + "\"%precedence\"", "\"%prec\"", "\"%dprec\"", "\"%merge\"", "\"%code\"", "\"%default-prec\"", "\"%define\"", "\"%defines\"", "\"%error-verbose\"", - "\"%expect\"", "\"%expect-rr\"", "\"%file-prefix\"", "\"%glr-parser\"", - "\"%initial-action\"", "\"%language\"", "\"%lex-param\"", - "\"%locations\"", "\"%name-prefix\"", "\"%no-default-prec\"", - "\"%no-lines\"", "\"%nondeterministic-parser\"", "\"%output\"", - "\"%parse-param\"", "\"%pure-parser\"", "\"%require\"", "\"%skeleton\"", - "\"%start\"", "\"%token-table\"", "\"%verbose\"", "\"%yacc\"", - "\"{...}\"", "\"[identifier]\"", "\"char\"", "\"epilogue\"", "\"=\"", - "\"identifier\"", "\"identifier:\"", "\"%%\"", "\"|\"", "\"%{...%}\"", - "\";\"", "\"type\"", "\"<*>\"", "\"<>\"", "\"%union\"", "$accept", - "input", "prologue_declarations", "prologue_declaration", - "grammar_declaration", "union_name", "symbol_declaration", "$@1", "$@2", - "precedence_declaration", "precedence_declarator", "type.opt", + "\"%expect\"", "\"%expect-rr\"", "\"%\"", "\"%file-prefix\"", + "\"%glr-parser\"", "\"%initial-action\"", "\"%language\"", + "\"%name-prefix\"", "\"%no-default-prec\"", "\"%no-lines\"", + "\"%nondeterministic-parser\"", "\"%output\"", "\"%require\"", + "\"%skeleton\"", "\"%start\"", "\"%token-table\"", "\"%verbose\"", + "\"%yacc\"", "\"{...}\"", "\"%?{...}\"", "\"[identifier]\"", "\"char\"", + "\"epilogue\"", "\"=\"", "\"identifier\"", "\"identifier:\"", "\"%%\"", + "\"|\"", "\"%{...%}\"", "\";\"", "\"\"", "\"<*>\"", "\"<>\"", + "\"%param\"", "\"%union\"", "$accept", "input", "prologue_declarations", + "prologue_declaration", "$@1", "params", "grammar_declaration", + "code_props_type", "union_name", "symbol_declaration", "$@2", "$@3", + "precedence_declaration", "precedence_declarator", "tag.opt", "symbols.prec", "symbol.prec", "symbols.1", "generic_symlist", - "generic_symlist_item", "symbol_def", "symbol_defs.1", "grammar", - "rules_or_grammar_declaration", "rules", "$@3", "rhses.1", "rhs", + "generic_symlist_item", "tag", "symbol_def", "symbol_defs.1", "grammar", + "rules_or_grammar_declaration", "rules", "$@4", "rhses.1", "rhs", "named_ref.opt", "variable", "content.opt", "braceless", "id", "id_colon", "symbol", "string_as_id", "epilogue.opt", YY_NULL }; #endif # ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ +/* YYTOKNUM[NUM] -- (External) token number corresponding to the + (internal) symbol number NUM (which must be that of a token). */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, @@@ -687,191 -740,201 +688,191 @@@ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312 + 305, 306, 307, 308, 309, 310, 311 }; # endif -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = -{ - 0, 58, 59, 60, 60, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 63, 63, 62, 65, 64, 66, - 64, 64, 67, 68, 68, 68, 69, 69, 70, 70, - 71, 71, 72, 72, 73, 73, 74, 74, 74, 74, - 75, 75, 75, 75, 75, 76, 76, 77, 77, 78, - 78, 78, 80, 79, 81, 81, 81, 82, 82, 82, - 82, 82, 82, 83, 83, 84, 84, 85, 85, 85, - 86, 87, 87, 88, 89, 89, 90, 91, 91 -}; +#define YYPACT_NINF -88 -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +#define yypact_value_is_default(yystate) \ + ((yystate) == (-88)) + +#define YYTABLE_NINF -112 + +#define yytable_value_is_error(yytable_value) \ + 0 + + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +static const yytype_int16 yypact[] = { - 0, 2, 4, 0, 2, 1, 1, 1, 3, 1, - 2, 1, 2, 2, 2, 3, 1, 2, 2, 2, - 1, 2, 3, 1, 1, 2, 3, 2, 1, 2, - 2, 1, 1, 1, 1, 1, 1, 2, 3, 3, - 1, 1, 2, 3, 0, 1, 3, 0, 3, 0, - 3, 3, 3, 1, 1, 1, 0, 1, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, - 1, 1, 2, 2, 3, 1, 2, 1, 2, 1, - 2, 2, 0, 4, 1, 3, 2, 0, 3, 3, - 3, 3, 3, 0, 1, 1, 1, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 0, 2 + -88, 42, 107, -88, -88, -88, 8, -88, -88, -88, + -88, -88, -88, 19, -88, 12, 60, -88, 66, 72, + -88, 2, -88, 39, 83, 35, -88, -88, -88, 36, + 87, 88, 32, -88, -88, -88, 15, -88, -88, -88, + 46, -88, -88, 55, -88, -88, 45, -2, -2, 32, + -88, 58, -88, -88, -88, 31, -88, -88, -88, -88, + 97, -88, -88, -88, 98, -88, 100, -88, -88, -88, + -88, -88, -88, -88, -88, 56, -88, 57, 1, -88, + -88, 62, 69, -88, 58, 0, -88, 32, -88, -88, + -2, 85, -2, 32, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, 77, -88, -88, -88, -88, -88, + 70, -88, -88, -88, -88, 0, -88, -88, -88, 32, + -88, 102, -88, 119, -88, -88, -88, -88, -88, -88, + -88, -88, -88, 33, 53, -88, -88, 32, 143, 71, + 62, -88, 62, 53, -88, -88, -88, -88, -88 }; -/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ + /* YYDEFACT[S] -- default reduction number in state S. Performed when + YYTABLE does not specify something else to do. Zero means the default + is an error. */ static const yytype_uint8 yydefact[] = { - 3, 0, 0, 1, 49, 47, 0, 0, 0, 53, - 54, 55, 0, 7, 40, 0, 9, 11, 0, 0, - 0, 16, 0, 0, 0, 20, 0, 41, 23, 24, - 0, 0, 28, 0, 0, 0, 31, 32, 33, 0, - 6, 34, 44, 4, 5, 36, 35, 56, 0, 0, - 0, 0, 0, 100, 0, 42, 96, 95, 97, 10, - 12, 13, 14, 0, 17, 18, 19, 21, 0, 25, - 0, 27, 29, 30, 106, 102, 101, 104, 37, 105, - 0, 103, 0, 0, 77, 79, 93, 45, 0, 57, - 0, 70, 75, 50, 71, 48, 51, 62, 67, 68, - 69, 38, 64, 66, 39, 43, 99, 98, 8, 15, - 22, 26, 81, 80, 0, 78, 2, 94, 82, 46, - 52, 58, 60, 76, 72, 73, 63, 65, 108, 87, - 59, 61, 74, 83, 84, 87, 86, 0, 0, 0, - 93, 93, 85, 90, 91, 92, 89, 88 + 3, 0, 0, 1, 50, 48, 0, 43, 44, 54, + 55, 56, 57, 0, 39, 0, 9, 11, 0, 0, + 7, 0, 16, 0, 0, 0, 40, 21, 22, 0, + 0, 0, 0, 29, 30, 31, 0, 6, 32, 25, + 45, 4, 5, 0, 36, 35, 58, 0, 0, 0, + 104, 0, 41, 100, 99, 101, 10, 12, 13, 14, + 0, 17, 18, 19, 0, 23, 0, 27, 28, 110, + 106, 105, 108, 37, 109, 0, 107, 0, 0, 80, + 82, 97, 0, 46, 0, 0, 59, 0, 73, 78, + 51, 74, 49, 52, 64, 42, 103, 102, 8, 15, + 20, 24, 84, 83, 0, 81, 2, 98, 85, 34, + 26, 47, 70, 71, 72, 38, 66, 69, 68, 53, + 60, 62, 79, 75, 76, 65, 112, 90, 33, 67, + 61, 63, 77, 86, 87, 90, 89, 0, 0, 0, + 97, 93, 97, 88, 94, 95, 96, 92, 91 }; -/* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int16 yydefgoto[] = + /* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = { - -1, 1, 2, 43, 82, 88, 45, 49, 48, 46, - 47, 90, 120, 121, 96, 101, 102, 92, 93, 83, - 84, 85, 129, 133, 134, 118, 58, 108, 55, 77, - 86, 103, 79, 116 + -88, -88, -88, -88, -88, -88, 146, -88, -88, -88, + -88, -88, -88, -88, -88, -88, 30, -88, -88, 37, + -88, -26, 103, -88, 75, -88, -88, -88, 21, -57, + -88, -88, -11, -18, -88, -32, -87, -88 }; -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -91 -static const yytype_int16 yypact[] = + /* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = { - -91, 3, 103, -91, -91, -91, -36, 2, 10, -91, - -91, -91, 9, -91, -91, 32, 60, -91, 65, 67, - 27, -91, 41, 73, 51, -91, 39, -91, -91, -91, - 40, 52, -91, 93, 95, 33, -91, -91, -91, 15, - -91, -91, 53, -91, -91, -91, -91, 46, 43, 43, - 33, 11, 11, -91, 61, -91, -91, -91, 35, -91, - -91, -91, -91, 100, -91, -91, -91, -91, 102, -91, - 113, -91, -91, -91, -91, -91, -91, -91, -91, -91, - 64, -91, 94, 1, -91, -91, 62, -91, 61, -91, - 33, -91, -91, 43, 86, 43, 33, -91, -91, -91, - -91, 11, -91, -91, 11, -91, -91, -91, -91, -91, - -91, -91, -91, -91, 72, -91, -91, -91, -91, -91, - 33, -91, 142, -91, 145, -91, -91, -91, -91, -91, - -91, -91, -91, 17, 34, -91, -91, 33, 146, 97, - 62, 62, 34, -91, -91, -91, -91, -91 + -1, 1, 2, 41, 82, 110, 77, 43, 84, 44, + 48, 47, 45, 46, 87, 119, 120, 93, 115, 116, + 117, 89, 90, 78, 79, 80, 127, 133, 134, 108, + 55, 98, 52, 72, 81, 118, 74, 106 }; -/* YYPGOTO[NTERM-NUM]. */ -static const yytype_int16 yypgoto[] = + /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If YYTABLE_NINF, syntax error. */ +static const yytype_int16 yytable[] = { - -91, -91, -91, -91, 147, -91, -91, -91, -91, -91, - -91, -91, -91, 37, -91, 106, -60, -33, 105, -91, - 69, -91, -91, -91, 24, -48, -91, -91, -49, -20, - -91, -35, -90, -91 + 73, -111, 75, 69, 124, 59, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 53, 75, 94, 13, 14, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 91, + 91, 26, 13, 14, 96, 69, 132, 32, 63, 65, + 95, 70, 3, 70, 71, 26, 71, 60, 76, 104, + 88, 32, 112, 113, 114, 121, 69, 40, 54, 50, + 49, 125, 76, 56, 122, 51, 122, 137, 138, 139, + 57, 40, 91, 111, 91, 70, 58, 97, 71, 61, + 64, 66, 135, 147, 136, 148, 62, 121, 69, 123, + 67, 68, 83, 140, 141, 85, 70, 86, 50, 71, + 99, 100, 142, 101, 107, 144, 131, 102, 103, 109, + 128, 142, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 126, 69, 146, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 145, 42, 130, + 0, 92, 129, 105, 0, 36, 143, 37, 38, 0, + 0, 0, 39, 40 }; -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -108 -static const yytype_int16 yytable[] = +static const yytype_int16 yycheck[] = { - 78, -107, 80, 3, 125, 105, 4, 5, 6, 7, - 8, 9, 10, 11, 74, 97, 80, 12, 50, 14, - 4, 5, 6, 7, 8, 9, 10, 11, 94, 94, - 62, 12, 27, 14, 132, 56, 74, 74, 106, 119, - 35, 127, 67, 69, 127, 51, 27, 137, 138, 139, - 81, 114, 53, 52, 35, 122, 75, 54, 42, 76, - 123, 126, 123, 59, 81, 98, 99, 100, 135, 60, - 136, 61, 42, 94, 63, 94, 65, 140, 75, 75, - 57, 76, 76, 107, 64, 122, 68, 70, 75, 74, - 124, 76, 146, 147, 66, 71, 72, 91, 73, 141, - 89, 87, 143, 109, 53, 110, 117, 141, 4, 5, - 6, 7, 8, 9, 10, 11, 111, 112, 128, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 32, 0, 1, 3, 91, 3, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 3, 1, 49, 17, 18, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 47, + 48, 30, 17, 18, 3, 3, 123, 36, 3, 3, + 51, 43, 0, 43, 46, 30, 46, 45, 47, 48, + 52, 36, 52, 53, 54, 87, 3, 56, 46, 40, + 52, 93, 47, 3, 90, 46, 92, 14, 15, 16, + 4, 56, 90, 84, 92, 43, 4, 46, 46, 40, + 45, 45, 49, 140, 51, 142, 3, 119, 3, 4, + 3, 3, 46, 40, 41, 40, 43, 52, 40, 46, + 3, 3, 134, 3, 42, 137, 4, 51, 51, 40, + 40, 143, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 44, 3, 52, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 131, 113, 74, 44, - 144, 145, 115, 39, 95, 40, 41, 130, 104, 142, - 42 + 33, 34, 35, 36, 37, 38, 39, 4, 2, 119, + -1, 48, 115, 78, -1, 48, 135, 50, 51, -1, + -1, -1, 55, 56 }; -#define yypact_value_is_default(yystate) \ - ((yystate) == (-91)) - -#define yytable_value_is_error(yytable_value) \ - YYID (0) + /* STOS_[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 58, 59, 0, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 48, 50, 51, 55, + 56, 60, 63, 64, 66, 69, 70, 68, 67, 52, + 40, 46, 89, 3, 46, 87, 3, 4, 4, 3, + 45, 40, 3, 3, 45, 3, 45, 3, 3, 3, + 43, 46, 90, 92, 93, 1, 47, 63, 80, 81, + 82, 91, 61, 46, 65, 40, 52, 71, 52, 78, + 79, 90, 79, 74, 92, 89, 3, 46, 88, 3, + 3, 3, 51, 51, 48, 81, 94, 42, 86, 40, + 62, 89, 52, 53, 54, 75, 76, 77, 92, 72, + 73, 92, 78, 4, 93, 92, 44, 83, 40, 76, + 73, 4, 93, 84, 85, 49, 51, 14, 15, 16, + 40, 41, 92, 85, 92, 4, 52, 86, 86 +}; -static const yytype_uint8 yycheck[] = + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = { - 35, 0, 1, 0, 94, 54, 5, 6, 7, 8, - 9, 10, 11, 12, 3, 50, 1, 16, 54, 18, - 5, 6, 7, 8, 9, 10, 11, 12, 48, 49, - 3, 16, 31, 18, 124, 3, 3, 3, 3, 88, - 39, 101, 3, 3, 104, 43, 31, 13, 14, 15, - 49, 50, 43, 43, 39, 90, 45, 48, 57, 48, - 93, 96, 95, 3, 49, 54, 55, 56, 51, 4, - 53, 4, 57, 93, 47, 95, 3, 43, 45, 45, - 48, 48, 48, 48, 43, 120, 47, 47, 45, 3, - 4, 48, 140, 141, 43, 43, 3, 54, 3, 134, - 54, 48, 137, 3, 43, 3, 44, 142, 5, 6, - 7, 8, 9, 10, 11, 12, 3, 53, 46, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 4, 53, 3, 2, - 4, 54, 83, 50, 49, 52, 53, 120, 52, 135, - 57 + 0, 57, 58, 59, 59, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 61, 60, 60, 60, 60, + 60, 60, 60, 62, 62, 63, 63, 63, 63, 63, + 63, 63, 63, 64, 64, 65, 65, 63, 67, 66, + 68, 66, 66, 69, 70, 70, 70, 70, 71, 71, + 72, 72, 73, 73, 74, 74, 75, 75, 76, 76, + 77, 77, 77, 78, 78, 78, 78, 78, 79, 79, + 80, 80, 81, 81, 81, 83, 82, 84, 84, 84, + 85, 85, 85, 85, 85, 85, 85, 86, 86, 87, + 87, 88, 88, 88, 89, 90, 90, 91, 92, 92, + 93, 94, 94 }; -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = + /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = { - 0, 59, 60, 0, 5, 6, 7, 8, 9, 10, - 11, 12, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 50, - 52, 53, 57, 61, 62, 64, 67, 68, 66, 65, - 54, 43, 43, 43, 48, 86, 3, 48, 84, 3, - 4, 4, 3, 47, 43, 3, 43, 3, 47, 3, - 47, 43, 3, 3, 3, 45, 48, 87, 89, 90, - 1, 49, 62, 77, 78, 79, 88, 48, 63, 54, - 69, 54, 75, 76, 87, 76, 72, 89, 54, 55, - 56, 73, 74, 89, 73, 86, 3, 48, 85, 3, - 3, 3, 53, 53, 50, 78, 91, 44, 83, 86, - 70, 71, 89, 75, 4, 90, 89, 74, 46, 80, - 71, 4, 90, 81, 82, 51, 53, 13, 14, 15, - 43, 89, 82, 89, 4, 54, 83, 83 + 0, 2, 4, 0, 2, 1, 1, 1, 3, 1, + 2, 1, 2, 2, 2, 3, 1, 2, 2, 2, + 3, 1, 1, 2, 3, 0, 3, 2, 2, 1, + 1, 1, 1, 2, 1, 1, 1, 2, 3, 1, + 1, 2, 3, 1, 1, 0, 1, 3, 0, 3, + 0, 3, 3, 3, 1, 1, 1, 1, 0, 1, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 3, 1, 2, + 1, 2, 1, 2, 2, 0, 4, 1, 3, 2, + 0, 3, 3, 2, 3, 3, 3, 0, 1, 1, + 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 2 }; -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. However, - YYFAIL appears to be in use. Nevertheless, it is formally deprecated - in Bison 2.4.2's NEWS entry, where a plan to phase it out is - discussed. */ - -#define YYFAIL goto yyerrlab -#if defined YYFAIL - /* This is here to suppress warnings from the GCC cpp's - -Wunused-macros. Normally we don't worry about that warning, but - some users do, and we want to make it easy for users to remove - YYFAIL uses, which will produce warnings from Bison 2.5. */ -#endif + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + #define YYRECOVERING() (!!yyerrstatus) @@@ -889,14 -952,13 +890,14 @@@ d else \ { \ yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (YYID (0)) + YYERROR; \ + } \ +while (0) + +#define YYTERROR 1 +#define YYERRCODE 256 -#define YYTERROR 1 -#define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends @@@ -905,7 -967,7 +906,7 @@@ #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ - if (YYID (N)) \ + if (N) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ @@@ -919,21 -981,23 +920,21 @@@ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ - while (YYID (0)) + while (0) #endif #define YYRHSLOC(Rhs, K) ((Rhs)[K]) - - /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL -# define YY_LOCATION_PRINT(File, Loc) \ - fprintf (File, "%d.%d-%d.%d", \ - (Loc).first_line, (Loc).first_column, \ - (Loc).last_line, (Loc).last_column) +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif @@@ -956,231 -1020,183 +957,231 @@@ # define YYFPRINTF fprintf # endif -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (YYID (0)) +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value, Location); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (YYID (0)) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value, Location); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp) -#else -static void -yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; - YYLTYPE const * const yylocationp; -#endif { FILE *yyo = yyoutput; - YYUSE (yyo); + YYUSE(yyo); + YYUSE (yylocationp); if (!yyvaluep) return; - YYUSE (yylocationp); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# else - YYUSE (yyoutput); # endif switch (yytype) { - case 3: /* "string" */ -/* Line 809 of yacc.c */ -#line 204 "parse-gram.y" - { fputs (quotearg_style (c_quoting_style, ((*yyvaluep).chars)), stderr); }; -/* Line 809 of yacc.c */ -#line 1077 "parse-gram.c" - break; - case 4: /* "integer" */ -/* Line 809 of yacc.c */ -#line 216 "parse-gram.y" - { fprintf (stderr, "%d", ((*yyvaluep).integer)); }; -/* Line 809 of yacc.c */ -#line 1084 "parse-gram.c" - break; - case 43: /* "{...}" */ -/* Line 809 of yacc.c */ -#line 206 "parse-gram.y" - { fprintf (stderr, "{\n%s\n}", ((*yyvaluep).code)); }; -/* Line 809 of yacc.c */ -#line 1091 "parse-gram.c" - break; - case 44: /* "[identifier]" */ -/* Line 809 of yacc.c */ -#line 211 "parse-gram.y" - { fprintf (stderr, "[%s]", ((*yyvaluep).uniqstr)); }; -/* Line 809 of yacc.c */ -#line 1098 "parse-gram.c" - break; - case 45: /* "char" */ -/* Line 809 of yacc.c */ -#line 198 "parse-gram.y" - { fputs (char_name (((*yyvaluep).character)), stderr); }; -/* Line 809 of yacc.c */ -#line 1105 "parse-gram.c" - break; - case 46: /* "epilogue" */ -/* Line 809 of yacc.c */ -#line 206 "parse-gram.y" - { fprintf (stderr, "{\n%s\n}", ((*yyvaluep).chars)); }; -/* Line 809 of yacc.c */ -#line 1112 "parse-gram.c" - break; - case 48: /* "identifier" */ -/* Line 809 of yacc.c */ -#line 210 "parse-gram.y" - { fputs (((*yyvaluep).uniqstr), stderr); }; -/* Line 809 of yacc.c */ -#line 1119 "parse-gram.c" - break; - case 49: /* "identifier:" */ -/* Line 809 of yacc.c */ -#line 212 "parse-gram.y" - { fprintf (stderr, "%s:", ((*yyvaluep).uniqstr)); }; -/* Line 809 of yacc.c */ -#line 1126 "parse-gram.c" - break; - case 52: /* "%{...%}" */ -/* Line 809 of yacc.c */ -#line 206 "parse-gram.y" - { fprintf (stderr, "{\n%s\n}", ((*yyvaluep).chars)); }; -/* Line 809 of yacc.c */ -#line 1133 "parse-gram.c" - break; - case 54: /* "type" */ -/* Line 809 of yacc.c */ -#line 213 "parse-gram.y" - { fprintf (stderr, "<%s>", ((*yyvaluep).uniqstr)); }; -/* Line 809 of yacc.c */ -#line 1140 "parse-gram.c" - break; - case 71: /* symbol.prec */ -/* Line 809 of yacc.c */ -#line 219 "parse-gram.y" - { fprintf (stderr, "%s", ((*yyvaluep).symbol)->tag); }; -/* Line 809 of yacc.c */ -#line 1147 "parse-gram.c" - break; - case 84: /* variable */ -/* Line 809 of yacc.c */ -#line 210 "parse-gram.y" - { fputs (((*yyvaluep).uniqstr), stderr); }; -/* Line 809 of yacc.c */ -#line 1154 "parse-gram.c" - break; - case 85: /* content.opt */ -/* Line 809 of yacc.c */ -#line 206 "parse-gram.y" - { fprintf (stderr, "{\n%s\n}", ((*yyvaluep).chars)); }; -/* Line 809 of yacc.c */ -#line 1161 "parse-gram.c" - break; - case 86: /* braceless */ -/* Line 809 of yacc.c */ -#line 206 "parse-gram.y" - { fprintf (stderr, "{\n%s\n}", ((*yyvaluep).chars)); }; -/* Line 809 of yacc.c */ -#line 1168 "parse-gram.c" - break; - case 87: /* id */ -/* Line 809 of yacc.c */ -#line 219 "parse-gram.y" - { fprintf (stderr, "%s", ((*yyvaluep).symbol)->tag); }; -/* Line 809 of yacc.c */ -#line 1175 "parse-gram.c" - break; - case 88: /* id_colon */ -/* Line 809 of yacc.c */ -#line 220 "parse-gram.y" - { fprintf (stderr, "%s:", ((*yyvaluep).symbol)->tag); }; -/* Line 809 of yacc.c */ -#line 1182 "parse-gram.c" - break; - case 89: /* symbol */ -/* Line 809 of yacc.c */ -#line 219 "parse-gram.y" - { fprintf (stderr, "%s", ((*yyvaluep).symbol)->tag); }; -/* Line 809 of yacc.c */ -#line 1189 "parse-gram.c" - break; - case 90: /* string_as_id */ -/* Line 809 of yacc.c */ -#line 219 "parse-gram.y" - { fprintf (stderr, "%s", ((*yyvaluep).symbol)->tag); }; -/* Line 809 of yacc.c */ -#line 1196 "parse-gram.c" - break; + case 3: // "string" +/* Line 707 of yacc.c */ +#line 195 "src/parse-gram.y" + { fputs (quotearg_style (c_quoting_style, ((*yyvaluep).chars)), yyo); } +/* Line 707 of yacc.c */ +#line 1001 "src/parse-gram.c" + break; + + case 4: // "integer" +/* Line 707 of yacc.c */ +#line 208 "src/parse-gram.y" + { fprintf (yyo, "%d", ((*yyvaluep).integer)); } +/* Line 707 of yacc.c */ +#line 1009 "src/parse-gram.c" + break; + + case 24: // "%" +/* Line 707 of yacc.c */ +#line 204 "src/parse-gram.y" + { fprintf (yyo, "%%%s", ((*yyvaluep).uniqstr)); } +/* Line 707 of yacc.c */ +#line 1017 "src/parse-gram.c" + break; + + case 40: // "{...}" +/* Line 707 of yacc.c */ +#line 197 "src/parse-gram.y" + { fprintf (yyo, "{\n%s\n}", ((*yyvaluep).code)); } +/* Line 707 of yacc.c */ +#line 1025 "src/parse-gram.c" + break; + + case 42: // "[identifier]" +/* Line 707 of yacc.c */ +#line 202 "src/parse-gram.y" + { fprintf (yyo, "[%s]", ((*yyvaluep).uniqstr)); } +/* Line 707 of yacc.c */ +#line 1033 "src/parse-gram.c" + break; + + case 43: // "char" +/* Line 707 of yacc.c */ +#line 189 "src/parse-gram.y" + { fputs (char_name (((*yyvaluep).character)), yyo); } +/* Line 707 of yacc.c */ +#line 1041 "src/parse-gram.c" + break; + + case 44: // "epilogue" +/* Line 707 of yacc.c */ +#line 197 "src/parse-gram.y" + { fprintf (yyo, "{\n%s\n}", ((*yyvaluep).chars)); } +/* Line 707 of yacc.c */ +#line 1049 "src/parse-gram.c" + break; + + case 46: // "identifier" +/* Line 707 of yacc.c */ +#line 201 "src/parse-gram.y" + { fputs (((*yyvaluep).uniqstr), yyo); } +/* Line 707 of yacc.c */ +#line 1057 "src/parse-gram.c" + break; + + case 47: // "identifier:" +/* Line 707 of yacc.c */ +#line 203 "src/parse-gram.y" + { fprintf (yyo, "%s:", ((*yyvaluep).uniqstr)); } +/* Line 707 of yacc.c */ +#line 1065 "src/parse-gram.c" + break; + + case 50: // "%{...%}" +/* Line 707 of yacc.c */ +#line 197 "src/parse-gram.y" + { fprintf (yyo, "{\n%s\n}", ((*yyvaluep).chars)); } +/* Line 707 of yacc.c */ +#line 1073 "src/parse-gram.c" + break; + + case 52: // "" +/* Line 707 of yacc.c */ +#line 205 "src/parse-gram.y" + { fprintf (yyo, "<%s>", ((*yyvaluep).uniqstr)); } +/* Line 707 of yacc.c */ +#line 1081 "src/parse-gram.c" + break; + + case 55: // "%param" +/* Line 707 of yacc.c */ +#line 251 "src/parse-gram.y" + { + switch (((*yyvaluep).param)) + { +#define CASE(In, Out) \ + case param_ ## In: fputs ("%" #Out, stderr); break + CASE(lex, lex-param); + CASE(parse, parse-param); + CASE(both, param); +#undef CASE + case param_none: aver (false); break; + } +} +/* Line 707 of yacc.c */ +#line 1100 "src/parse-gram.c" + break; + + case 64: // code_props_type +/* Line 707 of yacc.c */ +#line 426 "src/parse-gram.y" + { fprintf (yyo, "%s", code_props_type_string (((*yyvaluep).code_type))); } +/* Line 707 of yacc.c */ +#line 1108 "src/parse-gram.c" + break; + + case 73: // symbol.prec +/* Line 707 of yacc.c */ +#line 211 "src/parse-gram.y" + { fprintf (yyo, "%s", ((*yyvaluep).symbol)->tag); } +/* Line 707 of yacc.c */ +#line 1116 "src/parse-gram.c" + break; + + case 77: // tag +/* Line 707 of yacc.c */ +#line 205 "src/parse-gram.y" + { fprintf (yyo, "<%s>", ((*yyvaluep).uniqstr)); } +/* Line 707 of yacc.c */ +#line 1124 "src/parse-gram.c" + break; + + case 87: // variable +/* Line 707 of yacc.c */ +#line 201 "src/parse-gram.y" + { fputs (((*yyvaluep).uniqstr), yyo); } +/* Line 707 of yacc.c */ +#line 1132 "src/parse-gram.c" + break; + + case 88: // content.opt +/* Line 707 of yacc.c */ +#line 197 "src/parse-gram.y" + { fprintf (yyo, "{\n%s\n}", ((*yyvaluep).chars)); } +/* Line 707 of yacc.c */ +#line 1140 "src/parse-gram.c" + break; + + case 89: // braceless +/* Line 707 of yacc.c */ +#line 197 "src/parse-gram.y" + { fprintf (yyo, "{\n%s\n}", ((*yyvaluep).chars)); } +/* Line 707 of yacc.c */ +#line 1148 "src/parse-gram.c" + break; + + case 90: // id +/* Line 707 of yacc.c */ +#line 211 "src/parse-gram.y" + { fprintf (yyo, "%s", ((*yyvaluep).symbol)->tag); } +/* Line 707 of yacc.c */ +#line 1156 "src/parse-gram.c" + break; + + case 91: // id_colon +/* Line 707 of yacc.c */ +#line 212 "src/parse-gram.y" + { fprintf (yyo, "%s:", ((*yyvaluep).symbol)->tag); } +/* Line 707 of yacc.c */ +#line 1164 "src/parse-gram.c" + break; + + case 92: // symbol +/* Line 707 of yacc.c */ +#line 211 "src/parse-gram.y" + { fprintf (yyo, "%s", ((*yyvaluep).symbol)->tag); } +/* Line 707 of yacc.c */ +#line 1172 "src/parse-gram.c" + break; + + case 93: // string_as_id +/* Line 707 of yacc.c */ +#line 211 "src/parse-gram.y" + { fprintf (yyo, "%s", ((*yyvaluep).symbol)->tag); } +/* Line 707 of yacc.c */ +#line 1180 "src/parse-gram.c" + break; + default: - break; + break; } } @@@ -1189,8 -1205,18 +1190,8 @@@ | Print this symbol on YYOUTPUT. | `--------------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp) -#else -static void -yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; - YYLTYPE const * const yylocationp; -#endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); @@@ -1208,8 -1234,16 +1209,8 @@@ | TOP (included). | `------------------------------------------------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) -#else -static void -yy_stack_print (yybottom, yytop) - yytype_int16 *yybottom; - yytype_int16 *yytop; -#endif { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@@ -1220,42 -1254,50 +1221,42 @@@ YYFPRINTF (stderr, "\n"); } -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (YYID (0)) +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void -yy_reduce_print (YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule) -#else -static void -yy_reduce_print (yyvsp, yylsp, yyrule) - YYSTYPE *yyvsp; - YYLTYPE *yylsp; - int yyrule; -#endif +yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule) { + unsigned long int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); + yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], - &(yyvsp[(yyi + 1) - (yynrhs)]) - , &(yylsp[(yyi + 1) - (yynrhs)]) ); + yy_symbol_print (stderr, + yystos[yyssp[yyi + 1 - yynrhs]], + &(yyvsp[(yyi + 1) - (yynrhs)]) + , &(yylsp[(yyi + 1) - (yynrhs)]) ); YYFPRINTF (stderr, "\n"); } } -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyvsp, yylsp, Rule); \ -} while (YYID (0)) +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, yylsp, Rule); \ +} while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ @@@ -1269,7 -1311,7 +1270,7 @@@ int yydebug /* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH +#ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif @@@ -1386,7 -1428,7 +1387,7 @@@ do goto yyerrlab; \ } \ } \ -} while (YYID (0)) +} while (0) /* Discard any previous initial lookahead context because of Event, which may be a lookahead change or an invalidation of the currently @@@ -1409,7 -1451,7 +1410,7 @@@ do Event "\n"); \ yy_lac_established = 0; \ } \ -} while (YYID (0)) +} while (0) #else # define YY_LAC_DISCARD(Event) yy_lac_established = 0 #endif @@@ -1525,8 -1567,15 +1526,8 @@@ yy_lac (yytype_int16 *yyesa, yytype_int # define yystrlen strlen # else /* Return the length of YYSTR. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) -#else -static YYSIZE_T -yystrlen (yystr) - const char *yystr; -#endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) @@@ -1542,8 -1591,16 +1543,8 @@@ # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) -#else -static char * -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -#endif { char *yyd = yydest; const char *yys = yysrc; @@@ -1573,27 -1630,27 +1574,27 @@@ yytnamerr (char *yyres, const char *yys char const *yyp = yystr; for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } do_not_strip_quotes: ; } @@@ -1632,6 -1689,10 +1633,6 @@@ yysyntax_error (YYSIZE_T *yymsg_alloc, int yycount = 0; /* There are many possibilities here to consider: - - Assume YYFAIL is not used. It's too flawed to consider. See - - for details. YYERROR is fine as it does not invoke this - function. - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected @@@ -1746,19 -1807,32 +1747,19 @@@ | Release the memory associated to this symbol. | `-----------------------------------------------*/ -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp) -#else -static void -yydestruct (yymsg, yytype, yyvaluep, yylocationp) - const char *yymsg; - int yytype; - YYSTYPE *yyvaluep; - YYLTYPE *yylocationp; -#endif { - YYUSE (yyvaluep); + YYUSE(yyvaluep); YYUSE (yylocationp); - if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { - default: - break; + break; } } @@@ -1769,8 -1843,27 +1770,8 @@@ | yyparse. | `----------*/ -#ifdef YYPARSE_PARAM -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -yyparse (void *YYPARSE_PARAM) -#else -int -yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -#endif -#else /* ! YYPARSE_PARAM */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) int yyparse (void) -#else -int -yyparse () - -#endif -#endif { /* The lookahead symbol. */ int yychar; @@@ -1876,16 -1969,16 +1877,16 @@@ YYLTYPE yylloc #endif /* User initialization code. */ -/* Line 1572 of yacc.c */ -#line 106 "parse-gram.y" +/* Line 1463 of yacc.c */ +#line 100 "src/parse-gram.y" { /* Bison's grammar can initial empty locations, hence a default location is needed. */ boundary_set (&yylloc.start, current_file, 1, 1); boundary_set (&yylloc.end, current_file, 1, 1); } -/* Line 1572 of yacc.c */ -#line 1981 "parse-gram.c" +/* Line 1463 of yacc.c */ +#line 1889 "src/parse-gram.c" yylsp[0] = yylloc; goto yysetstate; @@@ -1907,26 -2000,26 +1908,26 @@@ #ifdef yyoverflow { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; - YYLTYPE *yyls1 = yyls; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yyls1, yysize * sizeof (*yylsp), - &yystacksize); - - yyls = yyls1; - yyss = yyss1; - yyvs = yyvs1; + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + YYLTYPE *yyls1 = yyls; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yyls1, yysize * sizeof (*yylsp), + &yystacksize); + + yyls = yyls1; + yyss = yyss1; + yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE @@@ -1934,23 -2027,23 +1935,23 @@@ # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; + goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; + yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); - YYSTACK_RELOCATE (yyls_alloc, yyls); + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); + YYSTACK_RELOCATE (yyls_alloc, yyls); # undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ @@@ -1960,10 -2053,10 +1961,10 @@@ yylsp = yyls + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) - YYABORT; + YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); @@@ -2077,216 -2170,192 +2078,216 @@@ yyreduce switch (yyn) { case 6: -/* Line 1787 of yacc.c */ -#line 245 "parse-gram.y" +/* Line 1678 of yacc.c */ +#line 287 "src/parse-gram.y" { code_props plain_code; - code_props_plain_init (&plain_code, (yyvsp[(1) - (1)].chars), (yylsp[(1) - (1)])); + code_props_plain_init (&plain_code, (yyvsp[0].chars), (yylsp[0])); code_props_translate_code (&plain_code); gram_scanner_last_string_free (); muscle_code_grow (union_seen ? "post_prologue" : "pre_prologue", - plain_code.code, (yylsp[(1) - (1)])); + plain_code.code, (yylsp[0])); code_scanner_last_string_free (); } +/* Line 1678 of yacc.c */ +#line 2093 "src/parse-gram.c" break; case 7: -/* Line 1787 of yacc.c */ -#line 254 "parse-gram.y" - { debug_flag = true; } +/* Line 1678 of yacc.c */ +#line 297 "src/parse-gram.y" + { + muscle_percent_define_ensure ((yyvsp[0].uniqstr), (yylsp[0]), true); + } +/* Line 1678 of yacc.c */ +#line 2103 "src/parse-gram.c" break; case 8: -/* Line 1787 of yacc.c */ -#line 256 "parse-gram.y" +/* Line 1678 of yacc.c */ +#line 301 "src/parse-gram.y" { - muscle_percent_define_insert ((yyvsp[(2) - (3)].uniqstr), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].chars), + muscle_percent_define_insert ((yyvsp[-1].uniqstr), (yylsp[-1]), (yyvsp[0].chars), MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE); } +/* Line 1678 of yacc.c */ +#line 2114 "src/parse-gram.c" break; case 9: -/* Line 1787 of yacc.c */ -#line 260 "parse-gram.y" +/* Line 1678 of yacc.c */ +#line 305 "src/parse-gram.y" { defines_flag = true; } +/* Line 1678 of yacc.c */ +#line 2122 "src/parse-gram.c" break; case 10: -/* Line 1787 of yacc.c */ -#line 262 "parse-gram.y" +/* Line 1678 of yacc.c */ +#line 307 "src/parse-gram.y" { defines_flag = true; - spec_defines_file = xstrdup ((yyvsp[(2) - (2)].chars)); + spec_defines_file = xstrdup ((yyvsp[0].chars)); } +/* Line 1678 of yacc.c */ +#line 2133 "src/parse-gram.c" break; case 11: -/* Line 1787 of yacc.c */ -#line 266 "parse-gram.y" - { error_verbose = true; } +/* Line 1678 of yacc.c */ +#line 312 "src/parse-gram.y" + { + muscle_percent_define_insert ("parse.error", (yylsp[0]), "verbose", + MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE); + } +/* Line 1678 of yacc.c */ +#line 2144 "src/parse-gram.c" break; case 12: -/* Line 1787 of yacc.c */ -#line 267 "parse-gram.y" - { expected_sr_conflicts = (yyvsp[(2) - (2)].integer); } +/* Line 1678 of yacc.c */ +#line 316 "src/parse-gram.y" + { expected_sr_conflicts = (yyvsp[0].integer); } +/* Line 1678 of yacc.c */ +#line 2152 "src/parse-gram.c" break; case 13: -/* Line 1787 of yacc.c */ -#line 268 "parse-gram.y" - { expected_rr_conflicts = (yyvsp[(2) - (2)].integer); } +/* Line 1678 of yacc.c */ +#line 317 "src/parse-gram.y" + { expected_rr_conflicts = (yyvsp[0].integer); } +/* Line 1678 of yacc.c */ +#line 2160 "src/parse-gram.c" break; case 14: -/* Line 1787 of yacc.c */ -#line 269 "parse-gram.y" - { spec_file_prefix = (yyvsp[(2) - (2)].chars); } +/* Line 1678 of yacc.c */ +#line 318 "src/parse-gram.y" + { spec_file_prefix = (yyvsp[0].chars); } +/* Line 1678 of yacc.c */ +#line 2168 "src/parse-gram.c" break; case 15: -/* Line 1787 of yacc.c */ -#line 270 "parse-gram.y" - { spec_file_prefix = (yyvsp[(3) - (3)].chars); } +/* Line 1678 of yacc.c */ +#line 319 "src/parse-gram.y" + { spec_file_prefix = (yyvsp[0].chars); } +/* Line 1678 of yacc.c */ +#line 2176 "src/parse-gram.c" break; case 16: -/* Line 1787 of yacc.c */ -#line 272 "parse-gram.y" +/* Line 1678 of yacc.c */ +#line 321 "src/parse-gram.y" { nondeterministic_parser = true; glr_parser = true; } +/* Line 1678 of yacc.c */ +#line 2187 "src/parse-gram.c" break; case 17: -/* Line 1787 of yacc.c */ -#line 277 "parse-gram.y" +/* Line 1678 of yacc.c */ +#line 326 "src/parse-gram.y" { code_props action; - code_props_symbol_action_init (&action, (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); + code_props_symbol_action_init (&action, (yyvsp[0].code), (yylsp[0])); code_props_translate_code (&action); gram_scanner_last_string_free (); - muscle_code_grow ("initial_action", action.code, (yylsp[(2) - (2)])); + muscle_code_grow ("initial_action", action.code, (yylsp[0])); code_scanner_last_string_free (); } +/* Line 1678 of yacc.c */ +#line 2202 "src/parse-gram.c" break; case 18: -/* Line 1787 of yacc.c */ -#line 285 "parse-gram.y" - { language_argmatch ((yyvsp[(2) - (2)].chars), grammar_prio, (yylsp[(1) - (2)])); } +/* Line 1678 of yacc.c */ +#line 334 "src/parse-gram.y" + { language_argmatch ((yyvsp[0].chars), grammar_prio, (yylsp[-1])); } +/* Line 1678 of yacc.c */ +#line 2210 "src/parse-gram.c" break; case 19: -/* Line 1787 of yacc.c */ -#line 286 "parse-gram.y" - { add_param ("lex_param", (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); } +/* Line 1678 of yacc.c */ +#line 335 "src/parse-gram.y" + { spec_name_prefix = (yyvsp[0].chars); } +/* Line 1678 of yacc.c */ +#line 2218 "src/parse-gram.c" break; case 20: -/* Line 1787 of yacc.c */ -#line 287 "parse-gram.y" - { locations_flag = true; } +/* Line 1678 of yacc.c */ +#line 336 "src/parse-gram.y" + { spec_name_prefix = (yyvsp[0].chars); } +/* Line 1678 of yacc.c */ +#line 2226 "src/parse-gram.c" break; case 21: -/* Line 1787 of yacc.c */ -#line 288 "parse-gram.y" - { spec_name_prefix = (yyvsp[(2) - (2)].chars); } +/* Line 1678 of yacc.c */ +#line 337 "src/parse-gram.y" + { no_lines_flag = true; } +/* Line 1678 of yacc.c */ +#line 2234 "src/parse-gram.c" break; case 22: -/* Line 1787 of yacc.c */ -#line 289 "parse-gram.y" - { spec_name_prefix = (yyvsp[(3) - (3)].chars); } +/* Line 1678 of yacc.c */ +#line 338 "src/parse-gram.y" + { nondeterministic_parser = true; } +/* Line 1678 of yacc.c */ +#line 2242 "src/parse-gram.c" break; case 23: -/* Line 1787 of yacc.c */ -#line 290 "parse-gram.y" - { no_lines_flag = true; } +/* Line 1678 of yacc.c */ +#line 339 "src/parse-gram.y" + { spec_outfile = (yyvsp[0].chars); } +/* Line 1678 of yacc.c */ +#line 2250 "src/parse-gram.c" break; case 24: -/* Line 1787 of yacc.c */ -#line 291 "parse-gram.y" - { nondeterministic_parser = true; } +/* Line 1678 of yacc.c */ +#line 340 "src/parse-gram.y" + { spec_outfile = (yyvsp[0].chars); } +/* Line 1678 of yacc.c */ +#line 2258 "src/parse-gram.c" break; case 25: -/* Line 1787 of yacc.c */ -#line 292 "parse-gram.y" - { spec_outfile = (yyvsp[(2) - (2)].chars); } +/* Line 1678 of yacc.c */ +#line 341 "src/parse-gram.y" + { current_param = (yyvsp[0].param); } +/* Line 1678 of yacc.c */ +#line 2266 "src/parse-gram.c" break; case 26: -/* Line 1787 of yacc.c */ -#line 293 "parse-gram.y" - { spec_outfile = (yyvsp[(3) - (3)].chars); } +/* Line 1678 of yacc.c */ +#line 341 "src/parse-gram.y" + { current_param = param_none; } +/* Line 1678 of yacc.c */ +#line 2274 "src/parse-gram.c" break; case 27: -/* Line 1787 of yacc.c */ -#line 294 "parse-gram.y" - { add_param ("parse_param", (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); } +/* Line 1678 of yacc.c */ +#line 342 "src/parse-gram.y" + { version_check (&(yylsp[0]), (yyvsp[0].chars)); } +/* Line 1678 of yacc.c */ +#line 2282 "src/parse-gram.c" break; case 28: -/* Line 1787 of yacc.c */ -#line 296 "parse-gram.y" +/* Line 1678 of yacc.c */ +#line 344 "src/parse-gram.y" { - /* %pure-parser is deprecated in favor of `%define api.pure', so use - `%define api.pure' in a backward-compatible manner here. First, don't - complain if %pure-parser is specified multiple times. */ - if (!muscle_find_const ("percent_define(api.pure)")) - muscle_percent_define_insert ("api.pure", (yylsp[(1) - (1)]), "", - MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE); - /* In all cases, use api.pure now so that the backend doesn't complain if - the skeleton ignores api.pure, but do warn now if there's a previous - conflicting definition from an actual %define. */ - if (!muscle_percent_define_flag_if ("api.pure")) - muscle_percent_define_insert ("api.pure", (yylsp[(1) - (1)]), "", - MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE); - } - break; - - case 29: -/* Line 1787 of yacc.c */ -#line 310 "parse-gram.y" - { version_check (&(yylsp[(2) - (2)]), (yyvsp[(2) - (2)].chars)); } - break; - - case 30: -/* Line 1787 of yacc.c */ -#line 312 "parse-gram.y" - { - char const *skeleton_user = (yyvsp[(2) - (2)].chars); - if (mbschr (skeleton_user, '/')) + char const *skeleton_user = (yyvsp[0].chars); + if (strchr (skeleton_user, '/')) { size_t dir_length = strlen (current_file); char *skeleton_build; @@@ -2305,655 -2374,497 +2306,655 @@@ skeleton_user = uniqstr_new (skeleton_build); free (skeleton_build); } - skeleton_arg (skeleton_user, grammar_prio, (yylsp[(1) - (2)])); + skeleton_arg (skeleton_user, grammar_prio, (yylsp[-1])); } +/* Line 1678 of yacc.c */ +#line 2312 "src/parse-gram.c" break; - case 31: -/* Line 1787 of yacc.c */ -#line 335 "parse-gram.y" + case 29: +/* Line 1678 of yacc.c */ +#line 367 "src/parse-gram.y" { token_table_flag = true; } +/* Line 1678 of yacc.c */ +#line 2320 "src/parse-gram.c" break; - case 32: -/* Line 1787 of yacc.c */ -#line 336 "parse-gram.y" + case 30: +/* Line 1678 of yacc.c */ +#line 368 "src/parse-gram.y" { report_flag |= report_states; } +/* Line 1678 of yacc.c */ +#line 2328 "src/parse-gram.c" break; - case 33: -/* Line 1787 of yacc.c */ -#line 337 "parse-gram.y" + case 31: +/* Line 1678 of yacc.c */ +#line 369 "src/parse-gram.y" { yacc_flag = true; } +/* Line 1678 of yacc.c */ +#line 2336 "src/parse-gram.c" + break; + + case 33: +/* Line 1678 of yacc.c */ +#line 374 "src/parse-gram.y" + { add_param (current_param, (yyvsp[0].code), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2344 "src/parse-gram.c" + break; + + case 34: +/* Line 1678 of yacc.c */ +#line 375 "src/parse-gram.y" + { add_param (current_param, (yyvsp[0].code), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2352 "src/parse-gram.c" break; case 37: -/* Line 1787 of yacc.c */ -#line 345 "parse-gram.y" +/* Line 1678 of yacc.c */ +#line 387 "src/parse-gram.y" { - grammar_start_symbol_set ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)])); + grammar_start_symbol_set ((yyvsp[0].symbol), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2362 "src/parse-gram.c" break; case 38: -/* Line 1787 of yacc.c */ -#line 349 "parse-gram.y" +/* Line 1678 of yacc.c */ +#line 391 "src/parse-gram.y" { code_props code; - code_props_symbol_action_init (&code, (yyvsp[(2) - (3)].code), (yylsp[(2) - (3)])); + code_props_symbol_action_init (&code, (yyvsp[-1].code), (yylsp[-1])); code_props_translate_code (&code); { symbol_list *list; - for (list = (yyvsp[(3) - (3)].list); list; list = list->next) - symbol_list_destructor_set (list, &code); - symbol_list_free ((yyvsp[(3) - (3)].list)); + for (list = (yyvsp[0].list); list; list = list->next) + symbol_list_code_props_set (list, (yyvsp[-2].code_type), &code); + symbol_list_free ((yyvsp[0].list)); } } +/* Line 1678 of yacc.c */ +#line 2380 "src/parse-gram.c" break; case 39: -/* Line 1787 of yacc.c */ -#line 361 "parse-gram.y" +/* Line 1678 of yacc.c */ +#line 403 "src/parse-gram.y" { - code_props code; - code_props_symbol_action_init (&code, (yyvsp[(2) - (3)].code), (yylsp[(2) - (3)])); - code_props_translate_code (&code); - { - symbol_list *list; - for (list = (yyvsp[(3) - (3)].list); list; list = list->next) - symbol_list_printer_set (list, &code); - symbol_list_free ((yyvsp[(3) - (3)].list)); - } + default_prec = true; } +/* Line 1678 of yacc.c */ +#line 2390 "src/parse-gram.c" break; case 40: -/* Line 1787 of yacc.c */ -#line 373 "parse-gram.y" +/* Line 1678 of yacc.c */ +#line 407 "src/parse-gram.y" { - default_prec = true; + default_prec = false; } +/* Line 1678 of yacc.c */ +#line 2400 "src/parse-gram.c" break; case 41: -/* Line 1787 of yacc.c */ -#line 377 "parse-gram.y" +/* Line 1678 of yacc.c */ +#line 411 "src/parse-gram.y" { - default_prec = false; + /* Do not invoke muscle_percent_code_grow here since it invokes + muscle_user_name_list_grow. */ + muscle_code_grow ("percent_code()", (yyvsp[0].chars), (yylsp[0])); + code_scanner_last_string_free (); } +/* Line 1678 of yacc.c */ +#line 2413 "src/parse-gram.c" break; case 42: -/* Line 1787 of yacc.c */ -#line 381 "parse-gram.y" +/* Line 1678 of yacc.c */ +#line 418 "src/parse-gram.y" { - /* Do not invoke muscle_percent_code_grow here since it invokes - muscle_user_name_list_grow. */ - muscle_code_grow ("percent_code()", (yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)])); + muscle_percent_code_grow ((yyvsp[-1].uniqstr), (yylsp[-1]), (yyvsp[0].chars), (yylsp[0])); code_scanner_last_string_free (); } +/* Line 1678 of yacc.c */ +#line 2424 "src/parse-gram.c" break; case 43: -/* Line 1787 of yacc.c */ -#line 388 "parse-gram.y" - { - muscle_percent_code_grow ((yyvsp[(2) - (3)].uniqstr), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].chars), (yylsp[(3) - (3)])); - code_scanner_last_string_free (); - } +/* Line 1678 of yacc.c */ +#line 428 "src/parse-gram.y" + { (yyval.code_type) = destructor; } +/* Line 1678 of yacc.c */ +#line 2432 "src/parse-gram.c" break; case 44: -/* Line 1787 of yacc.c */ -#line 402 "parse-gram.y" - {} +/* Line 1678 of yacc.c */ +#line 429 "src/parse-gram.y" + { (yyval.code_type) = printer; } +/* Line 1678 of yacc.c */ +#line 2440 "src/parse-gram.c" break; case 45: -/* Line 1787 of yacc.c */ -#line 403 "parse-gram.y" - { muscle_code_grow ("union_name", (yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); } +/* Line 1678 of yacc.c */ +#line 439 "src/parse-gram.y" + {} +/* Line 1678 of yacc.c */ +#line 2448 "src/parse-gram.c" break; case 46: -/* Line 1787 of yacc.c */ -#line 408 "parse-gram.y" +/* Line 1678 of yacc.c */ +#line 440 "src/parse-gram.y" + { muscle_code_grow ("union_name", (yyvsp[0].uniqstr), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2456 "src/parse-gram.c" + break; + + case 47: +/* Line 1678 of yacc.c */ +#line 445 "src/parse-gram.y" { union_seen = true; - muscle_code_grow ("stype", (yyvsp[(3) - (3)].chars), (yylsp[(3) - (3)])); + muscle_code_grow ("stype", (yyvsp[0].chars), (yylsp[0])); code_scanner_last_string_free (); } +/* Line 1678 of yacc.c */ +#line 2468 "src/parse-gram.c" break; - case 47: -/* Line 1787 of yacc.c */ -#line 419 "parse-gram.y" + case 48: +/* Line 1678 of yacc.c */ +#line 456 "src/parse-gram.y" { current_class = nterm_sym; } +/* Line 1678 of yacc.c */ +#line 2476 "src/parse-gram.c" break; - case 48: -/* Line 1787 of yacc.c */ -#line 420 "parse-gram.y" + case 49: +/* Line 1678 of yacc.c */ +#line 457 "src/parse-gram.y" { current_class = unknown_sym; current_type = NULL; } +/* Line 1678 of yacc.c */ +#line 2487 "src/parse-gram.c" break; - case 49: -/* Line 1787 of yacc.c */ -#line 424 "parse-gram.y" + case 50: +/* Line 1678 of yacc.c */ +#line 461 "src/parse-gram.y" { current_class = token_sym; } +/* Line 1678 of yacc.c */ +#line 2495 "src/parse-gram.c" break; - case 50: -/* Line 1787 of yacc.c */ -#line 425 "parse-gram.y" + case 51: +/* Line 1678 of yacc.c */ +#line 462 "src/parse-gram.y" { current_class = unknown_sym; current_type = NULL; } +/* Line 1678 of yacc.c */ +#line 2506 "src/parse-gram.c" break; - case 51: -/* Line 1787 of yacc.c */ -#line 430 "parse-gram.y" + case 52: +/* Line 1678 of yacc.c */ +#line 467 "src/parse-gram.y" { symbol_list *list; tag_seen = true; - for (list = (yyvsp[(3) - (3)].list); list; list = list->next) - symbol_type_set (list->content.sym, (yyvsp[(2) - (3)].uniqstr), (yylsp[(2) - (3)])); - symbol_list_free ((yyvsp[(3) - (3)].list)); + for (list = (yyvsp[0].list); list; list = list->next) + symbol_type_set (list->content.sym, (yyvsp[-1].uniqstr), (yylsp[-1])); + symbol_list_free ((yyvsp[0].list)); } +/* Line 1678 of yacc.c */ +#line 2520 "src/parse-gram.c" break; - case 52: -/* Line 1787 of yacc.c */ -#line 441 "parse-gram.y" + case 53: +/* Line 1678 of yacc.c */ +#line 478 "src/parse-gram.y" { symbol_list *list; ++current_prec; - for (list = (yyvsp[(3) - (3)].list); list; list = list->next) - { - symbol_type_set (list->content.sym, current_type, (yylsp[(2) - (3)])); - symbol_precedence_set (list->content.sym, current_prec, (yyvsp[(1) - (3)].assoc), (yylsp[(1) - (3)])); - } - symbol_list_free ((yyvsp[(3) - (3)].list)); + for (list = (yyvsp[0].list); list; list = list->next) + { + symbol_type_set (list->content.sym, current_type, (yylsp[-1])); + symbol_precedence_set (list->content.sym, current_prec, (yyvsp[-2].assoc), (yylsp[-2])); + } + symbol_list_free ((yyvsp[0].list)); current_type = NULL; } - break; - - case 53: -/* Line 1787 of yacc.c */ -#line 455 "parse-gram.y" - { (yyval.assoc) = left_assoc; } +/* Line 1678 of yacc.c */ +#line 2538 "src/parse-gram.c" break; case 54: -/* Line 1787 of yacc.c */ -#line 456 "parse-gram.y" - { (yyval.assoc) = right_assoc; } +/* Line 1678 of yacc.c */ +#line 492 "src/parse-gram.y" + { (yyval.assoc) = left_assoc; } +/* Line 1678 of yacc.c */ +#line 2546 "src/parse-gram.c" break; case 55: -/* Line 1787 of yacc.c */ -#line 457 "parse-gram.y" - { (yyval.assoc) = non_assoc; } +/* Line 1678 of yacc.c */ +#line 493 "src/parse-gram.y" + { (yyval.assoc) = right_assoc; } +/* Line 1678 of yacc.c */ +#line 2554 "src/parse-gram.c" break; case 56: -/* Line 1787 of yacc.c */ -#line 461 "parse-gram.y" - { current_type = NULL; } +/* Line 1678 of yacc.c */ +#line 494 "src/parse-gram.y" + { (yyval.assoc) = non_assoc; } +/* Line 1678 of yacc.c */ +#line 2562 "src/parse-gram.c" break; case 57: -/* Line 1787 of yacc.c */ -#line 462 "parse-gram.y" - { current_type = (yyvsp[(1) - (1)].uniqstr); tag_seen = true; } +/* Line 1678 of yacc.c */ +#line 495 "src/parse-gram.y" + { (yyval.assoc) = precedence_assoc; } +/* Line 1678 of yacc.c */ +#line 2570 "src/parse-gram.c" break; case 58: -/* Line 1787 of yacc.c */ -#line 468 "parse-gram.y" - { (yyval.list) = symbol_list_sym_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); } +/* Line 1678 of yacc.c */ +#line 499 "src/parse-gram.y" + { current_type = NULL; } +/* Line 1678 of yacc.c */ +#line 2578 "src/parse-gram.c" break; case 59: -/* Line 1787 of yacc.c */ -#line 470 "parse-gram.y" - { (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), symbol_list_sym_new ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)]))); } +/* Line 1678 of yacc.c */ +#line 500 "src/parse-gram.y" + { current_type = (yyvsp[0].uniqstr); tag_seen = true; } +/* Line 1678 of yacc.c */ +#line 2586 "src/parse-gram.c" break; case 60: -/* Line 1787 of yacc.c */ -#line 474 "parse-gram.y" - { (yyval.symbol) = (yyvsp[(1) - (1)].symbol); } +/* Line 1678 of yacc.c */ +#line 506 "src/parse-gram.y" + { (yyval.list) = symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2594 "src/parse-gram.c" break; case 61: -/* Line 1787 of yacc.c */ -#line 475 "parse-gram.y" - { (yyval.symbol) = (yyvsp[(1) - (2)].symbol); symbol_user_token_number_set ((yyvsp[(1) - (2)].symbol), (yyvsp[(2) - (2)].integer), (yylsp[(2) - (2)])); } +/* Line 1678 of yacc.c */ +#line 508 "src/parse-gram.y" + { (yyval.list) = symbol_list_prepend ((yyvsp[-1].list), symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0]))); } +/* Line 1678 of yacc.c */ +#line 2602 "src/parse-gram.c" break; case 62: -/* Line 1787 of yacc.c */ -#line 481 "parse-gram.y" - { (yyval.list) = symbol_list_sym_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); } +/* Line 1678 of yacc.c */ +#line 512 "src/parse-gram.y" + { (yyval.symbol) = (yyvsp[0].symbol); } +/* Line 1678 of yacc.c */ +#line 2610 "src/parse-gram.c" break; case 63: -/* Line 1787 of yacc.c */ -#line 483 "parse-gram.y" - { (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), symbol_list_sym_new ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)]))); } +/* Line 1678 of yacc.c */ +#line 513 "src/parse-gram.y" + { (yyval.symbol) = (yyvsp[-1].symbol); symbol_user_token_number_set ((yyvsp[-1].symbol), (yyvsp[0].integer), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2618 "src/parse-gram.c" break; case 64: -/* Line 1787 of yacc.c */ -#line 487 "parse-gram.y" - { (yyval.list) = (yyvsp[(1) - (1)].list); } +/* Line 1678 of yacc.c */ +#line 519 "src/parse-gram.y" + { (yyval.list) = symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2626 "src/parse-gram.c" break; case 65: -/* Line 1787 of yacc.c */ -#line 488 "parse-gram.y" - { (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list)); } +/* Line 1678 of yacc.c */ +#line 521 "src/parse-gram.y" + { (yyval.list) = symbol_list_prepend ((yyvsp[-1].list), symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0]))); } +/* Line 1678 of yacc.c */ +#line 2634 "src/parse-gram.c" break; case 66: -/* Line 1787 of yacc.c */ -#line 492 "parse-gram.y" - { (yyval.list) = symbol_list_sym_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); } +/* Line 1678 of yacc.c */ +#line 525 "src/parse-gram.y" + { (yyval.list) = (yyvsp[0].list); } +/* Line 1678 of yacc.c */ +#line 2642 "src/parse-gram.c" break; case 67: -/* Line 1787 of yacc.c */ -#line 493 "parse-gram.y" - { (yyval.list) = symbol_list_type_new ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); } +/* Line 1678 of yacc.c */ +#line 526 "src/parse-gram.y" + { (yyval.list) = symbol_list_prepend ((yyvsp[-1].list), (yyvsp[0].list)); } +/* Line 1678 of yacc.c */ +#line 2650 "src/parse-gram.c" break; case 68: -/* Line 1787 of yacc.c */ -#line 494 "parse-gram.y" - { (yyval.list) = symbol_list_default_tagged_new ((yylsp[(1) - (1)])); } +/* Line 1678 of yacc.c */ +#line 530 "src/parse-gram.y" + { (yyval.list) = symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2658 "src/parse-gram.c" break; case 69: -/* Line 1787 of yacc.c */ -#line 495 "parse-gram.y" - { (yyval.list) = symbol_list_default_tagless_new ((yylsp[(1) - (1)])); } +/* Line 1678 of yacc.c */ +#line 531 "src/parse-gram.y" + { (yyval.list) = symbol_list_type_new ((yyvsp[0].uniqstr), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2666 "src/parse-gram.c" break; - case 70: -/* Line 1787 of yacc.c */ -#line 501 "parse-gram.y" + case 71: +/* Line 1678 of yacc.c */ +#line 536 "src/parse-gram.y" + { (yyval.uniqstr) = uniqstr_new ("*"); } +/* Line 1678 of yacc.c */ +#line 2674 "src/parse-gram.c" + break; + + case 72: +/* Line 1678 of yacc.c */ +#line 537 "src/parse-gram.y" + { (yyval.uniqstr) = uniqstr_new (""); } +/* Line 1678 of yacc.c */ +#line 2682 "src/parse-gram.c" + break; + + case 73: +/* Line 1678 of yacc.c */ +#line 543 "src/parse-gram.y" { - current_type = (yyvsp[(1) - (1)].uniqstr); + current_type = (yyvsp[0].uniqstr); tag_seen = true; } +/* Line 1678 of yacc.c */ +#line 2693 "src/parse-gram.c" break; - case 71: -/* Line 1787 of yacc.c */ -#line 506 "parse-gram.y" + case 74: +/* Line 1678 of yacc.c */ +#line 548 "src/parse-gram.y" { - symbol_class_set ((yyvsp[(1) - (1)].symbol), current_class, (yylsp[(1) - (1)]), true); - symbol_type_set ((yyvsp[(1) - (1)].symbol), current_type, (yylsp[(1) - (1)])); + symbol_class_set ((yyvsp[0].symbol), current_class, (yylsp[0]), true); + symbol_type_set ((yyvsp[0].symbol), current_type, (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2704 "src/parse-gram.c" break; - case 72: -/* Line 1787 of yacc.c */ -#line 511 "parse-gram.y" + case 75: +/* Line 1678 of yacc.c */ +#line 553 "src/parse-gram.y" { - symbol_class_set ((yyvsp[(1) - (2)].symbol), current_class, (yylsp[(1) - (2)]), true); - symbol_type_set ((yyvsp[(1) - (2)].symbol), current_type, (yylsp[(1) - (2)])); - symbol_user_token_number_set ((yyvsp[(1) - (2)].symbol), (yyvsp[(2) - (2)].integer), (yylsp[(2) - (2)])); + symbol_class_set ((yyvsp[-1].symbol), current_class, (yylsp[-1]), true); + symbol_type_set ((yyvsp[-1].symbol), current_type, (yylsp[-1])); + symbol_user_token_number_set ((yyvsp[-1].symbol), (yyvsp[0].integer), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2716 "src/parse-gram.c" break; - case 73: -/* Line 1787 of yacc.c */ -#line 517 "parse-gram.y" + case 76: +/* Line 1678 of yacc.c */ +#line 559 "src/parse-gram.y" { - symbol_class_set ((yyvsp[(1) - (2)].symbol), current_class, (yylsp[(1) - (2)]), true); - symbol_type_set ((yyvsp[(1) - (2)].symbol), current_type, (yylsp[(1) - (2)])); - symbol_make_alias ((yyvsp[(1) - (2)].symbol), (yyvsp[(2) - (2)].symbol), (yyloc)); + symbol_class_set ((yyvsp[-1].symbol), current_class, (yylsp[-1]), true); + symbol_type_set ((yyvsp[-1].symbol), current_type, (yylsp[-1])); + symbol_make_alias ((yyvsp[-1].symbol), (yyvsp[0].symbol), (yyloc)); } +/* Line 1678 of yacc.c */ +#line 2728 "src/parse-gram.c" break; - case 74: -/* Line 1787 of yacc.c */ -#line 523 "parse-gram.y" + case 77: +/* Line 1678 of yacc.c */ +#line 565 "src/parse-gram.y" { - symbol_class_set ((yyvsp[(1) - (3)].symbol), current_class, (yylsp[(1) - (3)]), true); - symbol_type_set ((yyvsp[(1) - (3)].symbol), current_type, (yylsp[(1) - (3)])); - symbol_user_token_number_set ((yyvsp[(1) - (3)].symbol), (yyvsp[(2) - (3)].integer), (yylsp[(2) - (3)])); - symbol_make_alias ((yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol), (yyloc)); + symbol_class_set ((yyvsp[-2].symbol), current_class, (yylsp[-2]), true); + symbol_type_set ((yyvsp[-2].symbol), current_type, (yylsp[-2])); + symbol_user_token_number_set ((yyvsp[-2].symbol), (yyvsp[-1].integer), (yylsp[-1])); + symbol_make_alias ((yyvsp[-2].symbol), (yyvsp[0].symbol), (yyloc)); } +/* Line 1678 of yacc.c */ +#line 2741 "src/parse-gram.c" break; - case 81: -/* Line 1787 of yacc.c */ -#line 553 "parse-gram.y" + case 84: +/* Line 1678 of yacc.c */ +#line 595 "src/parse-gram.y" { yyerrok; } +/* Line 1678 of yacc.c */ +#line 2751 "src/parse-gram.c" break; - case 82: -/* Line 1787 of yacc.c */ -#line 559 "parse-gram.y" - { current_lhs ((yyvsp[(1) - (2)].symbol), (yylsp[(1) - (2)]), (yyvsp[(2) - (2)].named_ref)); } + case 85: +/* Line 1678 of yacc.c */ +#line 601 "src/parse-gram.y" + { current_lhs ((yyvsp[-1].symbol), (yylsp[-1]), (yyvsp[0].named_ref)); } +/* Line 1678 of yacc.c */ +#line 2759 "src/parse-gram.c" break; - case 83: -/* Line 1787 of yacc.c */ -#line 560 "parse-gram.y" + case 86: +/* Line 1678 of yacc.c */ +#line 602 "src/parse-gram.y" { /* Free the current lhs. */ - current_lhs (0, (yylsp[(1) - (4)]), 0); + current_lhs (0, (yylsp[-3]), 0); } - break; - - case 84: -/* Line 1787 of yacc.c */ -#line 567 "parse-gram.y" - { grammar_current_rule_end ((yylsp[(1) - (1)])); } - break; - - case 85: -/* Line 1787 of yacc.c */ -#line 568 "parse-gram.y" - { grammar_current_rule_end ((yylsp[(3) - (3)])); } +/* Line 1678 of yacc.c */ +#line 2770 "src/parse-gram.c" break; case 87: -/* Line 1787 of yacc.c */ -#line 574 "parse-gram.y" - { grammar_current_rule_begin (current_lhs_symbol, current_lhs_location, - current_lhs_named_ref); } +/* Line 1678 of yacc.c */ +#line 609 "src/parse-gram.y" + { grammar_current_rule_end ((yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2778 "src/parse-gram.c" break; case 88: -/* Line 1787 of yacc.c */ -#line 577 "parse-gram.y" - { grammar_current_rule_symbol_append ((yyvsp[(2) - (3)].symbol), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].named_ref)); } - break; - - case 89: -/* Line 1787 of yacc.c */ -#line 579 "parse-gram.y" - { grammar_current_rule_action_append ((yyvsp[(2) - (3)].code), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].named_ref)); } +/* Line 1678 of yacc.c */ +#line 610 "src/parse-gram.y" + { grammar_current_rule_end ((yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2786 "src/parse-gram.c" break; case 90: -/* Line 1787 of yacc.c */ -#line 581 "parse-gram.y" - { grammar_current_rule_prec_set ((yyvsp[(3) - (3)].symbol), (yylsp[(3) - (3)])); } +/* Line 1678 of yacc.c */ +#line 616 "src/parse-gram.y" + { grammar_current_rule_begin (current_lhs_symbol, current_lhs_location, + current_lhs_named_ref); } +/* Line 1678 of yacc.c */ +#line 2795 "src/parse-gram.c" break; case 91: -/* Line 1787 of yacc.c */ -#line 583 "parse-gram.y" - { grammar_current_rule_dprec_set ((yyvsp[(3) - (3)].integer), (yylsp[(3) - (3)])); } +/* Line 1678 of yacc.c */ +#line 619 "src/parse-gram.y" + { grammar_current_rule_symbol_append ((yyvsp[-1].symbol), (yylsp[-1]), (yyvsp[0].named_ref)); } +/* Line 1678 of yacc.c */ +#line 2803 "src/parse-gram.c" break; case 92: -/* Line 1787 of yacc.c */ -#line 585 "parse-gram.y" - { grammar_current_rule_merge_set ((yyvsp[(3) - (3)].uniqstr), (yylsp[(3) - (3)])); } +/* Line 1678 of yacc.c */ +#line 621 "src/parse-gram.y" + { grammar_current_rule_action_append ((yyvsp[-1].code), (yylsp[-1]), (yyvsp[0].named_ref), false); } +/* Line 1678 of yacc.c */ +#line 2811 "src/parse-gram.c" break; case 93: -/* Line 1787 of yacc.c */ -#line 589 "parse-gram.y" - { (yyval.named_ref) = 0; } +/* Line 1678 of yacc.c */ +#line 623 "src/parse-gram.y" + { grammar_current_rule_action_append ((yyvsp[0].code), (yylsp[0]), NULL, true); } +/* Line 1678 of yacc.c */ +#line 2819 "src/parse-gram.c" break; case 94: -/* Line 1787 of yacc.c */ -#line 591 "parse-gram.y" - { (yyval.named_ref) = named_ref_new((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); } +/* Line 1678 of yacc.c */ +#line 625 "src/parse-gram.y" + { grammar_current_rule_prec_set ((yyvsp[0].symbol), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2827 "src/parse-gram.c" + break; + + case 95: +/* Line 1678 of yacc.c */ +#line 627 "src/parse-gram.y" + { grammar_current_rule_dprec_set ((yyvsp[0].integer), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2835 "src/parse-gram.c" break; case 96: -/* Line 1787 of yacc.c */ -#line 603 "parse-gram.y" - { (yyval.uniqstr) = uniqstr_new ((yyvsp[(1) - (1)].chars)); } +/* Line 1678 of yacc.c */ +#line 629 "src/parse-gram.y" + { grammar_current_rule_merge_set ((yyvsp[0].uniqstr), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2843 "src/parse-gram.c" break; case 97: -/* Line 1787 of yacc.c */ -#line 608 "parse-gram.y" - { (yyval.chars) = ""; } +/* Line 1678 of yacc.c */ +#line 633 "src/parse-gram.y" + { (yyval.named_ref) = 0; } +/* Line 1678 of yacc.c */ +#line 2851 "src/parse-gram.c" break; case 98: -/* Line 1787 of yacc.c */ -#line 609 "parse-gram.y" - { (yyval.chars) = (yyvsp[(1) - (1)].uniqstr); } +/* Line 1678 of yacc.c */ +#line 635 "src/parse-gram.y" + { (yyval.named_ref) = named_ref_new((yyvsp[0].uniqstr), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2859 "src/parse-gram.c" break; case 100: -/* Line 1787 of yacc.c */ -#line 620 "parse-gram.y" +/* Line 1678 of yacc.c */ +#line 646 "src/parse-gram.y" + { (yyval.uniqstr) = uniqstr_new ((yyvsp[0].chars)); } +/* Line 1678 of yacc.c */ +#line 2867 "src/parse-gram.c" + break; + + case 101: +/* Line 1678 of yacc.c */ +#line 651 "src/parse-gram.y" + { (yyval.chars) = ""; } +/* Line 1678 of yacc.c */ +#line 2875 "src/parse-gram.c" + break; + + case 102: +/* Line 1678 of yacc.c */ +#line 652 "src/parse-gram.y" + { (yyval.chars) = (yyvsp[0].uniqstr); } +/* Line 1678 of yacc.c */ +#line 2883 "src/parse-gram.c" + break; + + case 104: +/* Line 1678 of yacc.c */ +#line 663 "src/parse-gram.y" { code_props plain_code; - (yyvsp[(1) - (1)].code)[strlen ((yyvsp[(1) - (1)].code)) - 1] = '\n'; - code_props_plain_init (&plain_code, (yyvsp[(1) - (1)].code)+1, (yylsp[(1) - (1)])); + (yyvsp[0].code)[strlen ((yyvsp[0].code)) - 1] = '\n'; + code_props_plain_init (&plain_code, (yyvsp[0].code)+1, (yylsp[0])); code_props_translate_code (&plain_code); gram_scanner_last_string_free (); (yyval.chars) = plain_code.code; } +/* Line 1678 of yacc.c */ +#line 2898 "src/parse-gram.c" break; - case 101: -/* Line 1787 of yacc.c */ -#line 640 "parse-gram.y" - { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); } + case 105: +/* Line 1678 of yacc.c */ +#line 683 "src/parse-gram.y" + { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[0].uniqstr), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2906 "src/parse-gram.c" break; - case 102: -/* Line 1787 of yacc.c */ -#line 642 "parse-gram.y" + case 106: +/* Line 1678 of yacc.c */ +#line 685 "src/parse-gram.y" { - (yyval.symbol) = symbol_get (char_name ((yyvsp[(1) - (1)].character)), (yylsp[(1) - (1)])); - symbol_class_set ((yyval.symbol), token_sym, (yylsp[(1) - (1)]), false); - symbol_user_token_number_set ((yyval.symbol), (yyvsp[(1) - (1)].character), (yylsp[(1) - (1)])); + (yyval.symbol) = symbol_get (char_name ((yyvsp[0].character)), (yylsp[0])); + symbol_class_set ((yyval.symbol), token_sym, (yylsp[0]), false); + symbol_user_token_number_set ((yyval.symbol), (yyvsp[0].character), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2918 "src/parse-gram.c" break; - case 103: -/* Line 1787 of yacc.c */ -#line 650 "parse-gram.y" - { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); } + case 107: +/* Line 1678 of yacc.c */ +#line 693 "src/parse-gram.y" + { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[0].uniqstr), (yylsp[0])); } +/* Line 1678 of yacc.c */ +#line 2926 "src/parse-gram.c" break; - case 106: -/* Line 1787 of yacc.c */ -#line 662 "parse-gram.y" + case 110: +/* Line 1678 of yacc.c */ +#line 705 "src/parse-gram.y" { - (yyval.symbol) = symbol_get (quotearg_style (c_quoting_style, (yyvsp[(1) - (1)].chars)), (yylsp[(1) - (1)])); - symbol_class_set ((yyval.symbol), token_sym, (yylsp[(1) - (1)]), false); + (yyval.symbol) = symbol_get (quotearg_style (c_quoting_style, (yyvsp[0].chars)), (yylsp[0])); + symbol_class_set ((yyval.symbol), token_sym, (yylsp[0]), false); } +/* Line 1678 of yacc.c */ +#line 2937 "src/parse-gram.c" break; - case 108: -/* Line 1787 of yacc.c */ -#line 671 "parse-gram.y" + case 112: +/* Line 1678 of yacc.c */ +#line 714 "src/parse-gram.y" { code_props plain_code; - code_props_plain_init (&plain_code, (yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)])); + code_props_plain_init (&plain_code, (yyvsp[0].chars), (yylsp[0])); code_props_translate_code (&plain_code); gram_scanner_last_string_free (); - muscle_code_grow ("epilogue", plain_code.code, (yylsp[(2) - (2)])); + muscle_code_grow ("epilogue", plain_code.code, (yylsp[0])); code_scanner_last_string_free (); } +/* Line 1678 of yacc.c */ +#line 2952 "src/parse-gram.c" break; -/* Line 1787 of yacc.c */ -#line 2867 "parse-gram.c" +/* Line 1678 of yacc.c */ +#line 2957 "src/parse-gram.c" default: break; } if (yychar_backup != yychar) @@@ -2994,9 -2905,9 +2995,9 @@@ goto yynewstate; -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ @@@ -3050,20 -2961,20 +3051,20 @@@ if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an - error, discard it. */ + error, discard it. */ if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } else - { - yydestruct ("Error: discarding", - yytoken, &yylval, &yylloc); - yychar = YYEMPTY; - } + { + yydestruct ("Error: discarding", + yytoken, &yylval, &yylloc); + yychar = YYEMPTY; + } } /* Else will try to reuse lookahead token after shifting the error @@@ -3096,29 -3007,29 +3097,29 @@@ yyerrorlab | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ + yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) - YYABORT; + YYABORT; yyerror_range[1] = *yylsp; yydestruct ("Error: popping", - yystos[yystate], yyvsp, yylsp); + yystos[yystate], yyvsp, yylsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); @@@ -3183,7 -3094,7 +3184,7 @@@ yyreturn while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp, yylsp); + yystos[*yyssp], yyvsp, yylsp); YYPOPSTACK (1); } #ifndef yyoverflow @@@ -3196,10 -3107,13 +3197,10 @@@ if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif - /* Make sure YYID is used. */ - return YYID (yyresult); + return yyresult; } - - -/* Line 2048 of yacc.c */ -#line 681 "parse-gram.y" +/* Line 1936 of yacc.c */ +#line 724 "src/parse-gram.y" @@@ -3225,54 -3139,51 +3226,54 @@@ lloc_default (YYLTYPE const *rhs, int n for (i = 1; i <= n; i++) if (! equal_boundaries (rhs[i].start, rhs[i].end)) { - loc.start = rhs[i].start; - break; + loc.start = rhs[i].start; + break; } return loc; } -/* Add a lex-param or a parse-param (depending on TYPE) with - declaration DECL and location LOC. */ - static void -add_param (char const *type, char *decl, location loc) +add_param (param_type type, char *decl, location loc) { static char const alphanum[26 + 26 + 1 + 10] = "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "_" "0123456789"; + char const *name_start = NULL; - char *p; - - /* Stop on last actual character. */ - for (p = decl; p[1]; p++) - if ((p == decl - || ! memchr (alphanum, p[-1], sizeof alphanum)) - && memchr (alphanum, p[0], sizeof alphanum - 10)) - name_start = p; - - /* Strip the surrounding '{' and '}', and any blanks just inside - the braces. */ - --p; - while (c_isspace ((unsigned char) *p)) + { + char *p; + /* Stop on last actual character. */ + for (p = decl; p[1]; p++) + if ((p == decl + || ! memchr (alphanum, p[-1], sizeof alphanum)) + && memchr (alphanum, p[0], sizeof alphanum - 10)) + name_start = p; + + /* Strip the surrounding '{' and '}', and any blanks just inside + the braces. */ --p; - while (isspace ((unsigned char) *p)) - p[1] = '\0'; - ++decl; - while (c_isspace ((unsigned char) *decl)) ++ while (c_isspace ((unsigned char) *p)) + --p; + p[1] = '\0'; ++decl; - while (isspace ((unsigned char) *decl)) ++ while (c_isspace ((unsigned char) *decl)) + ++decl; + } if (! name_start) - complain_at (loc, _("missing identifier in parameter declaration")); + complain_at (loc, complaint, + _("missing identifier in parameter declaration")); else { char *name = xmemdup0 (name_start, strspn (name_start, alphanum)); - muscle_pair_list_grow (type, decl, name); + if (type & param_lex) + muscle_pair_list_grow ("lex_param", decl, name); + if (type & param_parse) + muscle_pair_list_grow ("parse_param", decl, name); free (name); } @@@ -3285,7 -3196,7 +3286,7 @@@ version_check (location const *loc, cha { if (strverscmp (version, PACKAGE_VERSION) > 0) { - complain_at (*loc, "require bison %s, but have %s", + complain_at (*loc, complaint, "require bison %s, but have %s", version, PACKAGE_VERSION); exit (EX_MISMATCH); } @@@ -3294,7 -3205,7 +3295,7 @@@ static void gram_error (location const *loc, char const *msg) { - complain_at (*loc, "%s", msg); + complain_at (*loc, complaint, "%s", msg); } char const * diff --combined src/parse-gram.y index 016963a8,3120bfc2..46500db0 --- a/src/parse-gram.y +++ b/src/parse-gram.y @@@ -20,6 -20,7 +20,7 @@@ #include #include "system.h" + #include "c-ctype.h" #include "complain.h" #include "conflicts.h" #include "files.h" @@@ -30,7 -31,6 +31,7 @@@ #include "quotearg.h" #include "reader.h" #include "symlist.h" +#include "symtab.h" #include "scan-gram.h" #include "scan-code.h" #include "xmemdup0.h" @@@ -39,7 -39,7 +40,7 @@@ static YYLTYPE lloc_default (YYLTYPE const *, int); #define YY_LOCATION_PRINT(File, Loc) \ - location_print (File, Loc) + location_print (File, Loc) static void version_check (location const *loc, char const *version); @@@ -47,53 -47,60 +48,53 @@@ FIXME: depends on the undocumented availability of YYLLOC. */ #undef yyerror #define yyerror(Msg) \ - gram_error (&yylloc, Msg) + gram_error (&yylloc, Msg) static void gram_error (location const *, char const *); static char const *char_name (char); +%} -/** Add a lex-param or a parse-param. - * - * \param type \a lex_param or \a parse_param - * \param decl the formal argument - * \param loc the location in the source. - */ -static void add_param (char const *type, char *decl, location loc); - - -static symbol_class current_class = unknown_sym; -static uniqstr current_type = NULL; -static symbol *current_lhs_symbol; -static location current_lhs_location; -static named_ref *current_lhs_named_ref; -static int current_prec = 0; - -/** Set the new current left-hand side symbol, possibly common - * to several right-hand side parts of rule. - */ -static -void -current_lhs(symbol *sym, location loc, named_ref *ref) +%code { - current_lhs_symbol = sym; - current_lhs_location = loc; - /* In order to simplify memory management, named references for lhs - are always assigned by deep copy into the current symbol_list - node. This is because a single named-ref in the grammar may - result in several uses when the user factors lhs between several - rules using "|". Therefore free the parser's original copy. */ - free (current_lhs_named_ref); - current_lhs_named_ref = ref; -} - + static int current_prec = 0; + static location current_lhs_location; + static named_ref *current_lhs_named_ref; + static symbol *current_lhs_symbol; + static symbol_class current_class = unknown_sym; + static uniqstr current_type = NULL; + + /** Set the new current left-hand side symbol, possibly common + * to several right-hand side parts of rule. + */ + static + void + current_lhs(symbol *sym, location loc, named_ref *ref) + { + current_lhs_symbol = sym; + current_lhs_location = loc; + /* In order to simplify memory management, named references for lhs + are always assigned by deep copy into the current symbol_list + node. This is because a single named-ref in the grammar may + result in several uses when the user factors lhs between several + rules using "|". Therefore free the parser's original copy. */ + free (current_lhs_named_ref); + current_lhs_named_ref = ref; + } -#define YYTYPE_INT16 int_fast16_t -#define YYTYPE_INT8 int_fast8_t -#define YYTYPE_UINT16 uint_fast16_t -#define YYTYPE_UINT8 uint_fast8_t -%} + #define YYTYPE_INT16 int_fast16_t + #define YYTYPE_INT8 int_fast8_t + #define YYTYPE_UINT16 uint_fast16_t + #define YYTYPE_UINT8 uint_fast8_t +} -%debug %verbose %defines -%locations -%pure-parser -%error-verbose +%define locations +%define api.pure +%define parse.error verbose %define parse.lac full -%name-prefix="gram_" +%define parse.trace +%name-prefix "gram_" %expect 0 %initial-action @@@ -106,15 -113,15 +107,15 @@@ %union { + assoc assoc; + char *code; + char const *chars; + int integer; + named_ref *named_ref; symbol *symbol; symbol_list *list; - int integer; - char const *chars; - char *code; - assoc assoc; uniqstr uniqstr; unsigned char character; - named_ref *named_ref; }; /* Define the tokens together with their human representation. */ @@@ -132,36 -139,40 +133,36 @@@ %token PERCENT_LEFT "%left" %token PERCENT_RIGHT "%right" %token PERCENT_NONASSOC "%nonassoc" +%token PERCENT_PRECEDENCE "%precedence" %token PERCENT_PREC "%prec" %token PERCENT_DPREC "%dprec" %token PERCENT_MERGE "%merge" - /*----------------------. | Global Declarations. | `----------------------*/ %token PERCENT_CODE "%code" - PERCENT_DEBUG "%debug" PERCENT_DEFAULT_PREC "%default-prec" PERCENT_DEFINE "%define" PERCENT_DEFINES "%defines" PERCENT_ERROR_VERBOSE "%error-verbose" PERCENT_EXPECT "%expect" - PERCENT_EXPECT_RR "%expect-rr" + PERCENT_EXPECT_RR "%expect-rr" + PERCENT_FLAG "%" PERCENT_FILE_PREFIX "%file-prefix" PERCENT_GLR_PARSER "%glr-parser" PERCENT_INITIAL_ACTION "%initial-action" PERCENT_LANGUAGE "%language" - PERCENT_LEX_PARAM "%lex-param" - PERCENT_LOCATIONS "%locations" PERCENT_NAME_PREFIX "%name-prefix" PERCENT_NO_DEFAULT_PREC "%no-default-prec" PERCENT_NO_LINES "%no-lines" PERCENT_NONDETERMINISTIC_PARSER - "%nondeterministic-parser" + "%nondeterministic-parser" PERCENT_OUTPUT "%output" - PERCENT_PARSE_PARAM "%parse-param" - PERCENT_PURE_PARSER "%pure-parser" - PERCENT_REQUIRE "%require" + PERCENT_REQUIRE "%require" PERCENT_SKELETON "%skeleton" PERCENT_START "%start" PERCENT_TOKEN_TABLE "%token-table" @@@ -170,7 -181,6 +171,7 @@@ ; %token BRACED_CODE "{...}" +%token BRACED_PREDICATE "%?{...}" %token BRACKETED_ID "[identifier]" %token CHAR "char" %token EPILOGUE "epilogue" @@@ -181,90 -191,39 +182,90 @@@ %token PIPE "|" %token PROLOGUE "%{...%}" %token SEMICOLON ";" -%token TYPE "type" -%token TYPE_TAG_ANY "<*>" -%token TYPE_TAG_NONE "<>" +%token TAG "" +%token TAG_ANY "<*>" +%token TAG_NONE "<>" %type CHAR -%printer { fputs (char_name ($$), stderr); } CHAR +%printer { fputs (char_name ($$), yyo); } CHAR /* braceless is not to be used for rule or symbol actions, as it calls code_props_plain_init. */ %type STRING "%{...%}" EPILOGUE braceless content.opt -%type "{...}" -%printer { fputs (quotearg_style (c_quoting_style, $$), stderr); } - STRING -%printer { fprintf (stderr, "{\n%s\n}", $$); } - braceless content.opt "{...}" "%{...%}" EPILOGUE - -%type BRACKETED_ID ID ID_COLON TYPE variable -%printer { fputs ($$, stderr); } -%printer { fprintf (stderr, "[%s]", $$); } BRACKETED_ID -%printer { fprintf (stderr, "%s:", $$); } ID_COLON -%printer { fprintf (stderr, "<%s>", $$); } TYPE +%type "{...}" "%?{...}" +%printer { fputs (quotearg_style (c_quoting_style, $$), yyo); } + STRING +%printer { fprintf (yyo, "{\n%s\n}", $$); } + braceless content.opt "{...}" "%{...%}" EPILOGUE + +%type BRACKETED_ID ID ID_COLON PERCENT_FLAG TAG tag variable +%printer { fputs ($$, yyo); } +%printer { fprintf (yyo, "[%s]", $$); } BRACKETED_ID +%printer { fprintf (yyo, "%s:", $$); } ID_COLON +%printer { fprintf (yyo, "%%%s", $$); } PERCENT_FLAG +%printer { fprintf (yyo, "<%s>", $$); } TAG tag %type INT -%printer { fprintf (stderr, "%d", $$); } +%printer { fprintf (yyo, "%d", $$); } %type id id_colon string_as_id symbol symbol.prec -%printer { fprintf (stderr, "%s", $$->tag); } -%printer { fprintf (stderr, "%s:", $$->tag); } id_colon +%printer { fprintf (yyo, "%s", $$->tag); } +%printer { fprintf (yyo, "%s:", $$->tag); } id_colon %type precedence_declarator %type symbols.1 symbols.prec generic_symlist generic_symlist_item %type named_ref.opt +/*---------. +| %param. | +`---------*/ +%code requires +{ +# ifndef PARAM_TYPE +# define PARAM_TYPE + typedef enum + { + param_none = 0, + param_lex = 1 << 0, + param_parse = 1 << 1, + param_both = param_lex | param_parse + } param_type; +# endif +}; +%code +{ + /** Add a lex-param and/or a parse-param. + * + * \param type where to push this formal argument. + * \param decl the formal argument. Destroyed. + * \param loc the location in the source. + */ + static void add_param (param_type type, char *decl, location loc); + static param_type current_param = param_none; +}; +%union +{ + param_type param; +} +%token PERCENT_PARAM "%param"; +%printer +{ + switch ($$) + { +#define CASE(In, Out) \ + case param_ ## In: fputs ("%" #Out, stderr); break + CASE(lex, lex-param); + CASE(parse, parse-param); + CASE(both, param); +#undef CASE + case param_none: aver (false); break; + } +} ; + + + /*==========\ + | Grammar. | + \==========*/ %% input: @@@ -272,9 -231,9 +273,9 @@@ ; - /*------------------------------------. - | Declarations: before the first %%. | - `------------------------------------*/ + /*------------------------------------. + | Declarations: before the first %%. | + `------------------------------------*/ prologue_declarations: /* Nothing */ @@@ -293,10 -252,7 +294,10 @@@ prologue_declaration plain_code.code, @1); code_scanner_last_string_free (); } -| "%debug" { debug_flag = true; } +| "%" + { + muscle_percent_define_ensure ($1, @1, true); + } | "%define" variable content.opt { muscle_percent_define_insert ($2, @2, $3, @@@ -308,13 -264,9 +309,13 @@@ defines_flag = true; spec_defines_file = xstrdup ($2); } -| "%error-verbose" { error_verbose = true; } +| "%error-verbose" + { + muscle_percent_define_insert ("parse.error", @1, "verbose", + MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE); + } | "%expect" INT { expected_sr_conflicts = $2; } -| "%expect-rr" INT { expected_rr_conflicts = $2; } +| "%expect-rr" INT { expected_rr_conflicts = $2; } | "%file-prefix" STRING { spec_file_prefix = $2; } | "%file-prefix" "=" STRING { spec_file_prefix = $3; } /* deprecated */ | "%glr-parser" @@@ -331,19 -283,36 +332,19 @@@ muscle_code_grow ("initial_action", action.code, @2); code_scanner_last_string_free (); } -| "%language" STRING { language_argmatch ($2, grammar_prio, @1); } -| "%lex-param" "{...}" { add_param ("lex_param", $2, @2); } -| "%locations" { locations_flag = true; } +| "%language" STRING { language_argmatch ($2, grammar_prio, @1); } | "%name-prefix" STRING { spec_name_prefix = $2; } | "%name-prefix" "=" STRING { spec_name_prefix = $3; } /* deprecated */ | "%no-lines" { no_lines_flag = true; } -| "%nondeterministic-parser" { nondeterministic_parser = true; } +| "%nondeterministic-parser" { nondeterministic_parser = true; } | "%output" STRING { spec_outfile = $2; } | "%output" "=" STRING { spec_outfile = $3; } /* deprecated */ -| "%parse-param" "{...}" { add_param ("parse_param", $2, @2); } -| "%pure-parser" - { - /* %pure-parser is deprecated in favor of `%define api.pure', so use - `%define api.pure' in a backward-compatible manner here. First, don't - complain if %pure-parser is specified multiple times. */ - if (!muscle_find_const ("percent_define(api.pure)")) - muscle_percent_define_insert ("api.pure", @1, "", - MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE); - /* In all cases, use api.pure now so that the backend doesn't complain if - the skeleton ignores api.pure, but do warn now if there's a previous - conflicting definition from an actual %define. */ - if (!muscle_percent_define_flag_if ("api.pure")) - muscle_percent_define_insert ("api.pure", @1, "", - MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE); - } +| "%param" { current_param = $1; } params { current_param = param_none; } | "%require" STRING { version_check (&@2, $2); } | "%skeleton" STRING { char const *skeleton_user = $2; - if (mbschr (skeleton_user, '/')) + if (strchr (skeleton_user, '/')) { size_t dir_length = strlen (current_file); char *skeleton_build; @@@ -370,16 -339,6 +371,16 @@@ | /*FIXME: Err? What is this horror doing here? */ ";" ; +params: + params "{...}" { add_param (current_param, $2, @2); } +| "{...}" { add_param (current_param, $1, @1); } +; + + +/*----------------------. +| grammar_declaration. | +`----------------------*/ + grammar_declaration: precedence_declaration | symbol_declaration @@@ -387,7 -346,19 +388,7 @@@ { grammar_start_symbol_set ($2, @2); } -| "%destructor" "{...}" generic_symlist - { - code_props code; - code_props_symbol_action_init (&code, $2, @2); - code_props_translate_code (&code); - { - symbol_list *list; - for (list = $3; list; list = list->next) - symbol_list_destructor_set (list, &code); - symbol_list_free ($3); - } - } -| "%printer" "{...}" generic_symlist +| code_props_type "{...}" generic_symlist { code_props code; code_props_symbol_action_init (&code, $2, @2); @@@ -395,7 -366,7 +396,7 @@@ { symbol_list *list; for (list = $3; list; list = list->next) - symbol_list_printer_set (list, &code); + symbol_list_code_props_set (list, $1, &code); symbol_list_free ($3); } } @@@ -421,17 -392,10 +422,17 @@@ } ; +%type code_props_type; +%union {code_props_type code_type;}; +%printer { fprintf (yyo, "%s", code_props_type_string ($$)); } ; +code_props_type: + "%destructor" { $$ = destructor; } +| "%printer" { $$ = printer; } +; -/*----------* - | %union. | - *----------*/ +/*---------. +| %union. | +`---------*/ %token PERCENT_UNION "%union"; @@@ -463,41 -427,40 +464,41 @@@ symbol_declaration current_class = unknown_sym; current_type = NULL; } -| "%type" TYPE symbols.1 +| "%type" TAG symbols.1 { symbol_list *list; tag_seen = true; for (list = $3; list; list = list->next) - symbol_type_set (list->content.sym, $2, @2); + symbol_type_set (list->content.sym, $2, @2); symbol_list_free ($3); } ; precedence_declaration: - precedence_declarator type.opt symbols.prec + precedence_declarator tag.opt symbols.prec { symbol_list *list; ++current_prec; for (list = $3; list; list = list->next) - { - symbol_type_set (list->content.sym, current_type, @2); - symbol_precedence_set (list->content.sym, current_prec, $1, @1); - } + { + symbol_type_set (list->content.sym, current_type, @2); + symbol_precedence_set (list->content.sym, current_prec, $1, @1); + } symbol_list_free ($3); current_type = NULL; } ; precedence_declarator: - "%left" { $$ = left_assoc; } -| "%right" { $$ = right_assoc; } -| "%nonassoc" { $$ = non_assoc; } + "%left" { $$ = left_assoc; } +| "%right" { $$ = right_assoc; } +| "%nonassoc" { $$ = non_assoc; } +| "%precedence" { $$ = precedence_assoc; } ; -type.opt: +tag.opt: /* Nothing. */ { current_type = NULL; } -| TYPE { current_type = $1; tag_seen = true; } +| TAG { current_type = $1; tag_seen = true; } ; /* Just like symbols.1 but accept INT for the sake of POSIX. */ @@@ -509,9 -472,9 +510,9 @@@ symbols.prec ; symbol.prec: - symbol { $$ = $1; } - | symbol INT { $$ = $1; symbol_user_token_number_set ($1, $2, @2); } - ; + symbol { $$ = $1; } +| symbol INT { $$ = $1; symbol_user_token_number_set ($1, $2, @2); } +; /* One or more symbols to be %typed. */ symbols.1: @@@ -527,19 -490,15 +528,19 @@@ generic_symlist ; generic_symlist_item: - symbol { $$ = symbol_list_sym_new ($1, @1); } -| TYPE { $$ = symbol_list_type_new ($1, @1); } -| "<*>" { $$ = symbol_list_default_tagged_new (@1); } -| "<>" { $$ = symbol_list_default_tagless_new (@1); } + symbol { $$ = symbol_list_sym_new ($1, @1); } +| tag { $$ = symbol_list_type_new ($1, @1); } +; + +tag: + TAG +| "<*>" { $$ = uniqstr_new ("*"); } +| "<>" { $$ = uniqstr_new (""); } ; /* One token definition. */ symbol_def: - TYPE + TAG { current_type = $1; tag_seen = true; @@@ -577,9 -536,9 +578,9 @@@ symbol_defs.1 ; - /*------------------------------------------. - | The grammar section: between the two %%. | - `------------------------------------------*/ + /*------------------------------------------. + | The grammar section: between the two %%. | + `------------------------------------------*/ grammar: rules_or_grammar_declaration @@@ -614,18 -573,16 +615,18 @@@ rhses.1 rhs: /* Nothing. */ { grammar_current_rule_begin (current_lhs_symbol, current_lhs_location, - current_lhs_named_ref); } + current_lhs_named_ref); } | rhs symbol named_ref.opt { grammar_current_rule_symbol_append ($2, @2, $3); } | rhs "{...}" named_ref.opt - { grammar_current_rule_action_append ($2, @2, $3); } + { grammar_current_rule_action_append ($2, @2, $3, false); } +| rhs "%?{...}" + { grammar_current_rule_action_append ($2, @2, NULL, true); } | rhs "%prec" symbol { grammar_current_rule_prec_set ($3, @3); } | rhs "%dprec" INT { grammar_current_rule_dprec_set ($3, @3); } -| rhs "%merge" TYPE +| rhs "%merge" TAG { grammar_current_rule_merge_set ($3, @3); } ; @@@ -635,9 -592,10 +636,9 @@@ named_ref.opt BRACKETED_ID { $$ = named_ref_new($1, @1); } ; - -/*----------------------------* - | variable and content.opt. | - *---------------------------*/ +/*---------------------------. +| variable and content.opt. | +`---------------------------*/ /* The STRING form of variable is deprecated and is not M4-friendly. For example, M4 fails for `%define "[" "value"'. */ @@@ -654,9 -612,9 +655,9 @@@ content.opt ; -/*-------------* - | braceless. | - *-------------*/ +/*------------. +| braceless. | +`------------*/ braceless: "{...}" @@@ -671,9 -629,9 +672,9 @@@ ; -/*---------------* - | Identifiers. | - *---------------*/ +/*--------------. +| Identifiers. | +`--------------*/ /* Identifiers are returned as uniqstr values by the scanner. Depending on their use, we may need to make them genuine symbols. */ @@@ -746,54 -704,51 +747,54 @@@ lloc_default (YYLTYPE const *rhs, int n for (i = 1; i <= n; i++) if (! equal_boundaries (rhs[i].start, rhs[i].end)) { - loc.start = rhs[i].start; - break; + loc.start = rhs[i].start; + break; } return loc; } -/* Add a lex-param or a parse-param (depending on TYPE) with - declaration DECL and location LOC. */ - static void -add_param (char const *type, char *decl, location loc) +add_param (param_type type, char *decl, location loc) { static char const alphanum[26 + 26 + 1 + 10] = "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "_" "0123456789"; + char const *name_start = NULL; - char *p; - - /* Stop on last actual character. */ - for (p = decl; p[1]; p++) - if ((p == decl - || ! memchr (alphanum, p[-1], sizeof alphanum)) - && memchr (alphanum, p[0], sizeof alphanum - 10)) - name_start = p; - - /* Strip the surrounding '{' and '}', and any blanks just inside - the braces. */ - --p; - while (c_isspace ((unsigned char) *p)) + { + char *p; + /* Stop on last actual character. */ + for (p = decl; p[1]; p++) + if ((p == decl + || ! memchr (alphanum, p[-1], sizeof alphanum)) + && memchr (alphanum, p[0], sizeof alphanum - 10)) + name_start = p; + + /* Strip the surrounding '{' and '}', and any blanks just inside + the braces. */ --p; - while (isspace ((unsigned char) *p)) - p[1] = '\0'; - ++decl; - while (c_isspace ((unsigned char) *decl)) ++ while (c_isspace ((unsigned char) *p)) + --p; + p[1] = '\0'; ++decl; - while (isspace ((unsigned char) *decl)) ++ while (c_isspace ((unsigned char) *decl)) + ++decl; + } if (! name_start) - complain_at (loc, _("missing identifier in parameter declaration")); + complain_at (loc, complaint, + _("missing identifier in parameter declaration")); else { char *name = xmemdup0 (name_start, strspn (name_start, alphanum)); - muscle_pair_list_grow (type, decl, name); + if (type & param_lex) + muscle_pair_list_grow ("lex_param", decl, name); + if (type & param_parse) + muscle_pair_list_grow ("parse_param", decl, name); free (name); } @@@ -806,7 -761,7 +807,7 @@@ version_check (location const *loc, cha { if (strverscmp (version, PACKAGE_VERSION) > 0) { - complain_at (*loc, "require bison %s, but have %s", + complain_at (*loc, complaint, "require bison %s, but have %s", version, PACKAGE_VERSION); exit (EX_MISMATCH); } @@@ -815,7 -770,7 +816,7 @@@ static void gram_error (location const *loc, char const *msg) { - complain_at (*loc, "%s", msg); + complain_at (*loc, complaint, "%s", msg); } char const * diff --combined src/scan-gram.l index 084796c4,dbea2a1d..2275d022 --- a/src/scan-gram.l +++ b/src/scan-gram.l @@@ -27,25 -27,25 +27,25 @@@ #define gram_wrap() 1 #define FLEX_PREFIX(Id) gram_ ## Id -#include "flex-scanner.h" +#include -#include "complain.h" -#include "files.h" -#include "gram.h" -#include "quotearg.h" -#include "reader.h" -#include "uniqstr.h" +#include +#include +#include +#include +#include +#include - #include + #include #include #include -#include "scan-gram.h" +#include #define YY_DECL GRAM_LEX_DECL -#define YY_USER_INIT \ - code_start = scanner_cursor = loc->start; \ +#define YY_USER_INIT \ + code_start = scanner_cursor = loc->start; \ /* Location of scanner cursor. */ static boundary scanner_cursor; @@@ -55,21 -55,9 +55,21 @@@ static size_t no_cr_read (FILE *, char *, size_t); #define YY_INPUT(buf, result, size) ((result) = no_cr_read (yyin, buf, size)) +#define RETURN_PERCENT_PARAM(Value) \ + RETURN_VALUE(PERCENT_PARAM, param, param_ ## Value) + +#define RETURN_PERCENT_FLAG(Value) \ + RETURN_VALUE(PERCENT_FLAG, uniqstr, uniqstr_new (Value)) + +#define RETURN_VALUE(Token, Field, Value) \ + do { \ + val->Field = Value; \ + return Token; \ + } while (0) + #define ROLLBACK_CURRENT_TOKEN \ do { \ - scanner_cursor.column -= mbsnwidth (yytext, yyleng, 0); \ + scanner_cursor.column -= mbsnwidth (yytext, yyleng, 0); \ yyless (0); \ } while (0) @@@ -102,15 -90,12 +102,15 @@@ static void unexpected_newline (boundar /* A identifier was just read in directives/rules. Special state to capture the sequence 'identifier :'. */ %x SC_AFTER_IDENTIFIER + /* A complex tag, with nested angles brackets. */ +%x SC_TAG - /* Three types of user code: + /* Four types of user code: - prologue (code between '%{' '%}' in the first section, before %%); - actions, printers, union, etc, (between braced in the middle section); - - epilogue (everything after the second %%). */ -%x SC_PROLOGUE SC_BRACED_CODE SC_EPILOGUE + - epilogue (everything after the second %%). + - predicate (code between '%?{' and '{' in middle section); */ +%x SC_PROLOGUE SC_BRACED_CODE SC_EPILOGUE SC_PREDICATE /* C and C++ comments in code. */ %x SC_COMMENT SC_LINE_COMMENT /* Strings and characters in code. */ @@@ -118,27 -103,24 +118,27 @@@ /* Bracketed identifiers support. */ %x SC_BRACKETED_ID SC_RETURN_BRACKETED_ID -letter [.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_] -id {letter}({letter}|[-0-9])* +letter [.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_] +id {letter}({letter}|[-0-9])* directive %{id} -int [0-9]+ +int [0-9]+ /* POSIX says that a tag must be both an id and a C union member, but historically almost any character is allowed in a tag. We disallow - NUL and newline, as this simplifies our implementation. */ -tag [^\0\n>]+ + NUL, as this simplifies our implementation. We disallow angle + bracket to match them in nested pairs: several languages use them + for generics/template types. */ +tag [^\0<>]+ /* Zero or more instances of backslash-newline. Following GCC, allow white space between the backslash and the newline. */ -splice (\\[ \f\t\v]*\n)* +splice (\\[ \f\t\v]*\n)* %% %{ - /* Nesting level of the current code in braces. */ - int braces_level PACIFY_CC (= 0); + /* Nesting level. Either for nested braces, or nested angle brackets + (but not mixed). */ + int nesting PACIFY_CC (= 0); /* Parent context state, when applicable. */ int context_state PACIFY_CC (= 0); @@@ -164,9 -146,7 +164,9 @@@ { /* Comments and white space. */ - "," warn_at (*loc, _("stray ',' treated as white space")); + "," { + complain_at (*loc, Wother, _("stray ',' treated as white space")); + } [ \f\n\t\v] | "//".* ; "/*" { @@@ -188,7 -168,7 +188,7 @@@ `----------------------------*/ /* For directives that are also command line options, the regex must be - "%..." + "%..." after "[-_]"s are removed, and the directive must match the --long option name, with a single string argument. Otherwise, add exceptions to ../build-aux/cross-options.pl. */ @@@ -197,7 -177,7 +197,7 @@@ { "%binary" return PERCENT_NONASSOC; "%code" return PERCENT_CODE; - "%debug" return PERCENT_DEBUG; + "%debug" RETURN_PERCENT_FLAG("parse.trace"); "%default"[-_]"prec" return PERCENT_DEFAULT_PREC; "%define" return PERCENT_DEFINE; "%defines" return PERCENT_DEFINES; @@@ -212,8 -192,8 +212,8 @@@ "%glr-parser" return PERCENT_GLR_PARSER; "%language" return PERCENT_LANGUAGE; "%left" return PERCENT_LEFT; - "%lex-param" return PERCENT_LEX_PARAM; - "%locations" return PERCENT_LOCATIONS; + "%lex-param" RETURN_PERCENT_PARAM(lex); + "%locations" RETURN_PERCENT_FLAG("locations"); "%merge" return PERCENT_MERGE; "%name"[-_]"prefix" return PERCENT_NAME_PREFIX; "%no"[-_]"default"[-_]"prec" return PERCENT_NO_DEFAULT_PREC; @@@ -222,12 -202,10 +222,12 @@@ "%nondeterministic-parser" return PERCENT_NONDETERMINISTIC_PARSER; "%nterm" return PERCENT_NTERM; "%output" return PERCENT_OUTPUT; - "%parse-param" return PERCENT_PARSE_PARAM; + "%param" RETURN_PERCENT_PARAM(both); + "%parse-param" RETURN_PERCENT_PARAM(parse); "%prec" return PERCENT_PREC; + "%precedence" return PERCENT_PRECEDENCE; "%printer" return PERCENT_PRINTER; - "%pure"[-_]"parser" return PERCENT_PURE_PARSER; + "%pure"[-_]"parser" RETURN_PERCENT_FLAG("api.pure"); "%require" return PERCENT_REQUIRE; "%right" return PERCENT_RIGHT; "%skeleton" return PERCENT_SKELETON; @@@ -241,12 -219,14 +241,12 @@@ "%yacc" return PERCENT_YACC; {directive} { - complain_at (*loc, _("invalid directive: %s"), quote (yytext)); + complain_at (*loc, complaint, _("invalid directive: %s"), quote (yytext)); } "=" return EQUAL; "|" return PIPE; ";" return SEMICOLON; - "<*>" return TYPE_TAG_ANY; - "<>" return TYPE_TAG_NONE; {id} { val->uniqstr = uniqstr_new (yytext); @@@ -267,14 -247,14 +267,14 @@@ /* Identifiers may not start with a digit. Yet, don't silently accept "1FOO" as "1 FOO". */ {int}{id} { - complain_at (*loc, _("invalid identifier: %s"), quote (yytext)); + complain_at (*loc, complaint, _("invalid identifier: %s"), quote (yytext)); } /* Characters. */ - "'" token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER; + "'" token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER; /* Strings. */ - "\"" token_start = loc->start; BEGIN SC_ESCAPED_STRING; + "\"" token_start = loc->start; BEGIN SC_ESCAPED_STRING; /* Prologue. */ "%{" code_start = loc->start; BEGIN SC_PROLOGUE; @@@ -282,32 -262,18 +282,32 @@@ /* Code in between braces. */ "{" { STRING_GROW; - braces_level = 0; + nesting = 0; code_start = loc->start; BEGIN SC_BRACED_CODE; } + /* Semantic predicate. */ + "%?"[ \f\n\t\v]*"{" { + nesting = 0; + code_start = loc->start; + BEGIN SC_PREDICATE; + } + /* A type. */ + "<*>" return TAG_ANY; + "<>" return TAG_NONE; "<"{tag}">" { obstack_grow (&obstack_for_string, yytext + 1, yyleng - 2); STRING_FINISH; val->uniqstr = uniqstr_new (last_string); STRING_FREE; - return TYPE; + return TAG; + } + "<" { + nesting = 0; + token_start = loc->start; + BEGIN SC_TAG; } "%%" { @@@ -325,7 -291,7 +325,7 @@@ } . { - complain_at (*loc, _("invalid character: %s"), quote (yytext)); + complain_at (*loc, complaint, _("invalid character: %s"), quote (yytext)); } <> { @@@ -335,17 -301,6 +335,17 @@@ } + /*--------------------------------------------------------------. + | Supporting \0 complexifies our implementation for no expected | + | added value. | + `--------------------------------------------------------------*/ + + +{ + \0 complain_at (*loc, complaint, _("invalid null character")); +} + + /*-----------------------------------------------------------------. | Scanning after an identifier, checking whether a colon is next. | `-----------------------------------------------------------------*/ @@@ -355,16 -310,16 +355,16 @@@ "[" { if (bracketed_id_str) { - ROLLBACK_CURRENT_TOKEN; - BEGIN SC_RETURN_BRACKETED_ID; - *loc = id_loc; - return ID; + ROLLBACK_CURRENT_TOKEN; + BEGIN SC_RETURN_BRACKETED_ID; + *loc = id_loc; + return ID; } else { - bracketed_id_start = loc->start; - bracketed_id_context_state = YY_START; - BEGIN SC_BRACKETED_ID; + bracketed_id_start = loc->start; + bracketed_id_context_state = YY_START; + BEGIN SC_BRACKETED_ID; } } ":" { @@@ -394,34 -349,33 +394,34 @@@ {id} { if (bracketed_id_str) { - complain_at (*loc, _("unexpected identifier in bracketed name: %s"), - quote (yytext)); + complain_at (*loc, complaint, + _("unexpected identifier in bracketed name: %s"), + quote (yytext)); } else { - bracketed_id_str = uniqstr_new (yytext); - bracketed_id_loc = *loc; + bracketed_id_str = uniqstr_new (yytext); + bracketed_id_loc = *loc; } } "]" { BEGIN bracketed_id_context_state; if (bracketed_id_str) { - if (INITIAL == bracketed_id_context_state) - { - val->uniqstr = bracketed_id_str; - bracketed_id_str = 0; - *loc = bracketed_id_loc; - return BRACKETED_ID; - } + if (INITIAL == bracketed_id_context_state) + { + val->uniqstr = bracketed_id_str; + bracketed_id_str = 0; + *loc = bracketed_id_loc; + return BRACKETED_ID; + } } else - complain_at (*loc, _("an identifier expected")); + complain_at (*loc, complaint, _("an identifier expected")); } . { - complain_at (*loc, _("invalid character in bracketed name: %s"), - quote (yytext)); + complain_at (*loc, complaint, _("invalid character in bracketed name: %s"), + quote (yytext)); } <> { BEGIN bracketed_id_context_state; @@@ -449,7 -403,7 +449,7 @@@ { "*/" BEGIN context_state; - .|\n ; + .|\n ; <> unexpected_eof (token_start, "*/"); BEGIN context_state; } @@@ -461,7 -415,7 +461,7 @@@ { "*"{splice}"/" STRING_GROW; BEGIN context_state; - <> unexpected_eof (token_start, "*/"); BEGIN context_state; + <> unexpected_eof (token_start, "*/"); BEGIN context_state; } @@@ -471,9 -425,9 +471,9 @@@ { - "\n" STRING_GROW; BEGIN context_state; - {splice} STRING_GROW; - <> BEGIN context_state; + "\n" STRING_GROW; BEGIN context_state; + {splice} STRING_GROW; + <> BEGIN context_state; } @@@ -505,7 -459,7 +505,7 @@@ /*----------------------------------------------------------. | Scanning a Bison character literal, decoding its escapes. | - | The initial quote is already eaten. | + | The initial quote is already eaten. | `----------------------------------------------------------*/ @@@ -518,13 -472,12 +518,13 @@@ /* FIXME: Eventually, make these errors. */ if (last_string[0] == '\0') { - warn_at (*loc, _("empty character literal")); + complain_at (*loc, Wother, _("empty character literal")); /* '\0' seems dangerous even if we are about to complain. */ val->character = '\''; } else if (last_string[1] != '\0') - warn_at (*loc, _("extra characters in character literal")); + complain_at (*loc, Wother, + _("extra characters in character literal")); } if (yytext[0] == '\n') unexpected_newline (token_start, "'"); @@@ -540,13 -493,12 +540,13 @@@ /* FIXME: Eventually, make these errors. */ if (last_string[0] == '\0') { - warn_at (*loc, _("empty character literal")); + complain_at (*loc, Wother, _("empty character literal")); /* '\0' seems dangerous even if we are about to complain. */ val->character = '\''; } else if (last_string[1] != '\0') - warn_at (*loc, _("extra characters in character literal")); + complain_at (*loc, Wother, + _("extra characters in character literal")); } unexpected_eof (token_start, "'"); STRING_FREE; @@@ -555,40 -507,11 +555,40 @@@ } } - + /*-----------------------------------------------------------. + | Scanning a Bison nested tag. The initial angle bracket is | + | already eaten. | + `-----------------------------------------------------------*/ + + { - \0 complain_at (*loc, _("invalid null character")); -} + ">" { + --nesting; + if (nesting < 0) + { + STRING_FINISH; + loc->start = token_start; + val->uniqstr = uniqstr_new (last_string); + STRING_FREE; + BEGIN INITIAL; + return TAG; + } + STRING_GROW; + } + [^<>]+ STRING_GROW; + "<"+ STRING_GROW; nesting += yyleng; + + <> { + unexpected_eof (token_start, ">"); + STRING_FINISH; + loc->start = token_start; + val->uniqstr = uniqstr_new (last_string); + STRING_FREE; + BEGIN INITIAL; + return TAG; + } +} /*----------------------------. | Decode escaped characters. | @@@ -599,7 -522,7 +599,7 @@@ \\[0-7]{1,3} { unsigned long int c = strtoul (yytext + 1, NULL, 8); if (!c || UCHAR_MAX < c) - complain_at (*loc, _("invalid number after \\-escape: %s"), + complain_at (*loc, complaint, _("invalid number after \\-escape: %s"), yytext+1); else obstack_1grow (&obstack_for_string, c); @@@ -609,19 -532,19 +609,19 @@@ verify (UCHAR_MAX < ULONG_MAX); unsigned long int c = strtoul (yytext + 2, NULL, 16); if (!c || UCHAR_MAX < c) - complain_at (*loc, _("invalid number after \\-escape: %s"), + complain_at (*loc, complaint, _("invalid number after \\-escape: %s"), yytext+1); else obstack_1grow (&obstack_for_string, c); } - \\a obstack_1grow (&obstack_for_string, '\a'); - \\b obstack_1grow (&obstack_for_string, '\b'); - \\f obstack_1grow (&obstack_for_string, '\f'); - \\n obstack_1grow (&obstack_for_string, '\n'); - \\r obstack_1grow (&obstack_for_string, '\r'); - \\t obstack_1grow (&obstack_for_string, '\t'); - \\v obstack_1grow (&obstack_for_string, '\v'); + \\a obstack_1grow (&obstack_for_string, '\a'); + \\b obstack_1grow (&obstack_for_string, '\b'); + \\f obstack_1grow (&obstack_for_string, '\f'); + \\n obstack_1grow (&obstack_for_string, '\n'); + \\r obstack_1grow (&obstack_for_string, '\r'); + \\t obstack_1grow (&obstack_for_string, '\t'); + \\v obstack_1grow (&obstack_for_string, '\v'); /* \\[\"\'?\\] would be shorter, but it confuses xgettext. */ \\("\""|"'"|"?"|"\\") obstack_1grow (&obstack_for_string, yytext[1]); @@@ -629,20 -552,19 +629,20 @@@ \\(u|U[0-9abcdefABCDEF]{4})[0-9abcdefABCDEF]{4} { int c = convert_ucn_to_byte (yytext); if (c <= 0) - complain_at (*loc, _("invalid number after \\-escape: %s"), + complain_at (*loc, complaint, _("invalid number after \\-escape: %s"), yytext+1); else obstack_1grow (&obstack_for_string, c); } - \\(.|\n) { + \\(.|\n) { char const *p = yytext + 1; /* Quote only if escaping won't make the character visible. */ - if (isspace ((unsigned char) *p) && isprint ((unsigned char) *p)) + if (c_isspace ((unsigned char) *p) && c_isprint ((unsigned char) *p)) p = quote (p); else p = quotearg_style_mem (escape_quoting_style, p, 1); - complain_at (*loc, _("invalid character after \\-escape: %s"), p); + complain_at (*loc, complaint, _("invalid character after \\-escape: %s"), + p); } } @@@ -652,21 -574,21 +652,21 @@@ { - {splice}|\\{splice}[^\n\[\]] STRING_GROW; + {splice}|\\{splice}[^\n\[\]] STRING_GROW; } { - "'" STRING_GROW; BEGIN context_state; - \n unexpected_newline (token_start, "'"); BEGIN context_state; - <> unexpected_eof (token_start, "'"); BEGIN context_state; + "'" STRING_GROW; BEGIN context_state; + \n unexpected_newline (token_start, "'"); BEGIN context_state; + <> unexpected_eof (token_start, "'"); BEGIN context_state; } { - "\"" STRING_GROW; BEGIN context_state; - \n unexpected_newline (token_start, "\""); BEGIN context_state; - <> unexpected_eof (token_start, "\""); BEGIN context_state; + "\"" STRING_GROW; BEGIN context_state; + \n unexpected_newline (token_start, "\""); BEGIN context_state; + <> unexpected_eof (token_start, "\""); BEGIN context_state; } @@@ -674,7 -596,7 +674,7 @@@ | Strings, comments etc. can be found in user code. | `---------------------------------------------------*/ - + { "'" { STRING_GROW; @@@ -704,63 -626,42 +704,63 @@@ /*-----------------------------------------------------------. - | Scanning some code in braces (actions). The initial "{" is | - | already eaten. | + | Scanning some code in braces (actions, predicates). The | + | initial "{" is already eaten. | `-----------------------------------------------------------*/ - + { - "{"|"<"{splice}"%" STRING_GROW; braces_level++; - "%"{splice}">" STRING_GROW; braces_level--; - "}" { - obstack_1grow (&obstack_for_string, '}'); - - --braces_level; - if (braces_level < 0) - { - STRING_FINISH; - loc->start = code_start; - val->code = last_string; - BEGIN INITIAL; - return BRACED_CODE; - } - } + "{"|"<"{splice}"%" STRING_GROW; nesting++; + "%"{splice}">" STRING_GROW; nesting--; /* Tokenize '<<%' correctly (as '<<' '%') rather than incorrrectly (as '<' '<%'). */ "<"{splice}"<" STRING_GROW; <> { + int token = (YY_START == SC_BRACED_CODE) ? BRACED_CODE : BRACED_PREDICATE; unexpected_eof (code_start, "}"); STRING_FINISH; loc->start = code_start; val->code = last_string; BEGIN INITIAL; - return BRACED_CODE; + return token; } } + +{ + "}" { + obstack_1grow (&obstack_for_string, '}'); + + --nesting; + if (nesting < 0) + { + STRING_FINISH; + loc->start = code_start; + val->code = last_string; + BEGIN INITIAL; + return BRACED_CODE; + } + } +} + + +{ + "}" { + --nesting; + if (nesting < 0) + { + STRING_FINISH; + loc->start = code_start; + val->code = last_string; + BEGIN INITIAL; + return BRACED_PREDICATE; + } + else + obstack_1grow (&obstack_for_string, '}'); + } +} /*--------------------------------------------------------------. | Scanning some prologue: from "%{" (already scanned) to "%}". | @@@ -808,8 -709,8 +808,8 @@@ | By default, grow the string obstack with the input. | `-----------------------------------------------------*/ -. | -\n STRING_GROW; +. | + \n STRING_GROW; %% @@@ -825,35 -726,35 +825,35 @@@ no_cr_read (FILE *fp, char *buf, size_ { char *w = memchr (buf, '\r', bytes_read); if (w) - { - char const *r = ++w; - char const *lim = buf + bytes_read; - - for (;;) - { - /* Found an '\r'. Treat it like '\n', but ignore any - '\n' that immediately follows. */ - w[-1] = '\n'; - if (r == lim) - { - int ch = getc (fp); - if (ch != '\n' && ungetc (ch, fp) != ch) - break; - } - else if (*r == '\n') - r++; - - /* Copy until the next '\r'. */ - do - { - if (r == lim) - return w - buf; - } - while ((*w++ = *r++) != '\r'); - } - - return w - buf; - } + { + char const *r = ++w; + char const *lim = buf + bytes_read; + + for (;;) + { + /* Found an '\r'. Treat it like '\n', but ignore any + '\n' that immediately follows. */ + w[-1] = '\n'; + if (r == lim) + { + int ch = getc (fp); + if (ch != '\n' && ungetc (ch, fp) != ch) + break; + } + else if (*r == '\n') + r++; + + /* Copy until the next '\r'. */ + do + { + if (r == lim) + return w - buf; + } + while ((*w++ = *r++) != '\r'); + } + + return w - buf; + } } return bytes_read; @@@ -873,8 -774,7 +873,8 @@@ scan_integer (char const *number, int b if (INT_MAX < num) { - complain_at (loc, _("integer out of range: %s"), quote (number)); + complain_at (loc, complaint, _("integer out of range: %s"), + quote (number)); num = INT_MAX; } @@@ -885,7 -785,7 +885,7 @@@ /*------------------------------------------------------------------. | Convert universal character name UCN to a single-byte character, | | and return that character. Return -1 if UCN does not correspond | -| to a single-byte character. | +| to a single-byte character. | `------------------------------------------------------------------*/ static int @@@ -913,22 -813,22 +913,22 @@@ convert_ucn_to_byte (char const *ucn about. */ static signed char const table[] = { - '\0', -1, -1, -1, -1, -1, -1, '\a', - '\b', '\t', '\n', '\v', '\f', '\r', -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', - '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '{', '|', '}', '~' + '\0', -1, -1, -1, -1, -1, -1, '\a', + '\b', '\t', '\n', '\v', '\f', '\r', -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + ' ', '!', '"', '#', '$', '%', '&', '\'', + '(', ')', '*', '+', ',', '-', '.', '/', + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', ':', ';', '<', '=', '>', '?', + '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', + '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', '{', '|', '}', '~' }; code = code < sizeof table ? table[code] : -1; @@@ -948,11 -848,11 +948,11 @@@ handle_syncline (char *args, location l { char *after_num; unsigned long int lineno = strtoul (args, &after_num, 10); - char *file = mbschr (after_num, '"') + 1; - *mbschr (file, '"') = '\0'; + char *file = strchr (after_num, '"') + 1; + *strchr (file, '"') = '\0'; if (INT_MAX <= lineno) { - warn_at (loc, _("line number overflow")); + complain_at (loc, Wother, _("line number overflow")); lineno = INT_MAX; } current_file = uniqstr_new (file); @@@ -962,8 -862,8 +962,8 @@@ /*----------------------------------------------------------------. | For a token or comment starting at START, report message MSGID, | -| which should say that an end marker was found before | -| the expected TOKEN_END. | +| which should say that an end marker was found before | +| the expected TOKEN_END. | `----------------------------------------------------------------*/ static void @@@ -974,9 -874,9 +974,9 @@@ unexpected_end (boundary start, char co loc.end = scanner_cursor; token_end = quote (token_end); // Instead of '\'', display "'". - if (!strcmp (token_end, "'\\''")) + if (STREQ (token_end, "'\\''")) token_end = "\"'\""; - complain_at (loc, _(msgid), token_end); + complain_at (loc, complaint, _(msgid), token_end); } diff --combined src/system.h index eba7845e,bf7f59f9..0395a0c0 --- a/src/system.h +++ b/src/system.h @@@ -16,65 -16,47 +16,61 @@@ along with this program. If not, see . */ #ifndef BISON_SYSTEM_H -# define BISON_SYSTEM_H +#define BISON_SYSTEM_H /* flex 2.5.31 gratutiously defines macros like INT8_MIN. But this runs afoul of pre-C99 compilers that have or , which are included below if available. It also runs afoul of pre-C99 compilers that define these macros in . */ -# if ! defined __STDC_VERSION__ || __STDC_VERSION__ < 199901 -# undef INT8_MIN -# undef INT16_MIN -# undef INT32_MIN -# undef INT8_MAX -# undef INT16_MAX -# undef UINT8_MAX -# undef INT32_MAX -# undef UINT16_MAX -# undef UINT32_MAX -# endif - -# include -# include -# include -# include -# include -# include - -# ifndef UINTPTR_MAX +#if ! defined __STDC_VERSION__ || __STDC_VERSION__ < 199901 +# undef INT8_MIN +# undef INT16_MIN +# undef INT32_MIN +# undef INT8_MAX +# undef INT16_MAX +# undef UINT8_MAX +# undef INT32_MAX +# undef UINT16_MAX +# undef UINT32_MAX +#endif + +#include +#include +#include +#include + +#define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array)) +#define STREQ(L, R) (strcmp(L, R) == 0) +#define STRNEQ(L, R) (!STREQ(L, R)) + +/* Just like strncmp, but the second argument must be a literal string + and you don't specify the length. */ +#define STRNCMP_LIT(S, Literal) \ + strncmp (S, "" Literal "", sizeof (Literal) - 1) + +/* Whether Literal is a prefix of S. */ +#define STRPREFIX_LIT(Literal, S) \ + (STRNCMP_LIT (S, Literal) == 0) + - #if HAVE_SYS_TYPES_H - # include - #endif - +#include +#include + +#ifndef UINTPTR_MAX /* This isn't perfect, but it's good enough for Bison, which needs only to hash pointers. */ typedef size_t uintptr_t; -# endif +#endif // Version mismatch. -# define EX_MISMATCH 63 +#define EX_MISMATCH 63 /*---------. | Gnulib. | `---------*/ -# include -# include -# include +#include +#include +#include /*-----------------. @@@ -93,49 -75,48 +89,48 @@@ and safer logic than it would for users. Due to the overhead of M4, suppressing Code is unlikely to offer any significant improvement in Bison's performance anyway. */ -# define PACIFY_CC(Code) Code +#define PACIFY_CC(Code) Code -# ifndef __attribute__ +#ifndef __attribute__ /* This feature is available in gcc versions 2.5 and later. */ -# if (! defined __GNUC__ || __GNUC__ < 2 \ +# if (! defined __GNUC__ || __GNUC__ < 2 \ || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)) -# define __attribute__(Spec) /* empty */ -# endif +# define __attribute__(Spec) /* empty */ # endif +#endif /* The __-protected variants of `format' and `printf' attributes are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ -# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) -# define __format__ format -# define __printf__ printf -# endif +#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) +# define __format__ format +# define __printf__ printf +#endif -# ifndef ATTRIBUTE_NORETURN -# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) -# endif +#ifndef ATTRIBUTE_NORETURN +# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) +#endif -# ifndef ATTRIBUTE_UNUSED -# define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) -# endif +#ifndef ATTRIBUTE_UNUSED +# define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +#endif - #define FUNCTION_PRINT() fprintf (stderr, "%s: ", __func__) /*------. | NLS. | `------*/ -# include +#include -# include -# define _(Msgid) gettext (Msgid) -# define N_(Msgid) (Msgid) +#include +#define _(Msgid) gettext (Msgid) +#define N_(Msgid) (Msgid) /*-----------. | Booleans. | `-----------*/ -# include +#include @@@ -161,21 -142,19 +156,21 @@@ For now, we use assert but we call it aver throughout Bison in case we later wish to try another scheme. */ -# include -# define aver assert +#include +#define aver assert /*-----------. | Obstacks. | `-----------*/ -# define obstack_chunk_alloc xmalloc -# define obstack_chunk_free free -# include +#define obstack_chunk_alloc xmalloc +#define obstack_chunk_free free +#include + +/* String-grow: append Str to Obs. */ -# define obstack_sgrow(Obs, Str) \ +#define obstack_sgrow(Obs, Str) \ obstack_grow (Obs, Str, strlen (Str)) /* Output Str escaped for our postprocessing (i.e., escape M4 special @@@ -185,15 -164,15 +180,15 @@@ # define obstack_escape(Obs, Str) \ do { \ - char const *p; \ - for (p = Str; *p; p++) \ - switch (*p) \ + char const *p__; \ + for (p__ = Str; *p__; p__++) \ + switch (*p__) \ { \ case '$': obstack_sgrow (Obs, "$]["); break; \ case '@': obstack_sgrow (Obs, "@@" ); break; \ case '[': obstack_sgrow (Obs, "@{" ); break; \ case ']': obstack_sgrow (Obs, "@}" ); break; \ - default: obstack_1grow (Obs, *p ); break; \ + default: obstack_1grow (Obs, *p__ ); break; \ } \ } while (0) @@@ -219,11 -198,6 +214,11 @@@ } while (0) +/* Append the ending 0, finish Obs, and return the string. */ + +# define obstack_finish0(Obs) \ + (obstack_1grow (Obs, '\0'), (char *) obstack_finish (Obs)) + @@@ -231,13 -205,13 +226,13 @@@ | Extensions to use for the output files. | `-----------------------------------------*/ -# ifndef OUTPUT_EXT -# define OUTPUT_EXT ".output" -# endif +#ifndef OUTPUT_EXT +# define OUTPUT_EXT ".output" +#endif -# ifndef TAB_EXT -# define TAB_EXT ".tab" -# endif +#ifndef TAB_EXT +# define TAB_EXT ".tab" +#endif @@@ -245,15 -219,15 +240,15 @@@ | Free a linked list. | `---------------------*/ -# define LIST_FREE(Type, List) \ - do { \ - Type *_node, *_next; \ - for (_node = List; _node; _node = _next) \ - { \ - _next = _node->next; \ - free (_node); \ - } \ - } while (0) +#define LIST_FREE(Type, List) \ +do { \ + Type *_node, *_next; \ + for (_node = List; _node; _node = _next) \ + { \ + _next = _node->next; \ + free (_node); \ + } \ +} while (0) /*---------------------------------------------.