📄 y.tab.c
字号:
sqlnum++;
ss=sql[sqlnum];
}
aword[awordnum]='\0';
}
yylex()
{
char ss;
int is_a_token;
char theword[256]; /*用于分解出输入行的一个单词*/
while (sql[sqlnum]==' ')
sqlnum++;
ss=sql[sqlnum];
if (ss=='\0') return(0);
if (is_legal(ss)==0)
{ /*主要识别标点和运算符*/
sqlnum++;
return(ss);
}
else
{ readaword(theword);
/*主要识别保留字*/
if (is_a_token=is_token(theword)) return(is_a_token);
/*识别数字和标识符*/
yylval.yych=(char *)malloc(strlen(theword)+1);
strcpy(yylval.yych,theword);
if (is_number(theword)) return(NUMBER);
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';
}
}
main()
{ extern int yyparse();
FILE *fp;
char buf[256];
int seek_beg=0;
char *result;
while(1)
{
read_dic(dic.tab, &(dic.tab_num), dic.col, &(dic.col_num)); /*读出字典表信息*/
printf("\nSQL>");
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);
printf("%s\n",sql);//asdfasadfasdf
result=strchr(sql,';');
strncpy(buf,sql,result-sql);
buf[result-sql]='\0';
strcpy(sql,buf);
printf("%s\n",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("\nSQL>");
sqlnum=0; /*每次将指向sql的指针返回到起点*/
finish_flag=0; /*将结束控制变量初始化*/
}
}
else
{
check_sql(sql); /*对输入行后面的';'做处理*/
if (yyparse()==0)
printf("The command has been completed successfully!\n");
if (finish_flag==1) break; /*如果用户输入了quit那么将结束程序*/
}
}
}
#line 525 "no_help.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;#endifyynewerror:
printf("error22:XXXXXXXX\n");//??????? yyerror("zhao: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;#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 81 "no_help.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 91 "no_help.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 101 "no_help.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 4:#line 111 "no_help.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 5:#line 121 "no_help.y"{
/*conditionsexe($1);*/
}break;case 6:#line 125 "no_help.y"{
finish_flag=1; /*表示应当退出了*/
}break;case 8:#line 133 "no_help.y"{
yyval.ss_var=(_selectstruct_type *)malloc(sizeof(_selectstruct_type));
yyval.ss_var->sf=yyvsp[-3].sf_var;
yyval.ss_var->st=yyvsp[-1].st_var;
yyval.ss_var->cons=NULL;
}break;case 9:#line 140 "no_help.y"{
yyval.ss_var=(_selectstruct_type *)malloc(sizeof(_selectstruct_type));
yyval.ss_var->sf=yyvsp[-5].sf_var;
yyval.ss_var->st=yyvsp[-3].st_var;
yyval.ss_var->cons=yyvsp[-1].cons_var;
}break;case 10:#line 148 "no_help.y"{
yyval.sf_var=yyvsp[0].sf_var;
}break;case 11:#line 152 "no_help.y"{
yyval.sf_var=(_selectedfields_type *)malloc(sizeof(_selectedfields_type));
yyval.sf_var->table=NULL;
yyval.sf_var->field="*";
yyval.sf_var->next_sf=NULL;
}break;case 12:#line 160 "no_help.y"{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -