YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense
along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains partoralloftheBisonparserskeletonanddistributethatwork undertermsofyourchoice,solongasthatworkisn'titselfa parsergeneratorusingtheskeletonoramodifiedversionthereof asaparserskeleton.Alternatively,ifyoumodifyorredistribute theparserskeletonitself,youmay(atyouroption)removethis specialexception,whichwillcausetheskeletonandtheresulting BisonoutputfilestobelicensedundertheGNUGeneralPublic Licensewithoutthisspecialexception.
ThisspecialexceptionwasaddedbytheFreeSoftwareFoundationin
version 2.2 of Bison. */
/* C LALR(1) parser skeleton written by Richard Stallman, by
simplifying the original so-called "semantic" parser. */
/* All symbols defined below should begin with yy or YY, to avoid infringingonusernamespace.Thisshouldbedoneevenforlocal variables,astheymightotherwisebeexpandedbyusermacros. Therearesomeunavoidableexceptionswithinincludefilesto definenecessarylibrarysymbols;theyarenoted"INFRINGESON
USER NAME SPACE" below. */
/* Copy the first part of user declarations. */ #line34"parse.y"/* yacc.c:339 */
/* Copyright (c) 1990 The Regents of the University of California. */ /* All rights reserved. */
/* This code is derived from software contributed to Berkeley by */ /* Vern Paxson. */
/* The United States Government has rights in this work pursuant */ /* to contract no. DE-AC03-76SF00098 between the United States */ /* Department of Energy and the University of California. */
/* This file is part of flex. */
/* Redistribution and use in source and binary forms, with or without */ /* modification, are permitted provided that the following conditions */ /* are met: */
/* 1. Redistributions of source code must retain the above copyright */ /* notice, this list of conditions and the following disclaimer. */ /* 2. Redistributions in binary form must reproduce the above copyright */ /* notice, this list of conditions and the following disclaimer in the */ /* documentation and/or other materials provided with the distribution. */
/* Neither the name of the University nor the names of its contributors */ /* may be used to endorse or promote products derived from this software */ /* without specific prior written permission. */
/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */ /* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */ /* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ /* PURPOSE. */
#include"flexdef.h" #include"tables.h"
int pat, scnum, eps, headcnt, trailcnt, lastchar, i, rulelen; int trlcontxt, xcluflg, currccl, cclsorted, varlength, variable_trail_rule;
int *scon_stk; int scon_stk_ptr;
staticint madeany = false; /* whether we've made the '.' character class */ staticint ccldot, cclany; int previous_continued_action; /* whether the previous rule's action was '|' */
/* Expand a POSIX character class expression. */ #define CCL_EXPR(func) \ do{ \ int c; \ for ( c = 0; c < csize; ++c ) \ if ( isascii(c) && func(c) ) \
ccladd( currccl, c ); \
}while(0)
/* negated class */ #define CCL_NEG_EXPR(func) \ do{ \ int c; \ for ( c = 0; c < csize; ++c ) \ if ( !func(c) ) \
ccladd( currccl, c ); \
}while(0)
/* While POSIX defines isblank(), it's not ANSI C. */ #define IS_BLANK(c) ((c) == ' ' || (c) == '\t')
/* On some over-ambitious machines, such as DEC Alpha's, the default *tokentypeis"long"insteadof"int";thisleadstoproblemswith *declaringyylvalinflexdef.h.Butsofar,alltheyacc'sI'veseen *wraptheirdefinitionsofYYSTYPEwith"#ifndefYYSTYPE"'s,sothe *followingshouldensurethatthedefaulttokentypeis"int".
*/ #define YYSTYPE int
/* The parser invokes alloca or malloc; define the necessary symbols. */
# ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif
# ifdef YYSTACK_ALLOC /* Pacify GCC's 'empty if-body' warning. */ # 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, andapagesizecanbeassmallas4096bytes.Sowecannotsafely invokealloca(N)ifNexceeds4096.Useaslightlysmallernumber
to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032/* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \
&& ! ((defined YYMALLOC || defined malloc) \
&& (defined YYFREE || defined free))) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # 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 void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif/* ! defined yyoverflow || YYERROR_VERBOSE */
#if (! defined yyoverflow \
&& (! defined __cplusplus \
|| (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
/* A type that is properly aligned for any stack member. */ union yyalloc
{
yytype_int16 yyss_alloc;
YYSTYPE yyvs_alloc;
};
/* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
/* The size of an array large to enough to hold all stacks, each with
N elements. */ # define YYSTACK_BYTES(N) \
((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
# define YYCOPY_NEEDED 1
/* Relocate STACK from its old location to the new one. The localvariablesYYSIZEandYYSTACKSIZEgivetheoldandnewnumberof elementsinthestack,andYYPTRgivesthenewlocationofthe stack.AdvanceYYPTRtoaproperlyalignedlocationforthenext
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 (0)
#endif
#ifdefined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do
not overlap. */ # ifndef YYCOPY # ifdefined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \
__builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \
{ \
YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \
(Dst)[yyi] = (Src)[yyi]; \
} \ while (0) # endif # endif #endif/* !YYCOPY_NEEDED */
/* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 161
/* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 69 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 27 /* YYNRULES -- Number of rules. */ #define YYNRULES 97 /* YYNSTATES -- Number of states. */ #define YYNSTATES 140
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 302
/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message abouttheunexpectedtokenYYTOKENforthestatestackwhosetopis YYSSP.
Return0if*YYMSGwassuccessfullywritten.Return1if*YYMSGis notlargeenoughtoholdthemessage.Inthatcase,alsoset *YYMSG_ALLOCtotherequirednumberofbytes.Return2ifthe
required number of bytes is too large to store. */ staticint
yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
yytype_int16 *yyssp, int yytoken)
{
YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ constchar *yyformat = YY_NULLPTR; /* Arguments of yyformat. */ charconst *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per
"expected"). */ int yycount = 0;
/* There are many possibilities here to consider: -Ifthisstateisaconsistentstatewithadefaultaction,then theonlywaythisfunctionwasinvokedisifthedefaultaction isanerroraction.Inthatcase,don'tcheckforexpected tokensbecausetherearenone. -Theonlywaytherecanbenolookaheadpresent(inyychar)isif thisstateisaconsistentstatewithadefaultaction.Thus, detectingtheabsenceofalookaheadissufficienttodetermine thatthereisnounexpectedorexpectedtokentoreport.Inthat case,justreportasimple"syntaxerror". -Don'tassumethereisn'talookaheadjustbecausethisstateisa consistentstatewithadefaultaction.Theremighthavebeena previousinconsistentstate,consistentstatewithanon-default action,orusersemanticactionthatmanipulatedyychar. -Ofcourse,theexpectedtokenlistdependsonstatestohave correctlookaheadinformation,anditdependsontheparsernot toperformextrareductionsafterfetchingalookaheadfromthe scannerandbeforedetectingasyntaxerror.Thus,statemerging (fromLALRorIELR)anddefaultreductionscorrupttheexpected tokenlist.However,thelistiscorrectforcanonicalLRwith oneexception:itwillstillcontainanytokenthatwillnotbe acceptedduetoanerroractioninalaterstate.
*/ if (yytoken != YYEMPTY)
{ int yyn = yypact[*yyssp];
yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn))
{ /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK.Inotherwords,skipthefirst-YYNactionsfor
this state because they are default actions. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yyx;
/* Avoid sprintf, as that infringes on the user's name space. Don'thaveundefinedbehaviorevenifthetranslation
produced a string with the wrong number of "%s"s. */
{ char *yyp = *yymsg; int yyi = 0; while ((*yyp = *yyformat) != '\0') if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
{
yyp += yytnamerr (yyp, yyarg[yyi++]);
yyformat += 2;
} else
{
yyp++;
yyformat++;
}
} return0;
} #endif/* YYERROR_VERBOSE */
/* The semantic value of the lookahead symbol. */
YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs;
/*----------. |yyparse.|
`----------*/
int
yyparse (void)
{ int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus;
/* The stacks and their tools: 'yyss':relatedtostates. 'yyvs':relatedtosemanticvalues.
Refertothestacksthroughseparatepointers,toallowyyoverflow
to reallocate them elsewhere. */
/* The state stack. */
yytype_int16 yyssa[YYINITDEPTH];
yytype_int16 *yyss;
yytype_int16 *yyssp;
/* The semantic value stack. */
YYSTYPE yyvsa[YYINITDEPTH];
YYSTYPE *yyvs;
YYSTYPE *yyvsp;
YYSIZE_T yystacksize;
int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* The variables used to return semantic value and location from the
action routines. */
YYSTYPE yyval;
#if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf;
YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif
yystate = 0;
yyerrstatus = 0;
yynerrs = 0;
yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate;
/*------------------------------------------------------------. |yynewstate--Pushanewstate,whichisfoundinyystate.|
`------------------------------------------------------------*/
yynewstate: /* In all cases, when you get here, the value and location stacks
have just been pushed. So pushing a state here evens the stacks. */
yyssp++;
yysetstate:
*yyssp = yystate;
if (yyss + yystacksize - 1 <= yyssp)
{ /* Get the current used size of the three stacks, in elements. */
YYSIZE_T yysize = yyssp - yyss + 1;
#ifdef yyoverflow
{ /* Give user a chance to reallocate the stack. Use copies of thesesothatthe&'sdon'tforcetherealonesinto
memory. */
YYSTYPE *yyvs1 = yyvs;
yytype_int16 *yyss1 = yyss;
/* Each stack pointer address is followed by the size of the datainuseinthatstack,inbytes.Thisusedtobea conditionalaroundjustthetwoextraargs,butthatmight
be undefined if yyoverflow is a macro. */
yyoverflow (YY_("memory exhausted"),
&yyss1, yysize * sizeof (*yyssp),
&yyvs1, yysize * sizeof (*yyvsp),
&yystacksize);
yyss = yyss1;
yyvs = yyvs1;
} #else/* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab;
yystacksize *= 2; if (YYMAXDEPTH < yystacksize)
yystacksize = YYMAXDEPTH;
/* Do appropriate processing given the current state. Read a
lookahead token if we need one and don't already have one. */
/* First try to decide what to do without reference to lookahead token. */
yyn = yypact[yystate]; if (yypact_value_is_default (yyn)) goto yydefault;
/* Not known => get a lookahead token if don't already have one. */
/* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
yychar = yylex ();
}
if (yychar <= YYEOF)
{
yychar = yytoken = YYEOF;
YYDPRINTF ((stderr, "Now at end of input.\n"));
} else
{
yytoken = YYTRANSLATE (yychar);
YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
}
/* If the proper action on seeing token YYTOKEN is to reduce or to
detect an error, take that action. */
yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault;
yyn = yytable[yyn]; if (yyn <= 0)
{ if (yytable_value_is_error (yyn)) goto yyerrlab;
yyn = -yyn; goto yyreduce;
}
/* Count tokens shifted since error; after three, turn off error
status. */ if (yyerrstatus)
yyerrstatus--;
/*-----------------------------. |yyreduce--Doareduction.|
`-----------------------------*/
yyreduce: /* yyn is the number of a rule to reduce with. */
yylen = yyr2[yyn];
/* If YYLEN is nonzero, implement the default value of the action: '$$=$1'.
Otherwise,thefollowinglinesetsYYVALtogarbage. ThisbehaviorisundocumentedandBison usersshouldnotrelyuponit.AssigningtoYYVAL unconditionallymakestheparserabitsmaller,anditavoidsa
GCC warning that YYVAL may be used uninitialized. */
yyval = yyvsp[1-yylen];
else
{ /* This EOF applies to all start conditions *whichdon'talreadyhaveEOFactions.
*/ for ( i = 1; i <= lastsc; ++i ) if ( ! sceof[i] )
scon_stk[++scon_stk_ptr] = i;
if ( scon_stk_ptr == 0 )
warn( "all start conditions already have <<EOF>> rules" );
if ( previous_continued_action )
{ /* We need to treat this as variable trailing *contextsothatthebackupdoesnothappen *intheactionbutbeforetheactionswitch *statement.Ifthebackuphappensinthe *action,thentherules"fallinginto"this *one'sactionwill*also*dothebackup, *erroneously.
*/ if ( ! varlength || headcnt != 0 )
warn( "trailing context made variable due to preceding '|' action" );
/* Mark as variable. */
varlength = true;
headcnt = 0;
}
if ( lex_compat || (varlength && headcnt == 0) )
{ /* variable trailing context rule */ /* Mark the first part of the rule as the *accepting"head"partofatrailing *contextrule. * *Bytheway,wedidn'tdothisatthe *beginningofthisproductionbecauseback *thencurrent_state_typewassetupfora *trailrule,andadd_accept()cancreate *anewstate...
*/
add_accept( (yyvsp[-1]),
num_rules | YY_TRAILING_HEAD_MASK );
variable_trail_rule = true;
}
if ( trlcontxt )
{
synerr( _("trailing context used twice") );
(yyval) = mkstate( SYM_EPSILON );
}
elseif ( previous_continued_action )
{ /* See the comment in the rule for "re2 re" *above.
*/
warn( "trailing context made variable due to preceding '|' action" );
varlength = true;
}
if ( lex_compat || varlength )
{ /* Again, see the comment in the rule for *"re2re"above.
*/
add_accept( (yyvsp[-1]),
num_rules | YY_TRAILING_HEAD_MASK );
variable_trail_rule = true;
}
case50: #line589"parse.y"/* yacc.c:1646 */
{ /* The series could be something like "(foo)", *inwhichcasewehavenoideawhatitslength *is,sowepunthere.
*/
varlength = true;
if ( (yyvsp[-1]) <= 0 )
{
synerr( _("iteration value must be positive")
);
(yyval) = (yyvsp[-3]);
}
case56: #line672"parse.y"/* yacc.c:1646 */
{ /* The singleton could be something like "(foo)", *inwhichcasewehavenoideawhatitslength *is,sowepunthere.
*/
varlength = true;
if ( (yyvsp[-1]) <= 0 )
{
synerr( _("iteration value must be positive") );
(yyval) = (yyvsp[-3]);
}
/* If one end of the range has case and the other *doesnot,orthecasesaredifferent,thenwe'renot *surewhatrangetheuseristryingtoexpress. *Examples:[@-z]or[S-t]
*/ if (has_case ((yyvsp[-2])) != has_case ((yyvsp[0]))
|| (has_case ((yyvsp[-2])) && (b_islower ((yyvsp[-2])) != b_islower ((yyvsp[0]))))
|| (has_case ((yyvsp[-2])) && (b_isupper ((yyvsp[-2])) != b_isupper ((yyvsp[0])))))
format_warn3 (
_("the character range [%c-%c] is ambiguous in a case-insensitive scanner"),
(yyvsp[-2]), (yyvsp[0]));
/* If the range spans uppercase characters but not *lowercase(orvice-versa),thenshouldweautomatically *includelowercasecharactersintherange? *Example:[@-_]spans[a-z]butnot[A-Z]
*/ elseif (!has_case ((yyvsp[-2])) && !has_case ((yyvsp[0])) && !range_covers_case ((yyvsp[-2]), (yyvsp[0])))
format_warn3 (
_("the character range [%c-%c] is ambiguous in a case-insensitive scanner"),
(yyvsp[-2]), (yyvsp[0]));
}
if ( (yyvsp[-2]) > (yyvsp[0]) )
synerr( _("negative range in character class") );
else
{ for ( i = (yyvsp[-2]); i <= (yyvsp[0]); ++i )
ccladd( (yyvsp[-3]), i );
/* Keep track if this ccl is staying in *alphabeticalorder.
*/
cclsorted = cclsorted && ((yyvsp[-2]) > lastchar);
lastchar = (yyvsp[0]);
/* Do it again for upper/lowercase */ if (sf_case_ins() && has_case((yyvsp[-2])) && has_case((yyvsp[0]))){
(yyvsp[-2]) = reverse_case ((yyvsp[-2]));
(yyvsp[0]) = reverse_case ((yyvsp[0]));
for ( i = (yyvsp[-2]); i <= (yyvsp[0]); ++i )
ccladd( (yyvsp[-3]), i );
/* Do it again for upper/lowercase */ if (sf_case_ins() && has_case((yyvsp[0]))){
(yyvsp[0]) = reverse_case ((yyvsp[0]));
ccladd ((yyvsp[-1]), (yyvsp[0]));
#line2582"parse.c"/* yacc.c:1646 */ default: break;
} /* User semantic actions sometimes alter yychar, and that requires thatyytokenbeupdatedwiththenewtranslation.Wetakethe approachoftranslatingimmediatelybeforeeveryuseofyytoken. Onealternativeistranslatinghereaftereverysemanticaction, butthattranslationwouldbemissedifthesemanticactioninvokes YYABORT,YYACCEPT,orYYERRORimmediatelyafteralteringyycharor ifitinvokesYYBACKUP.InthecaseofYYABORTorYYACCEPT,an incorrectdestructormightthenbeinvokedimmediately.Inthe caseofYYERRORorYYBACKUP,subsequentparseractionsmightlead toanincorrectdestructorcallorverbosesyntaxerrormessage
before the lookahead is translated. */
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
/*--------------------------------------. |yyerrlab--hereondetectingerror.|
`--------------------------------------*/
yyerrlab: /* Make sure we have latest lookahead translation. See comments at
user semantic actions for why this is necessary. */
yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
/* If not already recovering from an error, report this error. */ if (!yyerrstatus)
{
++yynerrs; #if ! YYERROR_VERBOSE
yyerror (YY_("syntax error")); #else # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
yyssp, yytoken)
{ charconst *yymsgp = YY_("syntax error"); int yysyntax_error_status;
yysyntax_error_status = YYSYNTAX_ERROR; if (yysyntax_error_status == 0)
yymsgp = yymsg; elseif (yysyntax_error_status == 1)
{ if (yymsg != yymsgbuf)
YYSTACK_FREE (yymsg);
yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); if (!yymsg)
{
yymsg = yymsgbuf;
yymsg_alloc = sizeof yymsgbuf;
yysyntax_error_status = 2;
} else
{
yysyntax_error_status = YYSYNTAX_ERROR;
yymsgp = yymsg;
}
}
yyerror (yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab;
} # undef YYSYNTAX_ERROR #endif
}
if (yyerrstatus == 3)
{ /* If just tried and failed to reuse lookahead token after an
error, discard it. */
if (yychar <= YYEOF)
{ /* Return failure if at end of input. */ if (yychar == YYEOF)
YYABORT;
} else
{
yydestruct ("Error: discarding",
yytoken, &yylval);
yychar = YYEMPTY;
}
}
/* Else will try to reuse lookahead token after shifting the error
token. */ goto yyerrlab1;
/* Pacify compilers like GCC when the user code never invokes YYERRORandthelabelyyerrorlabthereforeneverappearsinuser
code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab;
/* Do not reclaim the symbols of the rule whose action triggered
this YYERROR. */
YYPOPSTACK (yylen);
yylen = 0;
YY_STACK_PRINT (yyss, yyssp);
yystate = *yyssp; goto yyerrlab1;
/*-------------------------------------------------------------. |yyerrlab1--commoncodeforbothsyntaxerrorandYYERROR.|
`-------------------------------------------------------------*/
yyerrlab1:
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;
}
}
/* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss)
YYABORT;
yyreturn: if (yychar != YYEMPTY)
{ /* Make sure we have latest lookahead translation. See comments at
user semantic actions for why this is necessary. */
yytoken = YYTRANSLATE (yychar);
yydestruct ("Cleanup: discarding lookahead",
yytoken, &yylval);
} /* Do not reclaim the symbols of the rule whose action triggered
this YYABORT or YYACCEPT. */
YYPOPSTACK (yylen);
YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss)
{
yydestruct ("Cleanup: popping",
yystos[*yyssp], yyvsp);
YYPOPSTACK (1);
} #ifndef yyoverflow if (yyss != yyssa)
YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf)
YYSTACK_FREE (yymsg); #endif return yyresult;
} #line947"parse.y"/* yacc.c:1906 */
/* build_eof_action - build the "<<EOF>>" action for the active start *conditions
*/
void build_eof_action()
{ int i; char action_text[MAXLINE];
for ( i = 1; i <= scon_stk_ptr; ++i )
{ if ( sceof[scon_stk[i]] )
format_pinpoint_message( "multiple <<EOF>> rules for start condition %s",
scname[scon_stk[i]] );
else
{
sceof[scon_stk[i]] = true;
if (previous_continued_action /* && previous action was regular */)
add_action("YY_RULE_SETUP\n");
/* This isn't a normal rule after all - don't count it as *such,sowedon'thaveanyholesintherulenumbering *(whichmakegenerating"rulecannevermatch"warnings *moredifficult.
*/
--num_rules;
++num_eof_rules;
}
/* format_synerr - write out formatted syntax error */
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.65Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-09-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.