3 * Copyright (c) 2004, 2005, 2006 Larry Wall and others
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
8 * Note that this file was originally generated as an output from
9 * GNU bison version 1.875, but now the code is statically maintained
10 * and edited; the bits that are dependent on perly.y/madly.y are now
11 * #included from the files perly.tab/madly.tab and perly.act/madly.act.
13 * Here is an important copyright statement from the original, generated
16 * As a special exception, when this file is copied by Bison into a
17 * Bison output file, you may use that output file without
18 * restriction. This special exception was added by the Free
19 * Software Foundation in version 1.24 of Bison.
21 * Note that this file is also #included in madly.c, to allow compilation
22 * of a second parser, Perl_madparse, that is identical to Perl_yyparse,
23 * but which includes the parser tables from madly.{tab,act} rather than
24 * perly.{tab,act}. This is controlled by the PERL_IN_MADLY_C define.
28 /* allow stack size to grow effectively without limit */
29 #define YYMAXDEPTH 10000000
32 #define PERL_IN_PERLY_C
35 typedef signed char yysigned_char;
43 /* contains all the parser state tables; auto-generated from perly.y/madly.y */
44 #ifdef PERL_IN_MADLY_C
50 # define YYSIZE_T size_t
52 #define yyerrok (yyerrstatus = 0)
53 #define yyclearin (yychar = YYEMPTY)
57 #define YYACCEPT goto yyacceptlab
58 #define YYABORT goto yyabortlab
59 #define YYERROR goto yyerrlab1
62 /* Like YYERROR except do call yyerror. This remains here temporarily
63 to ease the transition to the new meaning of YYERROR, for GCC.
64 Once GCC version 2 has supplanted version 1, this can go. */
66 #define YYFAIL goto yyerrlab
68 #define YYRECOVERING() (!!yyerrstatus)
70 #define YYBACKUP(Token, Value) \
72 if (yychar == YYEMPTY && yylen == 1) { \
75 yytoken = YYTRANSLATE (yychar); \
80 yyerror ("syntax error: cannot back up"); \
88 /* Enable debugging if requested. */
91 # define yydebug (DEBUG_p_TEST)
93 # define YYFPRINTF PerlIO_printf
95 # define YYDPRINTF(Args) \
101 # define YYDSYMPRINTF(Title, Token, Value) \
104 YYFPRINTF (Perl_debug_log, "%s ", Title); \
105 yysymprint (aTHX_ Perl_debug_log, Token, Value); \
106 YYFPRINTF (Perl_debug_log, "\n"); \
110 /*--------------------------------.
111 | Print this symbol on YYOUTPUT. |
112 `--------------------------------*/
115 yysymprint(pTHX_ PerlIO * const yyoutput, int yytype, const YYSTYPE * const yyvaluep)
117 if (yytype < YYNTOKENS) {
118 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
120 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
122 YYFPRINTF (yyoutput, "0x%"UVxf, (UV)yyvaluep->ival);
126 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
128 YYFPRINTF (yyoutput, ")");
133 * print the top 8 items on the parse stack. The args have the same
134 * meanings as the local vars in yyparse() of the same name */
137 yy_stack_print (pTHX_ const short *yyss, const short *yyssp, const YYSTYPE *yyvs, const char**yyns)
141 int count = (int)(yyssp - yyss);
144 start = count - 8 + 1;
148 PerlIO_printf(Perl_debug_log, "\nindex:");
149 for (i=0; i < count; i++)
150 PerlIO_printf(Perl_debug_log, " %8d", start+i);
151 PerlIO_printf(Perl_debug_log, "\nstate:");
152 for (i=0; i < count; i++)
153 PerlIO_printf(Perl_debug_log, " %8d", yyss[start+i]);
154 PerlIO_printf(Perl_debug_log, "\ntoken:");
155 for (i=0; i < count; i++)
156 PerlIO_printf(Perl_debug_log, " %8.8s", yyns[start+i]);
157 PerlIO_printf(Perl_debug_log, "\nvalue:");
158 for (i=0; i < count; i++) {
159 if (yy_is_opval[yystos[yyss[start+i]]]) {
160 PerlIO_printf(Perl_debug_log, " %8.8s",
162 ? PL_op_name[yyvs[start+i].opval->op_type]
167 PerlIO_printf(Perl_debug_log, " %8"UVxf, (UV)yyvs[start+i].ival);
169 PerlIO_printf(Perl_debug_log, "\n\n");
172 # define YY_STACK_PRINT(yyss, yyssp, yyvs, yyns) \
174 if (yydebug && DEBUG_v_TEST) \
175 yy_stack_print (aTHX_ (yyss), (yyssp), (yyvs), (yyns)); \
179 /*------------------------------------------------.
180 | Report that the YYRULE is going to be reduced. |
181 `------------------------------------------------*/
184 yy_reduce_print (pTHX_ int yyrule)
187 const unsigned int yylineno = yyrline[yyrule];
188 YYFPRINTF (Perl_debug_log, "Reducing stack by rule %d (line %u), ",
189 yyrule - 1, yylineno);
190 /* Print the symbols being reduced, and their result. */
191 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
192 YYFPRINTF (Perl_debug_log, "%s ", yytname [yyrhs[yyi]]);
193 YYFPRINTF (Perl_debug_log, "-> %s\n", yytname [yyr1[yyrule]]);
196 # define YY_REDUCE_PRINT(Rule) \
199 yy_reduce_print (aTHX_ Rule); \
202 #else /* !DEBUGGING */
203 # define YYDPRINTF(Args)
204 # define YYDSYMPRINTF(Title, Token, Value)
205 # define YY_STACK_PRINT(yyss, yyssp, yyvs, yyns)
206 # define YY_REDUCE_PRINT(Rule)
207 #endif /* !DEBUGGING */
210 /* YYINITDEPTH -- initial size of the parser's stacks. */
212 # define YYINITDEPTH 200
218 # if defined (__GLIBC__) && defined (_STRING_H)
219 # define yystrlen strlen
221 /* Return the length of YYSTR. */
223 yystrlen (const char *yystr)
225 register const char *yys = yystr;
227 while (*yys++ != '\0')
230 return yys - yystr - 1;
236 # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
237 # define yystpcpy stpcpy
239 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
242 yystpcpy (pTHX_ char *yydest, const char *yysrc)
244 register char *yyd = yydest;
245 register const char *yys = yysrc;
247 while ((*yyd++ = *yys++) != '\0')
255 #endif /* !YYERROR_VERBOSE */
262 #ifdef PERL_IN_MADLY_C
269 int yychar; /* The lookahead symbol. */
270 YYSTYPE yylval; /* The semantic value of the lookahead symbol. */
271 int yynerrs; /* Number of syntax errors so far. */
272 register int yystate;
276 /* Number of tokens to shift before error messages enabled. */
278 /* Lookahead token as an internal (translated) token number. */
281 /* two stacks and their tools:
282 yyss: related to states,
283 yyvs: related to semantic values,
285 Refer to the stacks thru separate pointers, to allow yyoverflow
286 to reallocate them elsewhere. */
288 /* The state stack. */
290 register short *yyssp;
292 /* The semantic value stack. */
294 register YYSTYPE *yyvsp;
296 /* for ease of re-allocation and automatic freeing, have two SVs whose
297 * SvPVX points to the stacks */
298 SV *yyss_sv, *yyvs_sv;
301 /* maintain also a stack of token/rule names for debugging with -Dpv */
302 const char **yyns, **yynsp;
304 # define YYPOPSTACK (yyvsp--, yyssp--, yynsp--)
306 # define YYPOPSTACK (yyvsp--, yyssp--)
310 YYSIZE_T yystacksize = YYINITDEPTH;
312 /* The variables used to return semantic value and location from the
317 /* When reducing, the number of symbols on the RHS of the reduced
321 #ifndef PERL_IN_MADLY_C
328 YYDPRINTF ((Perl_debug_log, "Starting parse\n"));
330 ENTER; /* force stack free before we return */
331 SAVEVPTR(PL_yycharp);
332 SAVEVPTR(PL_yylvalp);
333 PL_yycharp = &yychar; /* so PL_yyerror() can access it */
334 PL_yylvalp = &yylval; /* so various functions in toke.c can access it */
336 yyss_sv = newSV(YYINITDEPTH * sizeof(short));
337 yyvs_sv = newSV(YYINITDEPTH * sizeof(YYSTYPE));
340 yyss = (short *) SvPVX(yyss_sv);
341 yyvs = (YYSTYPE *) SvPVX(yyvs_sv);
342 /* note that elements zero of yyvs and yyns are not used */
346 yyns_sv = newSV(YYINITDEPTH * sizeof(char *));
348 /* XXX This seems strange to cast char * to char ** */
349 yyns = (const char **) SvPVX(yyns_sv);
356 yychar = YYEMPTY; /* Cause a token to be read. */
358 YYDPRINTF ((Perl_debug_log, "Entering state %d\n", yystate));
362 /*------------------------------------------------------------.
363 | yynewstate -- Push a new state, which is found in yystate. |
364 `------------------------------------------------------------*/
366 /* In all cases, when you get here, the value and location stacks
367 have just been pushed. so pushing a state here evens the stacks.
374 if (yyss + yystacksize - 1 <= yyssp) {
375 /* Get the current used size of the three stacks, in elements. */
376 const YYSIZE_T yysize = yyssp - yyss + 1;
378 /* Extend the stack our own way. */
379 if (YYMAXDEPTH <= yystacksize)
382 if (YYMAXDEPTH < yystacksize)
383 yystacksize = YYMAXDEPTH;
385 SvGROW(yyss_sv, yystacksize * sizeof(short));
386 SvGROW(yyvs_sv, yystacksize * sizeof(YYSTYPE));
387 yyss = (short *) SvPVX(yyss_sv);
388 yyvs = (YYSTYPE *) SvPVX(yyvs_sv);
390 SvGROW(yyns_sv, yystacksize * sizeof(char *));
391 /* XXX This seems strange to cast char * to char ** */
392 yyns = (const char **) SvPVX(yyns_sv);
395 yynsp = yyns + yysize - 1;
400 yyssp = yyss + yysize - 1;
401 yyvsp = yyvs + yysize - 1;
404 YYDPRINTF ((Perl_debug_log, "Stack size increased to %lu\n",
405 (unsigned long int) yystacksize));
407 if (yyss + yystacksize - 1 <= yyssp)
418 /* Do appropriate processing given the current state. */
419 /* Read a lookahead token if we need one and don't already have one. */
422 /* First try to decide what to do without reference to lookahead token. */
424 yyn = yypact[yystate];
425 if (yyn == YYPACT_NINF)
428 /* Not known => get a lookahead token if don't already have one. */
430 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
431 if (yychar == YYEMPTY) {
432 YYDPRINTF ((Perl_debug_log, "Reading a token: "));
433 #ifndef PERL_IN_MADLY_C
435 yychar = PL_madskills ? madlex() : yylex();
442 if (yychar >= 0 && yychar < 255) {
443 yychar = NATIVE_TO_ASCII(yychar);
448 if (yychar <= YYEOF) {
449 yychar = yytoken = YYEOF;
450 YYDPRINTF ((Perl_debug_log, "Now at end of input.\n"));
453 yytoken = YYTRANSLATE (yychar);
454 YYDSYMPRINTF ("Next token is", yytoken, &yylval);
457 /* If the proper action on seeing token YYTOKEN is to reduce or to
458 detect an error, take that action. */
460 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
464 if (yyn == 0 || yyn == YYTABLE_NINF)
473 /* Shift the lookahead token. */
474 YYDPRINTF ((Perl_debug_log, "Shifting token %s, ", yytname[yytoken]));
476 /* Discard the token being shifted unless it is eof. */
482 *++yynsp = (const char *)(yytname[yytoken]);
486 /* Count tokens shifted since error; after three, turn off error
492 YYDPRINTF ((Perl_debug_log, "Entering state %d\n", yystate));
497 /*-----------------------------------------------------------.
498 | yydefault -- do the default action for the current state. |
499 `-----------------------------------------------------------*/
501 yyn = yydefact[yystate];
507 /*-----------------------------.
508 | yyreduce -- Do a reduction. |
509 `-----------------------------*/
511 /* yyn is the number of a rule to reduce with. */
514 /* If YYLEN is nonzero, implement the default value of the action:
517 Otherwise, the following line sets YYVAL to garbage.
518 This behavior is undocumented and Bison
519 users should not rely upon it. Assigning to YYVAL
520 unconditionally makes the parser a bit smaller, and it avoids a
521 GCC warning that YYVAL may be used uninitialized. */
522 yyval = yyvsp[1-yylen];
525 YY_REDUCE_PRINT (yyn);
528 /* contains all the rule actions; auto-generated from perly.y or madly.y */
530 #define dep() deprecate("\"do\" to call subroutines")
531 #ifdef PERL_IN_MADLY_C
532 # include "madly.act"
534 # include "perly.act"
548 *++yynsp = (const char *)(yytname [yyr1[yyn]]);
551 /* Now shift the result of the reduction. Determine what state
552 that goes to, based on the state we popped back to and the rule
553 number reduced by. */
557 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
558 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
559 yystate = yytable[yystate];
561 yystate = yydefgoto[yyn - YYNTOKENS];
563 YYDPRINTF ((Perl_debug_log, "Entering state %d\n", yystate));
566 /* tmp push yystate for stack print; this is normally pushed later in
570 YY_STACK_PRINT (yyss, yyssp, yyvs, yyns);
577 /*------------------------------------.
578 | yyerrlab -- here on detecting error |
579 `------------------------------------*/
581 /* If not already recovering from an error, report this error. */
585 yyn = yypact[yystate];
587 if (YYPACT_NINF < yyn && yyn < YYLAST) {
589 const int yytype = YYTRANSLATE (yychar);
594 /* Start YYX at -YYN if negative to avoid negative indexes in
596 for (yyx = yyn < 0 ? -yyn : 0;
597 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
598 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
599 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
600 yysize += yystrlen ("syntax error, unexpected ") + 1;
601 yysize += yystrlen (yytname[yytype]);
602 Newx(yymsg, yysize, char *);
604 const char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
605 yyp = yystpcpy (yyp, yytname[yytype]);
609 for (yyx = yyn < 0 ? -yyn : 0;
610 yyx < (int) (sizeof (yytname) / sizeof (char *));
613 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) {
614 const char *yyq = ! yycount ?
615 ", expecting " : " or ";
616 yyp = yystpcpy (yyp, yyq);
617 yyp = yystpcpy (yyp, yytname[yyx]);
623 YYSTACK_FREE (yymsg);
626 yyerror ("syntax error; also virtual memory exhausted");
629 #endif /* YYERROR_VERBOSE */
630 yyerror ("syntax error");
634 if (yyerrstatus == 3) {
635 /* If just tried and failed to reuse lookahead token after an
636 error, discard it. */
638 /* Return failure if at end of input. */
639 if (yychar == YYEOF) {
640 /* Pop the error token. */
642 /* Pop the rest of the stack. */
643 while (yyss < yyssp) {
644 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp);
645 if (yy_is_opval[yystos[*yyssp]]) {
646 YYDPRINTF ((Perl_debug_log, "(freeing op)\n"));
647 op_free(yyvsp->opval);
654 YYDSYMPRINTF ("Error: discarding", yytoken, &yylval);
659 /* Else will try to reuse lookahead token after shifting the error
664 /*----------------------------------------------------.
665 | yyerrlab1 -- error raised explicitly by an action. |
666 `----------------------------------------------------*/
668 yyerrstatus = 3; /* Each real token shifted decrements this. */
671 yyn = yypact[yystate];
672 if (yyn != YYPACT_NINF) {
674 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) {
681 /* Pop the current state because it cannot handle the error token. */
685 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp);
686 if (yy_is_opval[yystos[*yyssp]]) {
687 YYDPRINTF ((Perl_debug_log, "(freeing op)\n"));
688 op_free(yyvsp->opval);
696 YY_STACK_PRINT (yyss, yyssp, yyvs, yyns);
702 YYDPRINTF ((Perl_debug_log, "Shifting error token, "));
710 YYDPRINTF ((Perl_debug_log, "Entering state %d\n", yystate));
715 /*-------------------------------------.
716 | yyacceptlab -- YYACCEPT comes here. |
717 `-------------------------------------*/
722 /*-----------------------------------.
723 | yyabortlab -- YYABORT comes here. |
724 `-----------------------------------*/
729 /*----------------------------------------------.
730 | yyoverflowlab -- parser overflow comes here. |
731 `----------------------------------------------*/
733 yyerror ("parser stack overflow");
739 LEAVE; /* force stack free before we return */
746 * c-indentation-style: bsd
748 * indent-tabs-mode: t
751 * ex: set ts=8 sts=4 sw=4 noet: