| OLD | NEW |
| 1 /* Driver template for the LEMON parser generator. | 1 /* Driver template for the LEMON parser generator. |
| 2 ** The author disclaims copyright to this source code. | 2 ** The author disclaims copyright to this source code. |
| 3 */ | 3 */ |
| 4 /* First off, code is included that follows the "include" declaration | 4 /* First off, code is included that follows the "include" declaration |
| 5 ** in the input grammar file. */ | 5 ** in the input grammar file. */ |
| 6 #include <stdio.h> | 6 #include <stdio.h> |
| 7 %% | 7 %% |
| 8 /* Next is all token values, in a form suitable for use by makeheaders. | 8 /* Next is all token values, in a form suitable for use by makeheaders. |
| 9 ** This section will be null unless lemon is run with the -m switch. | 9 ** This section will be null unless lemon is run with the -m switch. |
| 10 */ | 10 */ |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 ** yy_action[] A single table containing all actions. | 118 ** yy_action[] A single table containing all actions. |
| 119 ** yy_lookahead[] A table containing the lookahead for each entry in | 119 ** yy_lookahead[] A table containing the lookahead for each entry in |
| 120 ** yy_action. Used to detect hash collisions. | 120 ** yy_action. Used to detect hash collisions. |
| 121 ** yy_shift_ofst[] For each state, the offset into yy_action for | 121 ** yy_shift_ofst[] For each state, the offset into yy_action for |
| 122 ** shifting terminals. | 122 ** shifting terminals. |
| 123 ** yy_reduce_ofst[] For each state, the offset into yy_action for | 123 ** yy_reduce_ofst[] For each state, the offset into yy_action for |
| 124 ** shifting non-terminals after a reduce. | 124 ** shifting non-terminals after a reduce. |
| 125 ** yy_default[] Default action for each state. | 125 ** yy_default[] Default action for each state. |
| 126 */ | 126 */ |
| 127 %% | 127 %% |
| 128 #define YY_SZ_ACTTAB (int)(sizeof(yy_action)/sizeof(yy_action[0])) | |
| 129 | 128 |
| 130 /* The next table maps tokens into fallback tokens. If a construct | 129 /* The next table maps tokens into fallback tokens. If a construct |
| 131 ** like the following: | 130 ** like the following: |
| 132 ** | 131 ** |
| 133 ** %fallback ID X Y Z. | 132 ** %fallback ID X Y Z. |
| 134 ** | 133 ** |
| 135 ** appears in the grammar, then ID becomes a fallback token for X, Y, | 134 ** appears in the grammar, then ID becomes a fallback token for X, Y, |
| 136 ** and Z. Whenever one of the tokens X, Y, or Z is input to the parser | 135 ** and Z. Whenever one of the tokens X, Y, or Z is input to the parser |
| 137 ** but it does not parse, the type of the token is changed to ID and | 136 ** but it does not parse, the type of the token is changed to ID and |
| 138 ** the parse is retried before an error is thrown. | 137 ** the parse is retried before an error is thrown. |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 379 ** independent of the look-ahead. If it is, return the action, otherwise | 378 ** independent of the look-ahead. If it is, return the action, otherwise |
| 380 ** return YY_NO_ACTION. | 379 ** return YY_NO_ACTION. |
| 381 */ | 380 */ |
| 382 static int yy_find_shift_action( | 381 static int yy_find_shift_action( |
| 383 yyParser *pParser, /* The parser */ | 382 yyParser *pParser, /* The parser */ |
| 384 YYCODETYPE iLookAhead /* The look-ahead token */ | 383 YYCODETYPE iLookAhead /* The look-ahead token */ |
| 385 ){ | 384 ){ |
| 386 int i; | 385 int i; |
| 387 int stateno = pParser->yystack[pParser->yyidx].stateno; | 386 int stateno = pParser->yystack[pParser->yyidx].stateno; |
| 388 | 387 |
| 389 if( stateno>YY_SHIFT_MAX || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){ | 388 if( stateno>YY_SHIFT_COUNT |
| 389 || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){ |
| 390 return yy_default[stateno]; | 390 return yy_default[stateno]; |
| 391 } | 391 } |
| 392 assert( iLookAhead!=YYNOCODE ); | 392 assert( iLookAhead!=YYNOCODE ); |
| 393 i += iLookAhead; | 393 i += iLookAhead; |
| 394 if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){ | 394 if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){ |
| 395 if( iLookAhead>0 ){ | 395 if( iLookAhead>0 ){ |
| 396 #ifdef YYFALLBACK | 396 #ifdef YYFALLBACK |
| 397 YYCODETYPE iFallback; /* Fallback token */ | 397 YYCODETYPE iFallback; /* Fallback token */ |
| 398 if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0]) | 398 if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0]) |
| 399 && (iFallback = yyFallback[iLookAhead])!=0 ){ | 399 && (iFallback = yyFallback[iLookAhead])!=0 ){ |
| 400 #ifndef NDEBUG | 400 #ifndef NDEBUG |
| 401 if( yyTraceFILE ){ | 401 if( yyTraceFILE ){ |
| 402 fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n", | 402 fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n", |
| 403 yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]); | 403 yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]); |
| 404 } | 404 } |
| 405 #endif | 405 #endif |
| 406 return yy_find_shift_action(pParser, iFallback); | 406 return yy_find_shift_action(pParser, iFallback); |
| 407 } | 407 } |
| 408 #endif | 408 #endif |
| 409 #ifdef YYWILDCARD | 409 #ifdef YYWILDCARD |
| 410 { | 410 { |
| 411 int j = i - iLookAhead + YYWILDCARD; | 411 int j = i - iLookAhead + YYWILDCARD; |
| 412 if( j>=0 && j<YY_SZ_ACTTAB && yy_lookahead[j]==YYWILDCARD ){ | 412 if( |
| 413 #if YY_SHIFT_MIN+YYWILDCARD<0 |
| 414 j>=0 && |
| 415 #endif |
| 416 #if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT |
| 417 j<YY_ACTTAB_COUNT && |
| 418 #endif |
| 419 yy_lookahead[j]==YYWILDCARD |
| 420 ){ |
| 413 #ifndef NDEBUG | 421 #ifndef NDEBUG |
| 414 if( yyTraceFILE ){ | 422 if( yyTraceFILE ){ |
| 415 fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n", | 423 fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n", |
| 416 yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]); | 424 yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]); |
| 417 } | 425 } |
| 418 #endif /* NDEBUG */ | 426 #endif /* NDEBUG */ |
| 419 return yy_action[j]; | 427 return yy_action[j]; |
| 420 } | 428 } |
| 421 } | 429 } |
| 422 #endif /* YYWILDCARD */ | 430 #endif /* YYWILDCARD */ |
| (...skipping 11 matching lines...) Expand all Loading... |
| 434 ** If the look-ahead token is YYNOCODE, then check to see if the action is | 442 ** If the look-ahead token is YYNOCODE, then check to see if the action is |
| 435 ** independent of the look-ahead. If it is, return the action, otherwise | 443 ** independent of the look-ahead. If it is, return the action, otherwise |
| 436 ** return YY_NO_ACTION. | 444 ** return YY_NO_ACTION. |
| 437 */ | 445 */ |
| 438 static int yy_find_reduce_action( | 446 static int yy_find_reduce_action( |
| 439 int stateno, /* Current state number */ | 447 int stateno, /* Current state number */ |
| 440 YYCODETYPE iLookAhead /* The look-ahead token */ | 448 YYCODETYPE iLookAhead /* The look-ahead token */ |
| 441 ){ | 449 ){ |
| 442 int i; | 450 int i; |
| 443 #ifdef YYERRORSYMBOL | 451 #ifdef YYERRORSYMBOL |
| 444 if( stateno>YY_REDUCE_MAX ){ | 452 if( stateno>YY_REDUCE_COUNT ){ |
| 445 return yy_default[stateno]; | 453 return yy_default[stateno]; |
| 446 } | 454 } |
| 447 #else | 455 #else |
| 448 assert( stateno<=YY_REDUCE_MAX ); | 456 assert( stateno<=YY_REDUCE_COUNT ); |
| 449 #endif | 457 #endif |
| 450 i = yy_reduce_ofst[stateno]; | 458 i = yy_reduce_ofst[stateno]; |
| 451 assert( i!=YY_REDUCE_USE_DFLT ); | 459 assert( i!=YY_REDUCE_USE_DFLT ); |
| 452 assert( iLookAhead!=YYNOCODE ); | 460 assert( iLookAhead!=YYNOCODE ); |
| 453 i += iLookAhead; | 461 i += iLookAhead; |
| 454 #ifdef YYERRORSYMBOL | 462 #ifdef YYERRORSYMBOL |
| 455 if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){ | 463 if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){ |
| 456 return yy_default[stateno]; | 464 return yy_default[stateno]; |
| 457 } | 465 } |
| 458 #else | 466 #else |
| 459 assert( i>=0 && i<YY_SZ_ACTTAB ); | 467 assert( i>=0 && i<YY_ACTTAB_COUNT ); |
| 460 assert( yy_lookahead[i]==iLookAhead ); | 468 assert( yy_lookahead[i]==iLookAhead ); |
| 461 #endif | 469 #endif |
| 462 return yy_action[i]; | 470 return yy_action[i]; |
| 463 } | 471 } |
| 464 | 472 |
| 465 /* | 473 /* |
| 466 ** The following routine is called if the stack overflows. | 474 ** The following routine is called if the stack overflows. |
| 467 */ | 475 */ |
| 468 static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){ | 476 static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){ |
| 469 ParseARG_FETCH; | 477 ParseARG_FETCH; |
| (...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 833 yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); | 841 yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); |
| 834 if( yyendofinput ){ | 842 if( yyendofinput ){ |
| 835 yy_parse_failed(yypParser); | 843 yy_parse_failed(yypParser); |
| 836 } | 844 } |
| 837 yymajor = YYNOCODE; | 845 yymajor = YYNOCODE; |
| 838 #endif | 846 #endif |
| 839 } | 847 } |
| 840 }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 ); | 848 }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 ); |
| 841 return; | 849 return; |
| 842 } | 850 } |
| OLD | NEW |