sql.tab.c

来自「一个类似windows」· C语言 代码 · 共 2,284 行 · 第 1/5 页

C
2,284
字号
    {
            yyval.expr = EXPR_complex( info, yyvsp[-2].expr, OP_EQ, yyvsp[0].expr );
            if( !yyval.expr )
                YYABORT;
        ;}
    break;

  case 43:
#line 440 "./sql.y"
    {
            yyval.expr = EXPR_complex( info, yyvsp[-2].expr, OP_AND, yyvsp[0].expr );
            if( !yyval.expr )
                YYABORT;
        ;}
    break;

  case 44:
#line 446 "./sql.y"
    {
            yyval.expr = EXPR_complex( info, yyvsp[-2].expr, OP_OR, yyvsp[0].expr );
            if( !yyval.expr )
                YYABORT;
        ;}
    break;

  case 45:
#line 452 "./sql.y"
    {
            yyval.expr = EXPR_complex( info, yyvsp[-2].expr, OP_EQ, yyvsp[0].expr );
            if( !yyval.expr )
                YYABORT;
        ;}
    break;

  case 46:
#line 458 "./sql.y"
    {
            yyval.expr = EXPR_complex( info, yyvsp[-2].expr, OP_GT, yyvsp[0].expr );
            if( !yyval.expr )
                YYABORT;
        ;}
    break;

  case 47:
#line 464 "./sql.y"
    {
            yyval.expr = EXPR_complex( info, yyvsp[-2].expr, OP_LT, yyvsp[0].expr );
            if( !yyval.expr )
                YYABORT;
        ;}
    break;

  case 48:
#line 470 "./sql.y"
    {
            yyval.expr = EXPR_complex( info, yyvsp[-2].expr, OP_LE, yyvsp[0].expr );
            if( !yyval.expr )
                YYABORT;
        ;}
    break;

  case 49:
#line 476 "./sql.y"
    {
            yyval.expr = EXPR_complex( info, yyvsp[-2].expr, OP_GE, yyvsp[0].expr );
            if( !yyval.expr )
                YYABORT;
        ;}
    break;

  case 50:
#line 482 "./sql.y"
    {
            yyval.expr = EXPR_complex( info, yyvsp[-2].expr, OP_NE, yyvsp[0].expr );
            if( !yyval.expr )
                YYABORT;
        ;}
    break;

  case 51:
#line 488 "./sql.y"
    {
            yyval.expr = EXPR_complex( info, yyvsp[-2].expr, OP_ISNULL, NULL );
            if( !yyval.expr )
                YYABORT;
        ;}
    break;

  case 52:
#line 494 "./sql.y"
    {
            yyval.expr = EXPR_complex( info, yyvsp[-3].expr, OP_NOTNULL, NULL );
            if( !yyval.expr )
                YYABORT;
        ;}
    break;

  case 55:
#line 508 "./sql.y"
    {
            yyval.column_list = parser_alloc_column( info, NULL, NULL );
            if( !yyval.column_list )
                YYABORT;
            yyval.column_list->val = yyvsp[0].expr;
        ;}
    break;

  case 56:
#line 515 "./sql.y"
    {
            yyval.column_list = parser_alloc_column( info, NULL, NULL );
            if( !yyval.column_list )
                YYABORT;
            yyval.column_list->val = yyvsp[-2].expr;
            yyval.column_list->next = yyvsp[0].column_list;
        ;}
    break;

  case 58:
#line 527 "./sql.y"
    {
            yyval.column_list = yyvsp[-2].column_list;
            yyval.column_list->next = yyvsp[0].column_list;
        ;}
    break;

  case 59:
#line 535 "./sql.y"
    {
            yyval.column_list = yyvsp[-2].column_list;
            yyval.column_list->val = yyvsp[0].expr;
        ;}
    break;

  case 60:
#line 543 "./sql.y"
    {
            yyval.expr = EXPR_ival( info, yyvsp[0].integer );
            if( !yyval.expr )
                YYABORT;
        ;}
    break;

  case 61:
#line 549 "./sql.y"
    {
            yyval.expr = EXPR_ival( info, -yyvsp[0].integer );
            if( !yyval.expr )
                YYABORT;
        ;}
    break;

  case 62:
#line 555 "./sql.y"
    {
            yyval.expr = EXPR_sval( info, &yyvsp[0].str );
            if( !yyval.expr )
                YYABORT;
        ;}
    break;

  case 63:
#line 561 "./sql.y"
    {
            yyval.expr = EXPR_wildcard( info );
            if( !yyval.expr )
                YYABORT;
        ;}
    break;

  case 64:
#line 570 "./sql.y"
    {
            yyval.expr = EXPR_column( info, yyvsp[0].column_list );
            if( !yyval.expr )
                YYABORT;
        ;}
    break;

  case 65:
#line 579 "./sql.y"
    {
            yyval.column_list = parser_alloc_column( info, yyvsp[-2].string, yyvsp[0].string );
            if( !yyval.column_list )
                YYABORT;
        ;}
    break;

  case 66:
#line 585 "./sql.y"
    {
            yyval.column_list = parser_alloc_column( info, NULL, yyvsp[0].string );
            if( !yyval.column_list )
                YYABORT;
        ;}
    break;

  case 67:
#line 594 "./sql.y"
    {
            yyval.string = yyvsp[0].string;
        ;}
    break;

  case 68:
#line 601 "./sql.y"
    {
            yyval.string = SQL_getstring( info, &yyvsp[0].str );
            if( !yyval.string )
                YYABORT;
        ;}
    break;

  case 69:
#line 610 "./sql.y"
    {
            yyval.integer = SQL_getint( info );
        ;}
    break;


    }

/* Line 1000 of yacc.c.  */
#line 2054 "sql.tab.c"

  yyvsp -= yylen;
  yyssp -= yylen;


  YY_STACK_PRINT (yyss, yyssp);

  *++yyvsp = yyval;


  /* Now `shift' the result of the reduction.  Determine what state
     that goes to, based on the state we popped back to and the rule
     number reduced by.  */

  yyn = yyr1[yyn];

  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
    yystate = yytable[yystate];
  else
    yystate = yydefgoto[yyn - YYNTOKENS];

  goto yynewstate;


/*------------------------------------.
| yyerrlab -- here on detecting error |
`------------------------------------*/
yyerrlab:
  /* If not already recovering from an error, report this error.  */
  if (!yyerrstatus)
    {
      ++yynerrs;
#if YYERROR_VERBOSE
      yyn = yypact[yystate];

      if (YYPACT_NINF < yyn && yyn < YYLAST)
	{
	  YYSIZE_T yysize = 0;
	  int yytype = YYTRANSLATE (yychar);
	  const char* yyprefix;
	  char *yymsg;
	  int yyx;

	  /* Start YYX at -YYN if negative to avoid negative indexes in
	     YYCHECK.  */
	  int yyxbegin = yyn < 0 ? -yyn : 0;

	  /* Stay within bounds of both yycheck and yytname.  */
	  int yychecklim = YYLAST - yyn;
	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
	  int yycount = 0;

	  yyprefix = ", expecting ";
	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
	      {
		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
		yycount += 1;
		if (yycount == 5)
		  {
		    yysize = 0;
		    break;
		  }
	      }
	  yysize += (sizeof ("syntax error, unexpected ")
		     + yystrlen (yytname[yytype]));
	  yymsg = (char *) YYSTACK_ALLOC (yysize);
	  if (yymsg != 0)
	    {
	      char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
	      yyp = yystpcpy (yyp, yytname[yytype]);

	      if (yycount < 5)
		{
		  yyprefix = ", expecting ";
		  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
		      {
			yyp = yystpcpy (yyp, yyprefix);
			yyp = yystpcpy (yyp, yytname[yyx]);
			yyprefix = " or ";
		      }
		}
	      yyerror (yymsg);
	      YYSTACK_FREE (yymsg);
	    }
	  else
	    yyerror ("syntax error; also virtual memory exhausted");
	}
      else
#endif /* YYERROR_VERBOSE */
	yyerror ("syntax error");
    }



  if (yyerrstatus == 3)
    {
      /* If just tried and failed to reuse lookahead token after an
	 error, discard it.  */

      if (yychar <= YYEOF)
        {
          /* If at end of input, pop the error token,
	     then the rest of the stack, then return failure.  */
	  if (yychar == YYEOF)
	     for (;;)
	       {
		 YYPOPSTACK;
		 if (yyssp == yyss)
		   YYABORT;
		 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
		 yydestruct (yystos[*yyssp], yyvsp);
	       }
        }
      else
	{
	  YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
	  yydestruct (yytoken, &yylval);
	  yychar = YYEMPTY;

	}
    }

  /* Else will try to reuse lookahead token after shifting the error
     token.  */
  goto yyerrlab1;


/*---------------------------------------------------.
| yyerrorlab -- error raised explicitly by YYERROR.  |
`---------------------------------------------------*/
yyerrorlab:

#ifdef __GNUC__
  /* Pacify GCC when the user code never invokes YYERROR and the label
     yyerrorlab therefore never appears in user code.  */
  if (0)
     goto yyerrorlab;
#endif

  yyvsp -= yylen;
  yyssp -= yylen;
  yystate = *yyssp;
  goto yyerrlab1;


/*-------------------------------------------------------------.
| yyerrlab1 -- common code for both syntax error and YYERROR.  |
`-------------------------------------------------------------*/
yyerrlab1:
  yyerrstatus = 3;	/* Each real token shifted decrements this.  */

  for (;;)
    {
      yyn = yypact[yystate];
      if (yyn != YYPACT_NINF)
	{
	  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;

      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
      yydestruct (yystos[yystate], yyvsp);
      YYPOPSTACK;
      yystate = *yyssp;
      YY_STACK_PRINT (yyss, yyssp);
    }

  if (yyn == YYFINAL)
    YYACCEPT;

  YYDPRINTF ((stderr, "Shifting error token, "));

  *++yyvsp = yylval;


  yystate = yyn;
  goto yynewstate;


/*-------------------------------------.
| yyacceptlab -- YYACCEPT comes here.  |
`-------------------------------------*/
yyacceptlab:
  yyresult = 0;
  goto yyreturn;

/*-----------------------------------.
| yyabortlab -- YYABORT comes here.  |
`-----------------------------------*/
yyabortlab:
  yyresult = 1;
  goto yyreturn;

#ifndef yyoverflow
/*----------------------------------------------.
| yyoverflowlab -- parser overflow comes here.  |
`----------------------------------------------*/
yyoverflowlab:
  yyerror ("parser stack overflow");
  yyresult = 2;
  /* Fall through.  */
#endif

yyreturn:
#ifndef yyoverflow
  if (yyss != yyssa)
    YYSTACK_FREE (yyss);
#endif
  return yyresult;
}


#line 615 "./sql.y"


static void *parser_alloc( void *info, unsigned int sz )
{
    SQL_input* sql = (SQL_input*) info;
  

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?