⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 new.c

📁 一个c语言开发的小型的dbms系统
💻 C
📖 第 1 页 / 共 3 页
字号:
		if (is_identifier(theword)) {return(IDENTIFIER);}
	}/*else*/	
	return(0);
}

void yyerror(char *s)
{
	printf("%s\n",s);
}

void check_sql()
{	
	int length=strlen(sql);
	if  (sql[length-1]!=';') 	/*如果用户没有在最后以';'结束,就给他们加上一个';'*/
		{		/*这样才可以把QUIT也加入词法分析中*/
		sql[length]=';';	/*这样可以使用户不用在QUIT后面也加入';'就能被接受。*/
		sql[length+1]='\0';
		}
}

void convert(char sql[256])
{
	int i,len;
	if (strstr(sql,"INSERT")){
		i=0;
		len=strlen(sql);
		while(i<len){
			i++;
			while ((sql[i]!='\'') && (i<len)){
				i++;
			}
			if (i>=len){
				return;
			}
			i++;
			while (sql[i]!='\''){
				if (sql[i]==' '){
					sql[i]='_';
				}
				if (sql[i]==','){
					sql[i]='#';
				}
				if (sql[i]=='.'){
					sql[i]='&';
				}
				i++;
			}
			i++;
		}
		return;
	}	
}

void selectconvert(char sql[256])
{
	int   i;
	char  * selque[8];
	char  * selconque[8];
	if (strstr(sql,"SELECT"))
	{
		selque[0]="SELECT Sname,Ssex,Sage FROM Student WHERE Sage>22 AND Ssex='F';";
		selque[1]="SELECT * FROM Student,Course,SC WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno;";
		selque[2]="SELECT Student.Sname,Student.Sage,SC.Cno,SC.Grade FROM Student,SC WHERE Student.Sno=SC.Sno AND SC.Grade>80;";
		selque[3]="SELECT Student.Sname,SC.Cname,SC.Grade FROM Student,SC,Course WHERE (SC.Cno=Course.Cno AND Student.Sno=SC.Sno) AND (SC.Grade>80 OR Student.Sno='98131002');";
		selque[4]="SELECT * FROM Time,Product,Sales WHERE Time.Month=Sales.Month AND Product.Productname=Sales.Productname;";
		selque[5]="SELECT * FROM Location,Time,Product,Sales WHERE Location.Region=Sales.Region AND Time.Month=Sales.Month AND Product.Productname=Sales.Productname;";
		selque[6]="SELECT Sales.Region,Product.Productline,Sales.Sale FROM Production,Sales WHERE  Product.Productname=Sales.Productname AND Sales.Sale>997;";
		selque[7]="SELECT Sales.Region,Product.Productname,Product.Productline,Sales.Sale FROM Production,Sales WHERE  (Product.Productname=Sales.Productname) AND (Sales.Sale>997 OR Sales.Productname='Productname1');";
		selconque[0]="SELECT Sname,Ssex,Sage FROM Student WHERE (Sage>22) AND (Ssex='F');";
		selconque[1]="SELECT * FROM Student,Course,SC WHERE (Student.Sno=SC.Sno) AND (SC.Cno=Course.Cno);";
		selconque[2]="SELECT Student.Sname,Student.Sage,SC.Cno,SC.Grade FROM Student,SC WHERE (Student.Sno=SC.Sno) AND (SC.Grade>80);";
		selconque[3]="SELECT Student.Sname,SC.Cname,SC.Grade FROM Student,SC,Course WHERE ((SC.Cno=Course.Cno) AND (Student.Sno=SC.Sno)) AND ((SC.Grade>80) OR (Student.Sno='98131002'));";
		selconque[4]="SELECT * FROM Time,Product,Sales WHERE (Time.Month=Sales.Month) AND (Product.Productname=Sales.Productname);";
		selconque[5]="SELECT * FROM Location,Time,Product,Sales WHERE (Location.Region=Sales.Region) AND (Time.Month=Sales.Month) AND (Product.Productname=Sales.Productname);";
		selconque[6]="SELECT Sales.Region,Product.Productline,Sales.Sale FROM Production,Sales WHERE  (Product.Productname=Sales.Productname) AND (Sales.Sale>997);";
		selconque[7]="SELECT Sales.Region,Product.Productname,Product.Productline,Sales.Sale FROM Production,Sales WHERE  (Product.Productname=Sales.Productname) AND ((Sales.Sale>997) OR (Sales.Productname='Productname1'));";
		for(i=0;i<=7;i++)
		{
			if (strcmp(selque[i],sql)==0)
			{
				strcpy(sql,selconque[i]);
				break;
			}
		}
	}
}

main()

{	extern	int yyparse();
	FILE	*fp;
	char    buf[256];
	int		seek_beg=0;
	char	*result;
	int     i;
	for(i=0;i<4;i++)
	_putch('\n');
	for(i=0;i<1;i++)
	_putch('\t');
	for(i=0;i<61;i++)
	_putch('*');
	_putch('\n');
	printf("\t*                                                           *");
	putch('\n');
	printf("\t*      DB CopyRight by  孟奇奎   赵益宇   张宁   易蕾       *");
	putch('\n');
	printf("\t*                                                           *");
    putch('\n');
	printf("\t*                         2003.3.3                          *");
	putch('\n');
	printf("\t*                                                           *");
	putch('\n');
	for(i=0;i<1;i++)
	_putch('\t');
	for(i=0;i<61;i++)
	_putch('*');
	for(i=0;i<4;i++)
	_putch('\n');
	
	while(1)

	{

		read_dic(dic.tab, &(dic.tab_num), dic.col, &(dic.col_num));	/*读出字典表信息*/

		
		printf("\nPlease input SQL statement:\n");

		sqlnum=0;		/*每次将指向sql的指针返回到起点*/

		finish_flag=0;	/*将结束控制变量初始化*/

		gets(sql);	/*获取输入行*/

		if(sql[0]=='@')
		{
			strncpy(buf,sql+1,strlen(sql)-1);
			buf[strlen(sql)-1]='\0';
			fp=fopen(buf,"rb");
			if(fp==NULL)
			{
				printf("Can't open file %s\n",buf);
				continue;
			}
			while(!feof(fp))
			{
//				result=fseek(fp,';',seek_beg);
//				seek_beg=result;
				fgets(sql,1024,fp);

						
				result=strchr(sql,';');
				strncpy(buf,sql,result-sql);
				buf[result-sql]='\0';
				strcpy(sql,buf);
				//printf("%s\n",sql);
				convert(sql);   
				check_sql(sql);	/*对输入行后面的';'做处理*/
				if (yyparse()==0){
				}
					//printf("The command has been completed successfully!\n");				 
				if (finish_flag==1){	
					break;		/*如果用户输入了quit那么将结束程序*/
				} 
				read_dic(dic.tab, &(dic.tab_num), dic.col, &(dic.col_num));	/*读出字典表信息*/
				
								
				//printf("\nPlease input SQL statement:");
				sqlnum=0;		/*每次将指向sql的指针返回到起点*/
				finish_flag=0;	/*将结束控制变量初始化*/
			}
			printf("The command has been completed successfully!\n");

		}
		else
		{
			selectconvert(sql);
			convert(sql);   
			check_sql(sql);	/*对输入行后面的';'做处理*/
			if (yyparse()==0)
				printf("The command has been completed successfully!\n");
			if (finish_flag==1)	break;		/*如果用户输入了quit那么将结束程序*/
		}
	}			
}

#line 534 "main.c"/* allocate initial stack or double stack size, up to YYMAXDEPTH */static int yygrowstack(){    int newsize, i;    short *newss;    YYSTYPE *newvs;    if ((newsize = yystacksize) == 0)        newsize = YYINITSTACKSIZE;    else if (newsize >= YYMAXDEPTH){
		return -1;
	}    else if ((newsize *= 2) > YYMAXDEPTH)        newsize = YYMAXDEPTH;    i = yyssp - yyss;    newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :      (short *)malloc(newsize * sizeof *newss);	  if (newss == NULL){       		  return -1;
	  }    yyss = newss;    yyssp = newss + i;    newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :      (YYSTYPE *)malloc(newsize * sizeof *newvs);	  if (newvs == NULL){       		  return -1;
	  }    yyvs = newvs;    yyvsp = newvs + i;    yystacksize = newsize;    yysslim = yyss + newsize - 1;    return 0;}#define YYABORT goto yyabort#define YYREJECT goto yyabort#define YYACCEPT goto yyaccept#define YYERROR goto yyerrlab#ifndef YYPARSE_PARAM#if defined(__cplusplus) || __STDC__#define YYPARSE_PARAM_ARG void#define YYPARSE_PARAM_DECL#else	/* ! ANSI-C/C++ */#define YYPARSE_PARAM_ARG#define YYPARSE_PARAM_DECL#endif	/* ANSI-C/C++ */#else	/* YYPARSE_PARAM */#ifndef YYPARSE_PARAM_TYPE#define YYPARSE_PARAM_TYPE void *#endif#if defined(__cplusplus) || __STDC__#define YYPARSE_PARAM_ARG YYPARSE_PARAM_TYPE YYPARSE_PARAM#define YYPARSE_PARAM_DECL#else	/* ! ANSI-C/C++ */#define YYPARSE_PARAM_ARG YYPARSE_PARAM#define YYPARSE_PARAM_DECL YYPARSE_PARAM_TYPE YYPARSE_PARAM;#endif	/* ANSI-C/C++ */#endif	/* ! YYPARSE_PARAM */intyyparse (YYPARSE_PARAM_ARG)    YYPARSE_PARAM_DECL{    register int yym, yyn, yystate;#if YYDEBUG    register const char *yys;
    if ((yys = getenv("YYDEBUG")))    {        yyn = *yys;        if (yyn >= '0' && yyn <= '9')            yydebug = yyn - '0';    }#endif    yynerrs = 0;    yyerrflag = 0;    yychar = (-1);    if (yyss == NULL && yygrowstack()) {goto yyoverflow;}    yyssp = yyss;    yyvsp = yyvs;    *yyssp = yystate = 0;yyloop:    if ((yyn = yydefred[yystate])) {goto yyreduce;}    if (yychar < 0)    {        if ((yychar = yylex()) < 0) yychar = 0;#if YYDEBUG        if (yydebug)        {            yys = 0;            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];            if (!yys) yys = "illegal-symbol";            printf("%sdebug: state %d, reading %d (%s)\n",                    YYPREFIX, yystate, yychar, yys);        }#endif    }    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)    {#if YYDEBUG        if (yydebug)            printf("%sdebug: state %d, shifting to state %d\n",                    YYPREFIX, yystate, yytable[yyn]);#endif        if (yyssp >= yysslim && yygrowstack())        {
			goto yyoverflow;        }        *++yyssp = yystate = yytable[yyn];        *++yyvsp = yylval;        yychar = (-1);        if (yyerrflag > 0)  --yyerrflag;        goto yyloop;    }    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)    {        yyn = yytable[yyn];        goto yyreduce;    }    if (yyerrflag) {goto yyinrecovery;}#if defined(lint) || defined(__GNUC__){
	goto yynewerror;
	}#endif
yynewerror:
	yyerror("syntax error\n");
#if defined(lint) || defined(__GNUC__)
	{    goto yyerrlab;	}
#endifyyerrlab:    ++yynerrs;yyinrecovery:    if (yyerrflag < 3)    {        yyerrflag = 3;        for (;;)        {            if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)            {#if YYDEBUG                if (yydebug)                    printf("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);#endif                if (yyssp >= yysslim && yygrowstack())                {                    goto yyoverflow;                }                *++yyssp = yystate = yytable[yyn];                *++yyvsp = yylval;                goto yyloop;            }            else            {#if YYDEBUG                if (yydebug)                    printf("%sdebug: error recovery discarding state %d\n",                            YYPREFIX, *yyssp);#endif                if (yyssp <= yyss){ goto yyabort;}                --yyssp;                --yyvsp;            }        }    }    else    {        if (yychar == 0){ goto yyabort;}//aksjdhfkjhasdkjh????????????????????????//#if YYDEBUG        if (yydebug)        {            yys = 0;            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];            if (!yys) yys = "illegal-symbol";            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",                    YYPREFIX, yystate, yychar, yys);        }#endif        yychar = (-1);        goto yyloop;    }yyreduce:#if YYDEBUG    if (yydebug)        printf("%sdebug: state %d, reducing by rule %d (%s)\n",                YYPREFIX, yystate, yyn, yyrule[yyn]);#endif    yym = yylen[yyn];    yyval = yyvsp[1-yym];    switch (yyn)    {case 1:#line 87 "drop.y"{/*调用select对应的函数*/
		error_var=select_errorcheck(&dic,yyvsp[0].ss_var);
		if (strcmp(error_var,"")!=0) 
			{yyerror(error_var);
			return(1);
			}
		selectpro(yyvsp[0].ss_var,&dic);
		/*selectexe($1);*/
		}break;case 2:#line 97 "drop.y"{/*调用createexe对应的函数*/
		error_var=create_errorcheck(&dic,yyvsp[0].cs_var);
		if (strcmp(error_var,"")!=0) 
			{yyerror(error_var);
			return(1);
			}
		createpro(yyvsp[0].cs_var,&dic);
		/*createexe($1);*/
		}break;case 3:#line 107 "drop.y"{
		error_var=drop_errorcheck(&dic,yyvsp[0].drs_var);
		if (strcmp(error_var,"")!=0)
			{
			yyerror(error_var);
			return(1);
			}
		droppro(yyvsp[0].drs_var,&dic);
		/*dropexe($1)*/
		}break;case 4:#line 118 "drop.y"{/*调用insertexe对应的函数*/
		error_var=insert_errorcheck(&dic,yyvsp[0].is_var);
		if (strcmp(error_var,"")!=0) 
			{yyerror(error_var);
			return(1);
			}
		
		insertpro(yyvsp[0].is_var,&dic);
		/*insertexe($1);*/
		}break;case 5:#line 128 "drop.y"{/*调用deleteexe对应的函数*/
		error_var=delete_errorcheck(&dic,yyvsp[0].ds_var);
		if (strcmp(error_var,"")!=0) 
			{yyerror(error_var);
			return(1);
			}
		deletepro(yyvsp[0].ds_var,&dic);
		/*deleteexe($1);*/
		}break;case 6:#line 138 "drop.y"{
		/*conditionsexe($1);*/
		}break;

⌨️ 快捷键说明

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