config_gram.c
来自「这是一个非常有价值的参考代码」· C语言 代码 · 共 2,133 行 · 第 1/5 页
C
2,133 行
#if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Stack size increased to %d\n", yystacksize);#endif if (yyssp >= yyss + yystacksize - 1) YYABORT; }#if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Entering state %d\n", yystate);#endif goto 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 == YYFLAG) 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) {#if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Reading a token: ");#endif 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 */#if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Now at end of input.\n");#endif } else { yychar1 = YYTRANSLATE(yychar);#if YYDEBUG != 0 if (yydebug) { fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); /* Give the individual parser a way to print the precise meaning of a token, for further debugging info. */#ifdef YYPRINT YYPRINT (stderr, yychar, yylval);#endif fprintf (stderr, ")\n"); }#endif } yyn += yychar1; if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) goto yydefault; yyn = yytable[yyn]; /* yyn is what to do for this token type in this state. Negative => reduce, -yyn is rule number. Positive => shift, yyn is new state. New state is final state => don't bother to shift, just return success. 0, or most negative number => error. */ if (yyn < 0) { if (yyn == YYFLAG) goto yyerrlab; yyn = -yyn; goto yyreduce; } else if (yyn == 0) goto yyerrlab; if (yyn == YYFINAL) YYACCEPT; /* Shift the lookahead token. */#if YYDEBUG != 0 if (yydebug) fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);#endif /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; *++yyvsp = yylval;#ifdef YYLSP_NEEDED *++yylsp = yylloc;#endif /* count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; yystate = yyn; goto yynewstate;/* Do the default action for the current state. */yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab;/* Do a reduction. yyn is the number of a rule to reduce with. */yyreduce: yylen = yyr2[yyn]; if (yylen > 0) yyval = yyvsp[1-yylen]; /* implement default value of the action */#if YYDEBUG != 0 if (yydebug) { int i; fprintf (stderr, "Reducing via rule %d (line %d), ", yyn, yyrline[yyn]); /* Print the symbols being reduced, and their result. */ for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) fprintf (stderr, "%s ", yytname[yyrhs[i]]); fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); }#endif switch (yyn) {case 7:#line 188 "../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 8:#line 194 "../config_gram.y"{ strncpy(default_parallel, yyvsp[-1]->value.string, PATH_MAX); default_parallel[PATH_MAX-1] = 0; free_token(yyvsp[-1]); ; break;}case 9:#line 200 "../config_gram.y"{ strncpy(default_serial, yyvsp[-1]->value.string, PATH_MAX); default_serial[PATH_MAX-1] = 0; free_token(yyvsp[-1]); ; break;}case 10:#line 210 "../config_gram.y"{ current_prog = pgm_new(); strcpy(current_prog->config_file, infile); current_prog->lineno = lineno; ; break;}case 11:#line 215 "../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 12:#line 235 "../config_gram.y"{ current_part = avr_new_part(); strcpy(current_part->config_file, infile); current_part->lineno = lineno; ; break;}case 13:#line 241 "../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 14:#line 296 "../config_gram.y"{ ladd(string_list, yyvsp[0]); ; break;}case 15:#line 297 "../config_gram.y"{ ladd(string_list, yyvsp[0]); ; break;}case 16:#line 302 "../config_gram.y"{ ladd(number_list, yyvsp[0]); ; break;}case 17:#line 303 "../config_gram.y"{ ladd(number_list, yyvsp[0]); ; break;}case 20:#line 314 "../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 21:#line 325 "../config_gram.y"{ { par_initpgm(current_prog); } ; break;}case 22:#line 331 "../config_gram.y"{ { serbb_initpgm(current_prog); } ; break;}case 23:#line 337 "../config_gram.y"{ { stk500_initpgm(current_prog); } ; break;}case 24:#line 343 "../config_gram.y"{ { stk500v2_initpgm(current_prog); } ; break;}case 25:#line 349 "../config_gram.y"{ { avr910_initpgm(current_prog); } ; break;}case 26:#line 355 "../config_gram.y"{ { butterfly_initpgm(current_prog); } ; break;}case 27:#line 361 "../config_gram.y"{ { jtagmkII_initpgm(current_prog); } ; break;}case 28:#line 367 "../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 29:#line 373 "../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 30:#line 398 "../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 31:#line 423 "../config_gram.y"{ { current_prog->baudrate = yyvsp[0]->value.number; } ; break;}case 32:#line 429 "../config_gram.y"{ free_token(yyvsp[-2]); assign_pin(PIN_AVR_RESET, yyvsp[0], 0); ; break;}case 33:#line 431 "../config_gram.y"{ free_token(yyvsp[-2]); assign_pin(PIN_AVR_SCK, yyvsp[0], 0); ; break;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?