123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333 |
- extern int timeclock;
- int yyerror; /* Yyerror and yycost are set by guards. */
- int yycost; /* If yyerror is set to a nonzero value by a */
- /* guard, the reduction with which the guard */
- /* is associated is not performed, and the */
- /* error recovery mechanism is invoked. */
- /* Yycost indicates the cost of performing */
- /* the reduction given the attributes of the */
- /* symbols. */
- /* YYMAXDEPTH indicates the size of the parser's state and value */
- /* stacks. */
- #ifndef YYMAXDEPTH
- #define YYMAXDEPTH 500
- #endif
- /* YYMAXRULES must be at least as large as the number of rules that */
- /* could be placed in the rule queue. That number could be determined */
- /* from the grammar and the size of the stack, but, as yet, it is not. */
- #ifndef YYMAXRULES
- #define YYMAXRULES 100
- #endif
- #ifndef YYMAXBACKUP
- #define YYMAXBACKUP 100
- #endif
- short yyss[YYMAXDEPTH]; /* the state stack */
- YYSTYPE yyvs[YYMAXDEPTH]; /* the semantic value stack */
- YYLTYPE yyls[YYMAXDEPTH]; /* the location stack */
- short yyrq[YYMAXRULES]; /* the rule queue */
- int yychar; /* the lookahead symbol */
- YYSTYPE yylval; /* the semantic value of the */
- /* lookahead symbol */
- YYSTYPE yytval; /* the semantic value for the state */
- /* at the top of the state stack. */
- YYSTYPE yyval; /* the variable used to return */
- /* semantic values from the action */
- /* routines */
- YYLTYPE yylloc; /* location data for the lookahead */
- /* symbol */
- YYLTYPE yytloc; /* location data for the state at the */
- /* top of the state stack */
- int yynunlexed;
- short yyunchar[YYMAXBACKUP];
- YYSTYPE yyunval[YYMAXBACKUP];
- YYLTYPE yyunloc[YYMAXBACKUP];
- short *yygssp; /* a pointer to the top of the state */
- /* stack; only set during error */
- /* recovery. */
- YYSTYPE *yygvsp; /* a pointer to the top of the value */
- /* stack; only set during error */
- /* recovery. */
- YYLTYPE *yyglsp; /* a pointer to the top of the */
- /* location stack; only set during */
- /* error recovery. */
- /* Yyget is an interface between the parser and the lexical analyzer. */
- /* It is costly to provide such an interface, but it avoids requiring */
- /* the lexical analyzer to be able to back up the scan. */
- yyget()
- {
- if (yynunlexed > 0)
- {
- yynunlexed--;
- yychar = yyunchar[yynunlexed];
- yylval = yyunval[yynunlexed];
- yylloc = yyunloc[yynunlexed];
- }
- else if (yychar <= 0)
- yychar = 0;
- else
- {
- yychar = yylex();
- if (yychar < 0)
- yychar = 0;
- else yychar = YYTRANSLATE(yychar);
- }
- }
- yyunlex(chr, val, loc)
- int chr;
- YYSTYPE val;
- YYLTYPE loc;
- {
- yyunchar[yynunlexed] = chr;
- yyunval[yynunlexed] = val;
- yyunloc[yynunlexed] = loc;
- yynunlexed++;
- }
- yyrestore(first, last)
- register short *first;
- register short *last;
- {
- register short *ssp;
- register short *rp;
- register int symbol;
- register int state;
- register int tvalsaved;
- ssp = yygssp;
- yyunlex(yychar, yylval, yylloc);
- tvalsaved = 0;
- while (first != last)
- {
- symbol = yystos[*ssp];
- if (symbol < YYNTBASE)
- {
- yyunlex(symbol, yytval, yytloc);
- tvalsaved = 1;
- ssp--;
- }
- ssp--;
- if (first == yyrq)
- first = yyrq + YYMAXRULES;
- first--;
- for (rp = yyrhs + yyprhs[*first]; symbol = *rp; rp++)
- {
- if (symbol < YYNTBASE)
- state = yytable[yypact[*ssp] + symbol];
- else
- {
- state = yypgoto[symbol - YYNTBASE] + *ssp;
- if (state >= 0 && state <= YYLAST && yycheck[state] == *ssp)
- state = yytable[state];
- else
- state = yydefgoto[symbol - YYNTBASE];
- }
- *++ssp = state;
- }
- }
- if ( ! tvalsaved && ssp > yyss)
- {
- yyunlex(yystos[*ssp], yytval, yytloc);
- ssp--;
- }
- yygssp = ssp;
- }
- int
- yyparse()
- {
- register int yystate;
- register int yyn;
- register short *yyssp;
- register short *yyrq0;
- register short *yyptr;
- register YYSTYPE *yyvsp;
- int yylen;
- YYLTYPE *yylsp;
- short *yyrq1;
- short *yyrq2;
- yystate = 0;
- yyssp = yyss - 1;
- yyvsp = yyvs - 1;
- yylsp = yyls - 1;
- yyrq0 = yyrq;
- yyrq1 = yyrq0;
- yyrq2 = yyrq0;
- yychar = yylex();
- if (yychar < 0)
- yychar = 0;
- else yychar = YYTRANSLATE(yychar);
- yynewstate:
- if (yyssp >= yyss + YYMAXDEPTH - 1)
- {
- yyabort("Parser Stack Overflow");
- YYABORT;
- }
- *++yyssp = yystate;
- yyresume:
- yyn = yypact[yystate];
- if (yyn == YYFLAG)
- goto yydefault;
- yyn += yychar;
- if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar)
- goto yydefault;
- yyn = yytable[yyn];
- if (yyn < 0)
- {
- yyn = -yyn;
- goto yyreduce;
- }
- else if (yyn == 0)
- goto yyerrlab;
- yystate = yyn;
- yyptr = yyrq2;
- while (yyptr != yyrq1)
- {
- yyn = *yyptr++;
- yylen = yyr2[yyn];
- yyvsp -= yylen;
- yylsp -= yylen;
- yyguard(yyn, yyvsp, yylsp);
- if (yyerror)
- goto yysemerr;
- yyaction(yyn, yyvsp, yylsp);
- *++yyvsp = yyval;
- yylsp++;
- if (yylen == 0)
- {
- yylsp->timestamp = timeclock;
- yylsp->first_line = yytloc.first_line;
- yylsp->first_column = yytloc.first_column;
- yylsp->last_line = (yylsp-1)->last_line;
- yylsp->last_column = (yylsp-1)->last_column;
- yylsp->text = 0;
- }
- else
- {
- yylsp->last_line = (yylsp+yylen-1)->last_line;
- yylsp->last_column = (yylsp+yylen-1)->last_column;
- }
-
- if (yyptr == yyrq + YYMAXRULES)
- yyptr = yyrq;
- }
- if (yystate == YYFINAL)
- YYACCEPT;
- yyrq2 = yyptr;
- yyrq1 = yyrq0;
- *++yyvsp = yytval;
- *++yylsp = yytloc;
- yytval = yylval;
- yytloc = yylloc;
- yyget();
- goto yynewstate;
- yydefault:
- yyn = yydefact[yystate];
- if (yyn == 0)
- goto yyerrlab;
- yyreduce:
- *yyrq0++ = yyn;
- if (yyrq0 == yyrq + YYMAXRULES)
- yyrq0 = yyrq;
- if (yyrq0 == yyrq2)
- {
- yyabort("Parser Rule Queue Overflow");
- YYABORT;
- }
- yyssp -= yyr2[yyn];
- yyn = yyr1[yyn];
- yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
- if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
- yystate = yytable[yystate];
- else
- yystate = yydefgoto[yyn - YYNTBASE];
- goto yynewstate;
- yysemerr:
- *--yyptr = yyn;
- yyrq2 = yyptr;
- yyvsp += yyr2[yyn];
- yyerrlab:
- yygssp = yyssp;
- yygvsp = yyvsp;
- yyglsp = yylsp;
- yyrestore(yyrq0, yyrq2);
- yyrecover();
- yystate = *yygssp;
- yyssp = yygssp;
- yyvsp = yygvsp;
- yyrq0 = yyrq;
- yyrq1 = yyrq0;
- yyrq2 = yyrq0;
- goto yyresume;
- }
|