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

📄 config_gram.c

📁 AVR的USB文件
💻 C
📖 第 1 页 / 共 4 页
字号:
        case K_RESET :          current_part->retry_pulse = PIN_AVR_RESET;          break;        case K_SCK :          current_part->retry_pulse = PIN_AVR_SCK;          break;      }      free_token(yyvsp[-2]);    }    break;  case 64:#line 492 "../config_gram.y"    {       current_mem = avr_new_memtype();       strcpy(current_mem->desc, strdup(yyvsp[0]->value.string));       free_token(yyvsp[0]);     }    break;  case 65:#line 498 "../config_gram.y"    {       ladd(current_part->mem, current_mem);       current_mem = NULL;     }    break;  case 66:#line 503 "../config_gram.y"    {    {       int opnum;      OPCODE * op;      opnum = which_opcode(yyvsp[-2]);      op = avr_new_opcode();      parse_cmdbits(op);      current_part->op[opnum] = op;      free_token(yyvsp[-2]);    }  }    break;  case 71:#line 532 "../config_gram.y"    {      current_mem->paged = yyvsp[0]->primary == K_YES ? 1 : 0;      free_token(yyvsp[0]);    }    break;  case 72:#line 538 "../config_gram.y"    {      current_mem->size = yyvsp[0]->value.number;      free_token(yyvsp[0]);    }    break;  case 73:#line 545 "../config_gram.y"    {      current_mem->page_size = yyvsp[0]->value.number;      free_token(yyvsp[0]);    }    break;  case 74:#line 551 "../config_gram.y"    {      current_mem->num_pages = yyvsp[0]->value.number;      free_token(yyvsp[0]);    }    break;  case 75:#line 557 "../config_gram.y"    {      current_mem->min_write_delay = yyvsp[0]->value.number;      free_token(yyvsp[0]);    }    break;  case 76:#line 563 "../config_gram.y"    {      current_mem->max_write_delay = yyvsp[0]->value.number;      free_token(yyvsp[0]);    }    break;  case 77:#line 569 "../config_gram.y"    {      current_mem->pwroff_after_write = yyvsp[0]->primary == K_YES ? 1 : 0;      free_token(yyvsp[0]);    }    break;  case 78:#line 575 "../config_gram.y"    {      current_mem->readback[0] = yyvsp[0]->value.number;      free_token(yyvsp[0]);    }    break;  case 79:#line 581 "../config_gram.y"    {      current_mem->readback[1] = yyvsp[0]->value.number;      free_token(yyvsp[0]);    }    break;  case 80:#line 586 "../config_gram.y"    {    {       int opnum;      OPCODE * op;      opnum = which_opcode(yyvsp[-2]);      op = avr_new_opcode();      parse_cmdbits(op);      current_mem->op[opnum] = op;      free_token(yyvsp[-2]);    }  }    break;    }/* Line 1016 of /usr/share/bison/yacc.c.  */#line 1737 "config_gram.c"  yyvsp -= yylen;  yyssp -= yylen;#if YYDEBUG  if (yydebug)    {      short *yyssp1 = yyss - 1;      YYFPRINTF (stderr, "state stack now");      while (yyssp1 != yyssp)	YYFPRINTF (stderr, " %d", *++yyssp1);      YYFPRINTF (stderr, "\n");    }#endif  *++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);	  char *yymsg;	  int yyx, yycount;	  yycount = 0;	  /* Start YYX at -YYN if negative to avoid negative indexes in	     YYCHECK.  */	  for (yyx = yyn < 0 ? -yyn : 0;	       yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)	      yysize += yystrlen (yytname[yyx]) + 15, yycount++;	  yysize += yystrlen ("parse error, unexpected ") + 1;	  yysize += yystrlen (yytname[yytype]);	  yymsg = (char *) YYSTACK_ALLOC (yysize);	  if (yymsg != 0)	    {	      char *yyp = yystpcpy (yymsg, "parse error, unexpected ");	      yyp = yystpcpy (yyp, yytname[yytype]);	      if (yycount < 5)		{		  yycount = 0;		  for (yyx = yyn < 0 ? -yyn : 0;		       yyx < (int) (sizeof (yytname) / sizeof (char *));		       yyx++)		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)		      {			const char *yyq = ! yycount ? ", expecting " : " or ";			yyp = yystpcpy (yyp, yyq);			yyp = yystpcpy (yyp, yytname[yyx]);			yycount++;		      }		}	      yyerror (yymsg);	      YYSTACK_FREE (yymsg);	    }	  else	    yyerror ("parse error; also virtual memory exhausted");	}      else#endif /* YYERROR_VERBOSE */	yyerror ("parse error");    }  goto yyerrlab1;/*----------------------------------------------------.| yyerrlab1 -- error raised explicitly by an action.  |`----------------------------------------------------*/yyerrlab1:  if (yyerrstatus == 3)    {      /* If just tried and failed to reuse lookahead token after an	 error, discard it.  */      /* Return failure if at end of input.  */      if (yychar == YYEOF)        {	  /* Pop the error token.  */          YYPOPSTACK;	  /* Pop the rest of the stack.  */	  while (yyssp > yyss)	    {	      YYDPRINTF ((stderr, "Error: popping "));	      YYDSYMPRINT ((stderr,			    yystos[*yyssp],			    *yyvsp));	      YYDPRINTF ((stderr, "\n"));	      yydestruct (yystos[*yyssp], *yyvsp);	      YYPOPSTACK;	    }	  YYABORT;        }      YYDPRINTF ((stderr, "Discarding token %d (%s).\n",		  yychar, yytname[yychar1]));      yydestruct (yychar1, yylval);      yychar = YYEMPTY;    }  /* Else will try to reuse lookahead token after shifting the error     token.  */  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;      YYDPRINTF ((stderr, "Error: popping "));      YYDSYMPRINT ((stderr,		    yystos[*yyssp], *yyvsp));      YYDPRINTF ((stderr, "\n"));      yydestruct (yystos[yystate], *yyvsp);      yyvsp--;      yystate = *--yyssp;#if YYDEBUG      if (yydebug)	{	  short *yyssp1 = yyss - 1;	  YYFPRINTF (stderr, "Error: state stack now");	  while (yyssp1 != yyssp)	    YYFPRINTF (stderr, " %d", *++yyssp1);	  YYFPRINTF (stderr, "\n");	}#endif    }  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.  */#endifyyreturn:#ifndef yyoverflow  if (yyss != yyssa)    YYSTACK_FREE (yyss);#endif  return yyresult;}#line 602 "../config_gram.y"#if 0static char * vtypestr(int type){  switch (type) {    case V_NUM : return "NUMERIC";    case V_STR : return "STRING";    default:      return "<UNKNOWN>";  }}#endifstatic int assign_pin(int pinno, TOKEN * v){  int value;  value = v->value.number;  if ((value <= 0) || (value >= 18)) {    fprintf(stderr,             "%s: error at line %d of %s: pin must be in the "            "range 1-17\n",            progname, lineno, infile);    exit(1);  }  current_prog->pinno[pinno] = value;  return 0;}static int which_opcode(TOKEN * opcode){  switch (opcode->primary) {    case K_READ        : return AVR_OP_READ; break;    case K_WRITE       : return AVR_OP_WRITE; break;    case K_READ_LO     : return AVR_OP_READ_LO; break;    case K_READ_HI     : return AVR_OP_READ_HI; break;    case K_WRITE_LO    : return AVR_OP_WRITE_LO; break;    case K_WRITE_HI    : return AVR_OP_WRITE_HI; break;    case K_LOADPAGE_LO : return AVR_OP_LOADPAGE_LO; break;    case K_LOADPAGE_HI : return AVR_OP_LOADPAGE_HI; break;    case K_WRITEPAGE   : return AVR_OP_WRITEPAGE; break;    case K_CHIP_ERASE  : return AVR_OP_CHIP_ERASE; break;    case K_PGM_ENABLE  : return AVR_OP_PGM_ENABLE; break;    default :      fprintf(stderr,               "%s: error at %s:%d: invalid opcode\n",              progname, infile, lineno);      exit(1);      break;  }}static int parse_cmdbits(OPCODE * op){  TOKEN * t;  int bitno;  char ch;  char * e;  char * q;  int len;  char * s, *brkt;  bitno = 32;  while (lsize(string_list)) {    t = lrmv_n(string_list, 1);    s = strtok_r(t->value.string, " ", &brkt);    while (s != NULL) {      bitno--;      if (bitno < 0) {        fprintf(stderr,                 "%s: error at %s:%d: too many opcode bits for instruction\n",                progname, infile, lineno);        exit(1);      }      len = strlen(s);      if (len == 0) {        fprintf(stderr,                 "%s: error at %s:%d: invalid bit specifier \"\"\n",                progname, infile, lineno);        exit(1);      }      ch = s[0];      if (len == 1) {        switch (ch) {          case '1':            op->bit[bitno].type  = AVR_CMDBIT_VALUE;            op->bit[bitno].value = 1;            op->bit[bitno].bitno = bitno % 8;            break;          case '0':            op->bit[bitno].type  = AVR_CMDBIT_VALUE;            op->bit[bitno].value = 0;            op->bit[bitno].bitno = bitno % 8;            break;          case 'x':            op->bit[bitno].type  = AVR_CMDBIT_IGNORE;            op->bit[bitno].value = 0;            op->bit[bitno].bitno = bitno % 8;            break;          case 'a':            op->bit[bitno].type  = AVR_CMDBIT_ADDRESS;            op->bit[bitno].value = 0;            op->bit[bitno].bitno = 8*(bitno/8) + bitno % 8;            break;          case 'i':            op->bit[bitno].type  = AVR_CMDBIT_INPUT;            op->bit[bitno].value = 0;            op->bit[bitno].bitno = bitno % 8;            break;          case 'o':            op->bit[bitno].type  = AVR_CMDBIT_OUTPUT;            op->bit[bitno].value = 0;            op->bit[bitno].bitno = bitno % 8;            break;          default :            fprintf(stderr,                     "%s: error at %s:%d: invalid bit specifier '%c'\n",                    progname, infile, lineno, ch);            exit(1);            break;        }      }      else {        if (ch == 'a') {          q = &s[1];          op->bit[bitno].bitno = strtol(q, &e, 0);          if ((e == q)||(*e != 0)) {            fprintf(stderr,                     "%s: error at %s:%d: can't parse bit number from \"%s\"\n",                    progname, infile, lineno, q);            exit(1);          }          op->bit[bitno].type = AVR_CMDBIT_ADDRESS;          op->bit[bitno].value = 0;        }        else {          fprintf(stderr,                   "%s: error at %s:%d: invalid bit specifier \"%s\"\n",                  progname, infile, lineno, s);          exit(1);        }      }      s = strtok_r(NULL, " ", &brkt);    }    free_token(t);  }  /* while */  return 0;}

⌨️ 快捷键说明

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