📄 config_gram.c
字号:
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 (yyssp >= yyss + yystacksize - 1) 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 token in external form. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } /* Convert token to internal form (in yychar1) for indexing tables with. */ if (yychar <= 0) /* This means end of input. */ { yychar1 = 0; yychar = YYEOF; /* Don't call YYLEX any more. */ YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yychar1 = YYTRANSLATE (yychar); /* We have to keep this `#if YYDEBUG', since we use variables which are defined only if `YYDEBUG' is set. */ YYDPRINTF ((stderr, "Next token is ")); YYDSYMPRINT ((stderr, yychar1, yylval)); YYDPRINTF ((stderr, "\n")); } /* If the proper action on seeing token YYCHAR1 is to reduce or to detect an error, take that action. */ yyn += yychar1; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1) 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 %d (%s), ", yychar, yytname[yychar1])); /* 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];#if YYDEBUG /* We have to keep this `#if YYDEBUG', since we use variables which are defined only if `YYDEBUG' is set. */ if (yydebug) { int yyi; YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", yyn - 1, yyrline[yyn]); /* Print the symbols being reduced, and their result. */ for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++) YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]); YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]); }#endif switch (yyn) { case 8:#line 138 "../config_gram.y" { strncpy(default_programmer, yyvsp[-1]->value.string, MAX_STR_CONST); default_programmer[MAX_STR_CONST-1] = 0; free_token(yyvsp[-1]); } break; case 9:#line 144 "../config_gram.y" { strncpy(default_parallel, yyvsp[-1]->value.string, PATH_MAX); default_parallel[PATH_MAX-1] = 0; free_token(yyvsp[-1]); } break; case 10:#line 150 "../config_gram.y" { strncpy(default_serial, yyvsp[-1]->value.string, PATH_MAX); default_serial[PATH_MAX-1] = 0; free_token(yyvsp[-1]); } break; case 11:#line 160 "../config_gram.y" { current_prog = pgm_new(); strcpy(current_prog->config_file, infile); current_prog->lineno = lineno; } break; case 12:#line 165 "../config_gram.y" { if (lsize(current_prog->id) == 0) { fprintf(stderr, "%s: error at %s:%d: required parameter id not specified\n", progname, infile, lineno); exit(1); } if (current_prog->type[0] == 0) { fprintf(stderr, "%s: error at %s:%d: programmer type not specified\n", progname, infile, lineno); exit(1); } PUSH(programmers, current_prog); current_prog = NULL; } break; case 13:#line 185 "../config_gram.y" { current_part = avr_new_part(); strcpy(current_part->config_file, infile); current_part->lineno = lineno; } break; case 14:#line 191 "../config_gram.y" { LNODEID ln; AVRMEM * m; if (current_part->id[0] == 0) { fprintf(stderr, "%s: error at %s:%d: required parameter id not specified\n", progname, infile, lineno); exit(1); } /* * perform some sanity checking, and compute the number of bits * to shift a page for constructing the page address for * page-addressed memories. */ for (ln=lfirst(current_part->mem); ln; ln=lnext(ln)) { m = ldata(ln); if (m->paged) { if (m->page_size == 0) { fprintf(stderr, "%s: error at %s:%d: must specify page_size for paged " "memory\n", progname, infile, lineno); exit(1); } if (m->num_pages == 0) { fprintf(stderr, "%s: error at %s:%d: must specify num_pages for paged " "memory\n", progname, infile, lineno); exit(1); } if (m->size != m->page_size * m->num_pages) { fprintf(stderr, "%s: error at %s:%d: page size (%u) * num_pages (%u) = " "%u does not match memory size (%u)\n", progname, infile, lineno, m->page_size, m->num_pages, m->page_size * m->num_pages, m->size); exit(1); } } } PUSH(part_list, current_part); current_part = NULL; } break; case 15:#line 246 "../config_gram.y" { ladd(string_list, yyvsp[0]); } break; case 16:#line 247 "../config_gram.y" { ladd(string_list, yyvsp[0]); } break; case 17:#line 252 "../config_gram.y" { ladd(number_list, yyvsp[0]); } break; case 18:#line 253 "../config_gram.y" { ladd(number_list, yyvsp[0]); } break; case 21:#line 264 "../config_gram.y" { { TOKEN * t; while (lsize(string_list)) { t = lrmv_n(string_list, 1); ladd(current_prog->id, dup_string(t->value.string)); free_token(t); } } } break; case 22:#line 275 "../config_gram.y" { { par_initpgm(current_prog); } } break; case 23:#line 281 "../config_gram.y" { { stk500_initpgm(current_prog); } } break; case 24:#line 287 "../config_gram.y" { strncpy(current_prog->desc, yyvsp[0]->value.string, PGM_DESCLEN); current_prog->desc[PGM_DESCLEN-1] = 0; free_token(yyvsp[0]); } break; case 25:#line 293 "../config_gram.y" { { TOKEN * t; int pin; current_prog->pinno[PPI_AVR_VCC] = 0; while (lsize(number_list)) { t = lrmv_n(number_list, 1); pin = t->value.number; if ((pin < 2) || (pin > 9)) { fprintf(stderr, "%s: error at line %d of %s: VCC must be one or more " "pins from the range 2-9\n", progname, lineno, infile); exit(1); } current_prog->pinno[PPI_AVR_VCC] |= (1 << (pin-2)); free_token(t); } } } break; case 26:#line 318 "../config_gram.y" { { TOKEN * t; int pin; current_prog->pinno[PPI_AVR_BUFF] = 0; while (lsize(number_list)) { t = lrmv_n(number_list, 1); pin = t->value.number; if ((pin < 2) || (pin > 9)) { fprintf(stderr, "%s: error at line %d of %s: BUFF must be one or more " "pins from the range 2-9\n", progname, lineno, infile); exit(1); } current_prog->pinno[PPI_AVR_BUFF] |= (1 << (pin-2)); free_token(t); } } } break; case 27:#line 343 "../config_gram.y" { free_token(yyvsp[-2]); assign_pin(PIN_AVR_RESET, yyvsp[0]); } break; case 28:#line 345 "../config_gram.y" { free_token(yyvsp[-2]); assign_pin(PIN_AVR_SCK, yyvsp[0]); } break; case 29:#line 347 "../config_gram.y" { assign_pin(PIN_AVR_MOSI, yyvsp[0]); } break; case 30:#line 348 "../config_gram.y" { assign_pin(PIN_AVR_MISO, yyvsp[0]); } break; case 31:#line 349 "../config_gram.y" { assign_pin(PIN_LED_ERR, yyvsp[0]); } break; case 32:#line 350 "../config_gram.y" { assign_pin(PIN_LED_RDY, yyvsp[0]); } break; case 33:#line 351 "../config_gram.y" { assign_pin(PIN_LED_PGM, yyvsp[0]); } break; case 34:#line 352 "../config_gram.y" { assign_pin(PIN_LED_VFY, yyvsp[0]); } break; case 54:#line 391 "../config_gram.y" { strncpy(current_part->id, yyvsp[0]->value.string, AVR_IDLEN); current_part->id[AVR_IDLEN-1] = 0; free_token(yyvsp[0]); } break; case 55:#line 398 "../config_gram.y" { strncpy(current_part->desc, yyvsp[0]->value.string, AVR_DESCLEN); current_part->desc[AVR_DESCLEN-1] = 0; free_token(yyvsp[0]); } break; case 56:#line 404 "../config_gram.y" { { current_part->devicecode = yyvsp[0]->value.number; free_token(yyvsp[0]); } } break; case 57:#line 412 "../config_gram.y" { current_part->chip_erase_delay = yyvsp[0]->value.number; free_token(yyvsp[0]); } break; case 58:#line 418 "../config_gram.y" { current_part->pagel = yyvsp[0]->value.number; free_token(yyvsp[0]); } break; case 59:#line 424 "../config_gram.y" { current_part->bs2 = yyvsp[0]->value.number; free_token(yyvsp[0]); } break; case 60:#line 430 "../config_gram.y" { if (yyvsp[0]->primary == K_DEDICATED) current_part->reset_disposition = RESET_DEDICATED; else if (yyvsp[0]->primary == K_IO) current_part->reset_disposition = RESET_IO; free_tokens(2, yyvsp[-2], yyvsp[0]); } break; case 61:#line 440 "../config_gram.y" { if (yyvsp[0]->primary == K_YES) current_part->flags |= AVRPART_SERIALOK; else if (yyvsp[0]->primary == K_NO) current_part->flags &= ~AVRPART_SERIALOK; free_token(yyvsp[0]); } break; case 62:#line 450 "../config_gram.y" { if (yyvsp[0]->primary == K_YES) { current_part->flags |= AVRPART_PARALLELOK; current_part->flags &= ~AVRPART_PSEUDOPARALLEL; } else if (yyvsp[0]->primary == K_NO) { current_part->flags &= ~AVRPART_PARALLELOK; current_part->flags &= ~AVRPART_PSEUDOPARALLEL; } else if (yyvsp[0]->primary == K_PSEUDO) { current_part->flags |= AVRPART_PARALLELOK; current_part->flags |= AVRPART_PSEUDOPARALLEL; } free_token(yyvsp[0]); } break; case 63:#line 469 "../config_gram.y" { switch (yyvsp[0]->primary) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -