|
|
1.1 ! root 1: ! 2: extern int timeclock; ! 3: ! 4: ! 5: int yyerror; /* Yyerror and yycost are set by guards. */ ! 6: int yycost; /* If yyerror is set to a nonzero value by a */ ! 7: /* guard, the reduction with which the guard */ ! 8: /* is associated is not performed, and the */ ! 9: /* error recovery mechanism is invoked. */ ! 10: /* Yycost indicates the cost of performing */ ! 11: /* the reduction given the attributes of the */ ! 12: /* symbols. */ ! 13: ! 14: ! 15: /* YYMAXDEPTH indicates the size of the parser's state and value */ ! 16: /* stacks. */ ! 17: ! 18: #ifndef YYMAXDEPTH ! 19: #define YYMAXDEPTH 500 ! 20: #endif ! 21: ! 22: /* YYMAXRULES must be at least as large as the number of rules that */ ! 23: /* could be placed in the rule queue. That number could be determined */ ! 24: /* from the grammar and the size of the stack, but, as yet, it is not. */ ! 25: ! 26: #ifndef YYMAXRULES ! 27: #define YYMAXRULES 100 ! 28: #endif ! 29: ! 30: #ifndef YYMAXBACKUP ! 31: #define YYMAXBACKUP 100 ! 32: #endif ! 33: ! 34: ! 35: short yyss[YYMAXDEPTH]; /* the state stack */ ! 36: YYSTYPE yyvs[YYMAXDEPTH]; /* the semantic value stack */ ! 37: YYLTYPE yyls[YYMAXDEPTH]; /* the location stack */ ! 38: short yyrq[YYMAXRULES]; /* the rule queue */ ! 39: int yychar; /* the lookahead symbol */ ! 40: ! 41: YYSTYPE yylval; /* the semantic value of the */ ! 42: /* lookahead symbol */ ! 43: ! 44: YYSTYPE yytval; /* the semantic value for the state */ ! 45: /* at the top of the state stack. */ ! 46: ! 47: YYSTYPE yyval; /* the variable used to return */ ! 48: /* semantic values from the action */ ! 49: /* routines */ ! 50: ! 51: YYLTYPE yylloc; /* location data for the lookahead */ ! 52: /* symbol */ ! 53: ! 54: YYLTYPE yytloc; /* location data for the state at the */ ! 55: /* top of the state stack */ ! 56: ! 57: ! 58: int yynunlexed; ! 59: short yyunchar[YYMAXBACKUP]; ! 60: YYSTYPE yyunval[YYMAXBACKUP]; ! 61: YYLTYPE yyunloc[YYMAXBACKUP]; ! 62: ! 63: short *yygssp; /* a pointer to the top of the state */ ! 64: /* stack; only set during error */ ! 65: /* recovery. */ ! 66: ! 67: YYSTYPE *yygvsp; /* a pointer to the top of the value */ ! 68: /* stack; only set during error */ ! 69: /* recovery. */ ! 70: ! 71: YYLTYPE *yyglsp; /* a pointer to the top of the */ ! 72: /* location stack; only set during */ ! 73: /* error recovery. */ ! 74: ! 75: ! 76: /* Yyget is an interface between the parser and the lexical analyzer. */ ! 77: /* It is costly to provide such an interface, but it avoids requiring */ ! 78: /* the lexical analyzer to be able to back up the scan. */ ! 79: ! 80: yyget() ! 81: { ! 82: if (yynunlexed > 0) ! 83: { ! 84: yynunlexed--; ! 85: yychar = yyunchar[yynunlexed]; ! 86: yylval = yyunval[yynunlexed]; ! 87: yylloc = yyunloc[yynunlexed]; ! 88: } ! 89: else if (yychar <= 0) ! 90: yychar = 0; ! 91: else ! 92: { ! 93: yychar = yylex(); ! 94: if (yychar < 0) ! 95: yychar = 0; ! 96: else yychar = YYTRANSLATE(yychar); ! 97: } ! 98: } ! 99: ! 100: ! 101: ! 102: yyunlex(chr, val, loc) ! 103: int chr; ! 104: YYSTYPE val; ! 105: YYLTYPE loc; ! 106: { ! 107: yyunchar[yynunlexed] = chr; ! 108: yyunval[yynunlexed] = val; ! 109: yyunloc[yynunlexed] = loc; ! 110: yynunlexed++; ! 111: } ! 112: ! 113: ! 114: ! 115: yyrestore(first, last) ! 116: register short *first; ! 117: register short *last; ! 118: { ! 119: register short *ssp; ! 120: register short *rp; ! 121: register int symbol; ! 122: register int state; ! 123: register int tvalsaved; ! 124: ! 125: ssp = yygssp; ! 126: yyunlex(yychar, yylval, yylloc); ! 127: ! 128: tvalsaved = 0; ! 129: while (first != last) ! 130: { ! 131: symbol = yystos[*ssp]; ! 132: if (symbol < YYNTBASE) ! 133: { ! 134: yyunlex(symbol, yytval, yytloc); ! 135: tvalsaved = 1; ! 136: ssp--; ! 137: } ! 138: ! 139: ssp--; ! 140: ! 141: if (first == yyrq) ! 142: first = yyrq + YYMAXRULES; ! 143: ! 144: first--; ! 145: ! 146: for (rp = yyrhs + yyprhs[*first]; symbol = *rp; rp++) ! 147: { ! 148: if (symbol < YYNTBASE) ! 149: state = yytable[yypact[*ssp] + symbol]; ! 150: else ! 151: { ! 152: state = yypgoto[symbol - YYNTBASE] + *ssp; ! 153: ! 154: if (state >= 0 && state <= YYLAST && yycheck[state] == *ssp) ! 155: state = yytable[state]; ! 156: else ! 157: state = yydefgoto[symbol - YYNTBASE]; ! 158: } ! 159: ! 160: *++ssp = state; ! 161: } ! 162: } ! 163: ! 164: if ( ! tvalsaved && ssp > yyss) ! 165: { ! 166: yyunlex(yystos[*ssp], yytval, yytloc); ! 167: ssp--; ! 168: } ! 169: ! 170: yygssp = ssp; ! 171: } ! 172: ! 173: ! 174: ! 175: int ! 176: yyparse() ! 177: { ! 178: register int yystate; ! 179: register int yyn; ! 180: register short *yyssp; ! 181: register short *yyrq0; ! 182: register short *yyptr; ! 183: register YYSTYPE *yyvsp; ! 184: ! 185: int yylen; ! 186: YYLTYPE *yylsp; ! 187: short *yyrq1; ! 188: short *yyrq2; ! 189: ! 190: yystate = 0; ! 191: yyssp = yyss - 1; ! 192: yyvsp = yyvs - 1; ! 193: yylsp = yyls - 1; ! 194: yyrq0 = yyrq; ! 195: yyrq1 = yyrq0; ! 196: yyrq2 = yyrq0; ! 197: ! 198: yychar = yylex(); ! 199: if (yychar < 0) ! 200: yychar = 0; ! 201: else yychar = YYTRANSLATE(yychar); ! 202: ! 203: yynewstate: ! 204: ! 205: if (yyssp >= yyss + YYMAXDEPTH - 1) ! 206: { ! 207: yyabort("Parser Stack Overflow"); ! 208: YYABORT; ! 209: } ! 210: ! 211: *++yyssp = yystate; ! 212: ! 213: yyresume: ! 214: ! 215: yyn = yypact[yystate]; ! 216: if (yyn == YYFLAG) ! 217: goto yydefault; ! 218: ! 219: yyn += yychar; ! 220: if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar) ! 221: goto yydefault; ! 222: ! 223: yyn = yytable[yyn]; ! 224: if (yyn < 0) ! 225: { ! 226: yyn = -yyn; ! 227: goto yyreduce; ! 228: } ! 229: else if (yyn == 0) ! 230: goto yyerrlab; ! 231: ! 232: yystate = yyn; ! 233: ! 234: yyptr = yyrq2; ! 235: while (yyptr != yyrq1) ! 236: { ! 237: yyn = *yyptr++; ! 238: yylen = yyr2[yyn]; ! 239: yyvsp -= yylen; ! 240: yylsp -= yylen; ! 241: ! 242: yyguard(yyn, yyvsp, yylsp); ! 243: if (yyerror) ! 244: goto yysemerr; ! 245: ! 246: yyaction(yyn, yyvsp, yylsp); ! 247: *++yyvsp = yyval; ! 248: ! 249: yylsp++; ! 250: if (yylen == 0) ! 251: { ! 252: yylsp->timestamp = timeclock; ! 253: yylsp->first_line = yytloc.first_line; ! 254: yylsp->first_column = yytloc.first_column; ! 255: yylsp->last_line = (yylsp-1)->last_line; ! 256: yylsp->last_column = (yylsp-1)->last_column; ! 257: yylsp->text = 0; ! 258: } ! 259: else ! 260: { ! 261: yylsp->last_line = (yylsp+yylen-1)->last_line; ! 262: yylsp->last_column = (yylsp+yylen-1)->last_column; ! 263: } ! 264: ! 265: if (yyptr == yyrq + YYMAXRULES) ! 266: yyptr = yyrq; ! 267: } ! 268: ! 269: if (yystate == YYFINAL) ! 270: YYACCEPT; ! 271: ! 272: yyrq2 = yyptr; ! 273: yyrq1 = yyrq0; ! 274: ! 275: *++yyvsp = yytval; ! 276: *++yylsp = yytloc; ! 277: yytval = yylval; ! 278: yytloc = yylloc; ! 279: yyget(); ! 280: ! 281: goto yynewstate; ! 282: ! 283: yydefault: ! 284: ! 285: yyn = yydefact[yystate]; ! 286: if (yyn == 0) ! 287: goto yyerrlab; ! 288: ! 289: yyreduce: ! 290: ! 291: *yyrq0++ = yyn; ! 292: ! 293: if (yyrq0 == yyrq + YYMAXRULES) ! 294: yyrq0 = yyrq; ! 295: ! 296: if (yyrq0 == yyrq2) ! 297: { ! 298: yyabort("Parser Rule Queue Overflow"); ! 299: YYABORT; ! 300: } ! 301: ! 302: yyssp -= yyr2[yyn]; ! 303: yyn = yyr1[yyn]; ! 304: ! 305: yystate = yypgoto[yyn - YYNTBASE] + *yyssp; ! 306: if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) ! 307: yystate = yytable[yystate]; ! 308: else ! 309: yystate = yydefgoto[yyn - YYNTBASE]; ! 310: ! 311: goto yynewstate; ! 312: ! 313: yysemerr: ! 314: *--yyptr = yyn; ! 315: yyrq2 = yyptr; ! 316: yyvsp += yyr2[yyn]; ! 317: ! 318: yyerrlab: ! 319: ! 320: yygssp = yyssp; ! 321: yygvsp = yyvsp; ! 322: yyglsp = yylsp; ! 323: yyrestore(yyrq0, yyrq2); ! 324: yyrecover(); ! 325: yystate = *yygssp; ! 326: yyssp = yygssp; ! 327: yyvsp = yygvsp; ! 328: yyrq0 = yyrq; ! 329: yyrq1 = yyrq0; ! 330: yyrq2 = yyrq0; ! 331: goto yyresume; ! 332: } ! 333: ! 334: $
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.