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

📄 c-.tab.c

📁 一个编译器的例子,基于c语言,在linux下开发 现在了简单的c语言例子
💻 C
📖 第 1 页 / 共 5 页
字号:
	union yyalloc *yyptr =	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));	if (! yyptr)	  goto yyoverflowlab;	YYSTACK_RELOCATE (yyss);	YYSTACK_RELOCATE (yyvs);#  undef YYSTACK_RELOCATE	if (yyss1 != yyssa)	  YYSTACK_FREE (yyss1);      }# endif#endif /* no yyoverflow */      yyssp = yyss + yysize - 1;      yyvsp = yyvs + yysize - 1;      YYDPRINTF ((stderr, "Stack size increased to %lu\n",		  (unsigned long int) yystacksize));      if (yyss + yystacksize - 1 <= yyssp)	YYABORT;    }  YYDPRINTF ((stderr, "Entering state %d\n", yystate));  goto yybackup;/*-----------.| yybackup.  |`-----------*/yybackup:/* Do appropriate processing given the current state.  *//* Read a lookahead token if we need one and don't already have one.  *//* yyresume: */  /* First try to decide what to do without reference to lookahead token.  */  yyn = yypact[yystate];  if (yyn == YYPACT_NINF)    goto yydefault;  /* Not known => get a lookahead token if don't already have one.  */  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */  if (yychar == YYEMPTY)    {      YYDPRINTF ((stderr, "Reading a token: "));      yychar = YYLEX;    }  if (yychar <= YYEOF)    {      yychar = yytoken = YYEOF;      YYDPRINTF ((stderr, "Now at end of input.\n"));    }  else    {      yytoken = YYTRANSLATE (yychar);      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);    }  /* If the proper action on seeing token YYTOKEN is to reduce or to     detect an error, take that action.  */  yyn += yytoken;  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)    goto yydefault;  yyn = yytable[yyn];  if (yyn <= 0)    {      if (yyn == 0 || yyn == YYTABLE_NINF)	goto yyerrlab;      yyn = -yyn;      goto yyreduce;    }  if (yyn == YYFINAL)    YYACCEPT;  /* Shift the lookahead token.  */  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));  /* Discard the token being shifted unless it is eof.  */  if (yychar != YYEOF)    yychar = YYEMPTY;  *++yyvsp = yylval;  /* Count tokens shifted since error; after three, turn off error     status.  */  if (yyerrstatus)    yyerrstatus--;  yystate = yyn;  goto yynewstate;/*-----------------------------------------------------------.| yydefault -- do the default action for the current state.  |`-----------------------------------------------------------*/yydefault:  yyn = yydefact[yystate];  if (yyn == 0)    goto yyerrlab;  goto yyreduce;/*-----------------------------.| yyreduce -- Do a reduction.  |`-----------------------------*/yyreduce:  /* yyn is the number of a rule to reduce with.  */  yylen = yyr2[yyn];  /* If YYLEN is nonzero, implement the default value of the action:     `$$ = $1'.     Otherwise, the following line sets YYVAL to garbage.     This behavior is undocumented and Bison     users should not rely upon it.  Assigning to YYVAL     unconditionally makes the parser a bit smaller, and it avoids a     GCC warning that YYVAL may be used uninitialized.  */  yyval = yyvsp[1-yylen];  YY_REDUCE_PRINT (yyn);  switch (yyn)    {        case 2:#line 63 "c-.y"    {yyval.symptr=newLeaf("ID");   					symrec *id;					id=getsym(yyvsp[0].val, scope);					if(id==NULL) {						yyerror(); yynerrs++;						printf("---error messege(%d,%d):identifier  \"%s\" not defined, first used here\n", 													currLine, column, yyvsp[0].val);					}else {						//$$->symTab=add2Table($1,funcType,scope); 						yyval.symptr->symTab=id;					}					curIDNode = yyval.symptr;lastIDNode=yyval.symptr;				   ;}    break;  case 3:#line 76 "c-.y"    {yyval.symptr=newLeaf("INT_V"); strcpy(yyval.symptr->value,yyvsp[0].val);;}    break;  case 4:#line 77 "c-.y"    {yyval.symptr=newLeaf("CHAR_V"); 	                                if(yyvsp[0].val[1]!='\\') {					   yyvsp[0].val[0]=yyvsp[0].val[1];					   yyvsp[0].val[1]='\0';					}else{						if( yyvsp[0].val[2]<'0' || yyvsp[0].val[2]>'9'){							yyvsp[0].val[0]=yyvsp[0].val[2];							yyvsp[0].val[1]='\0';         						}else{							int i;							char asc[10];							for(i=2; i<strlen(yyvsp[0].val); i++){								asc[i-2]=yyvsp[0].val[i];							}							asc[i-2]='\0';							i=atoi(asc);							//printf("char i: %d\n", i);							yyvsp[0].val[0]=i;							yyvsp[0].val[1]='\0';						}					}					sprintf(yyval.symptr->value, "%d",(int)(yyvsp[0].val[0]));				;}    break;  case 5:#line 100 "c-.y"    {yyval.symptr=newLeaf("FLT_V"); 	                                      float f;					      f=atof(yyvsp[0].val); 	                                      sprintf(yyval.symptr->value,"%d", *( (unsigned int *)(&f)));					      //printf("%s  :  %s\n", $1, $$->value);					   //strcpy($$->value,$1);					    ;}    break;  case 6:#line 107 "c-.y"    {yyval.symptr=newLeaf("HEX_V"); strcpy(yyval.symptr->value,yyvsp[0].val);;}    break;  case 7:#line 108 "c-.y"    {yyval.symptr=newLeaf("EP_V"); strcpy(yyval.symptr->value,yyvsp[0].val);;}    break;  case 8:#line 109 "c-.y"    {strcpy(literals[strCount],yyvsp[0].val);yyval.symptr=setStrIndex(newLeaf("STRING"),strCount);strCount++;;}    break;  case 9:#line 110 "c-.y"    {yyval.symptr=yyvsp[-1].symptr;;}    break;  case 10:#line 114 "c-.y"    {yyval.symptr=yyvsp[0].symptr;;}    break;  case 11:#line 115 "c-.y"    { yyval.symptr=addSibling(addNext(newLeaf("offset"),yyvsp[-3].symptr), 	                                                                           addNext(newLeaf("exp"),yyvsp[-1].symptr));																			   yyval.symptr->sibling->symTab=curIDNode->symTab;							                   strcpy(yyval.symptr->sibling->value,lastIDNode->value);									   ;}    break;  case 12:#line 121 "c-.y"    {yyval.symptr=yyvsp[-2].symptr;;}    break;  case 13:#line 122 "c-.y"    {yyval.symptr=addSibling(yyvsp[-3].symptr,yyvsp[-1].symptr);;}    break;  case 14:#line 123 "c-.y"    {yyval.symptr=addSibling(addNext(newLeaf("offset"),yyvsp[-2].symptr), newLeaf("member"));	                                                                   strcpy(yyval.symptr->sibling->value, yyvsp[0].val); 									   yyval.symptr->sibling->symTab=curIDNode->symTab;									   lastIDNode=yyval.symptr->sibling;									   									   ;}    break;  case 15:#line 129 "c-.y"    {yyval.symptr=addSibling(addNext(newLeaf(yyvsp[-1].val),yyvsp[-2].symptr), newLeaf("ID"));;}    break;  case 16:#line 130 "c-.y"    {yyval.symptr=addSibling(newLeaf("unaryOp"),yyvsp[-1].symptr);	                                                   strcpy(yyval.symptr->value,"O+");	                                                   yyval.symptr->symTab=curIDNode->symTab;							   ;}    break;  case 17:#line 134 "c-.y"    {yyval.symptr=addSibling(newLeaf("unaryOp"),yyvsp[-1].symptr);		                                           strcpy(yyval.symptr->value,"O-");	                                                   yyval.symptr->symTab=curIDNode->symTab;							   ;}    break;  case 18:#line 141 "c-.y"    {yyval.symptr=yyvsp[0].symptr;;}    break;  case 19:#line 142 "c-.y"    {yyval.symptr=addSibling(addNext(newLeaf("asgnExp"),yyvsp[0].symptr),addNext(newLeaf("argExpLst"),yyvsp[-2].symptr));;}    break;  case 20:#line 146 "c-.y"    {yyval.symptr=yyvsp[0].symptr;;}    break;  case 21:#line 147 "c-.y"    {yyval.symptr=addSibling(newLeaf("unaryOp"), yyvsp[0].symptr);		                                           strcpy(yyval.symptr->value,"+O");	                                                   yyval.symptr->symTab=curIDNode->symTab;							   ;}    break;  case 22:#line 151 "c-.y"    {yyval.symptr=addSibling(newLeaf("unaryOp"), yyvsp[0].symptr);		                                           strcpy(yyval.symptr->value,"-O");	                                                   yyval.symptr->symTab=curIDNode->symTab;							   ;}    break;  case 23:#line 155 "c-.y"    {yyval.symptr=addSibling(yyvsp[-1].symptr,yyvsp[0].symptr);;}    break;  case 24:#line 156 "c-.y"    {yyval.symptr=addSibling(newLeaf("sizeof"), yyvsp[0].symptr);;}    break;  case 25:#line 157 "c-.y"    {yyval.symptr=addSibling(newLeaf("sizeof"), yyvsp[-1].symptr);;}    break;  case 26:#line 161 "c-.y"    {yyval.symptr=newLeaf("&");;}    break;  case 27:#line 162 "c-.y"    {yyval.symptr=newLeaf("*");;}    break;  case 28:#line 163 "c-.y"    {yyval.symptr=newLeaf("+");;}    break;  case 29:#line 164 "c-.y"    {yyval.symptr=newLeaf("-");;}    break;  case 30:#line 165 "c-.y"    {yyval.symptr=newLeaf("!");;}    break;  case 31:#line 169 "c-.y"    {yyval.symptr=yyvsp[0].symptr;;}    break;  case 32:#line 170 "c-.y"    {yyval.symptr=addSibling(new

⌨️ 快捷键说明

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