📄 parsedate.c
字号:
# 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 look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead 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); YY_SYMBOL_PRINT ("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; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; 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 4: { ((struct date_yy *)parm)->yyHaveTime++; } break; case 5: { ((struct date_yy *)parm)->yyHaveZone++; } break; case 6: { ((struct date_yy *)parm)->yyHaveDate++; } break; case 7: { ((struct date_yy *)parm)->yyHaveDay++; } break; case 8: { ((struct date_yy *)parm)->yyHaveRel++; } break; case 10: { ((struct date_yy *)parm)->yyHour = (yyvsp[(1) - (2)].Number); ((struct date_yy *)parm)->yyMinutes = 0; ((struct date_yy *)parm)->yySeconds = 0; ((struct date_yy *)parm)->yyMeridian = (yyvsp[(2) - (2)].Meridian);#ifdef PHP_DEBUG_PARSE_DATE_PARSER printf("[U M]\n");#endif } break; case 11: { ((struct date_yy *)parm)->yyHour = (yyvsp[(1) - (4)].Number); ((struct date_yy *)parm)->yyMinutes = (yyvsp[(3) - (4)].Number); ((struct date_yy *)parm)->yySeconds = 0; ((struct date_yy *)parm)->yyMeridian = (yyvsp[(4) - (4)].Meridian);#ifdef PHP_DEBUG_PARSE_DATE_PARSER printf("[U:U M]\n");#endif } break; case 12: { ((struct date_yy *)parm)->yyHour = (yyvsp[(1) - (4)].Number); ((struct date_yy *)parm)->yyMinutes = (yyvsp[(3) - (4)].Number); ((struct date_yy *)parm)->yyMeridian = MER24;#ifdef PHP_DEBUG_PARSE_DATE_PARSER printf("[U:U rel]\n");#endif } break; case 13: { ((struct date_yy *)parm)->yyHour = (yyvsp[(1) - (4)].Number); ((struct date_yy *)parm)->yyMinutes = (yyvsp[(3) - (4)].Number); ((struct date_yy *)parm)->yyMeridian = MER24; ((struct date_yy *)parm)->yyHaveZone++; ((struct date_yy *)parm)->yyTimezone = ((yyvsp[(4) - (4)].Number) < 0 ? -(yyvsp[(4) - (4)].Number) % 100 + (-(yyvsp[(4) - (4)].Number) / 100) * 60 : - ((yyvsp[(4) - (4)].Number) % 100 + ((yyvsp[(4) - (4)].Number) / 100) * 60));#ifdef PHP_DEBUG_PARSE_DATE_PARSER printf("[U:U S]\n");#endif } break; case 14: { ((struct date_yy *)parm)->yyHour = (yyvsp[(1) - (6)].Number); ((struct date_yy *)parm)->yyMinutes = (yyvsp[(3) - (6)].Number); ((struct date_yy *)parm)->yySeconds = (yyvsp[(5) - (6)].Number); ((struct date_yy *)parm)->yyMeridian = (yyvsp[(6) - (6)].Meridian);#ifdef PHP_DEBUG_PARSE_DATE_PARSER printf("[U:U:U M]\n");#endif } break; case 15: { /* ISO 8601 format. hh:mm:ss[+-][0-9]{2}([0-9]{2})?. */ ((struct date_yy *)parm)->yyHour = (yyvsp[(1) - (6)].Number); ((struct date_yy *)parm)->yyMinutes = (yyvsp[(3) - (6)].Number); ((struct date_yy *)parm)->yySeconds = (yyvsp[(5) - (6)].Number);#ifdef PHP_DEBUG_PARSE_DATE_PARSER printf("[U:U:U rel]\n");#endif } break; case 16: { /* ISO 8601 format. hh:mm:ss[+-][0-9]{2}([0-9]{2})?. */ ((struct date_yy *)parm)->yyHour = (yyvsp[(1) - (6)].Number); ((struct date_yy *)parm)->yyMinutes = (yyvsp[(3) - (6)].Number); ((struct date_yy *)parm)->yySeconds = (yyvsp[(5) - (6)].Number); ((struct date_yy *)parm)->yyMeridian = MER24; ((struct date_yy *)parm)->yyHaveZone++; if ((yyvsp[(6) - (6)].Number) <= -100 || (yyvsp[(6) - (6)].Number) >= 100) { ((struct date_yy *)parm)->yyTimezone = -(yyvsp[(6) - (6)].Number) % 100 + (-(yyvsp[(6) - (6)].Number) / 100) * 60; } else { ((struct date_yy *)parm)->yyTimezone = -(yyvsp[(6) - (6)].Number) * 60; }#ifdef PHP_DEBUG_PARSE_DATE_PARSER printf("[U:U:U S]\n");#endif } break; case 17: { ((struct date_yy *)parm)->yyTimezone = (yyvsp[(1) - (1)].Number); } break; case 18: { ((struct date_yy *)parm)->yyTimezone = (yyvsp[(1) - (1)].Number) - 60; } break; case 19: { ((struct date_yy *)parm)->yyTimezone = (yyvsp[(1) - (2)].Number) - 60; } break; case 20: { ((struct date_yy *)parm)->yyDayOrdinal = 1; ((struct date_yy *)parm)->yyDayNumber = (yyvsp[(1) - (1)].Number); } break; case 21: { ((struct date_yy *)parm)->yyDayOrdinal = 1; ((struct date_yy *)parm)->yyDayNumber = (yyvsp[(1) - (2)].Number); } break; case 22: { ((struct date_yy *)parm)->yyDayOrdinal = (yyvsp[(1) - (2)].Number); ((struct date_yy *)parm)->yyDayNumber = (yyvsp[(2) - (2)].Number); } break; case 23: { ((struct date_yy *)parm)->yyMonth = (yyvsp[(1) - (3)].Number); ((struct date_yy *)parm)->yyDay = (yyvsp[(3) - (3)].Number); } break; case 24: { ((struct date_yy *)parm)->yyYear = (yyvsp[(8) - (8)].Number); ((struct date_yy *)parm)->yyMonth = (yyvsp[(1) - (8)].Number); ((struct date_yy *)parm)->yyDay = (yyvsp[(2) - (8)].Number); ((struct date_yy *)parm)->yyHour = (yyvsp[(3) - (8)].Number); ((struct date_yy *)parm)->yyMinutes = (yyvsp[(5) - (8)].Number); ((struct date_yy *)parm)->yySeconds = (yyvsp[(7) - (8)].Number); ((struct date_yy *)parm)->yyHaveTime = 1; } break; case 25: { /* Interpret as YYYY/MM/DD if $1 >= 1000, otherwise as MM/DD/YY. The goal in recognizing YYYY/MM/DD is solely to support legacy machine-generated dates like those in an RCS log listing. If you want portability, use the ISO 8601 format. */ if ((yyvsp[(1) - (5)].Number) >= 1000) { ((struct date_yy *)parm)->yyYear = (yyvsp[(1) - (5)].Number); ((struct date_yy *)parm)->yyMonth = (yyvsp[(3) - (5)].Number); ((struct date_yy *)parm)->yyDay = (yyvsp[(5) - (5)].Number); } else { ((struct date_yy *)parm)->yyMonth = (yyvsp[(1) - (5)].Number); ((struct date_yy *)parm)->yyDay = (yyvsp[(3) - (5)].Number); ((struct date_yy *)parm)->yyYear = (yyvsp[(5) - (5)].Number); } } break; case 26: { /* ISO 8601 format. yyyy-mm-dd. */ ((struct date_yy *)parm)->yyYear = (yyvsp[(1) - (3)].Number); ((struct date_yy *)parm)->yyMonth = -(yyvsp[(2) - (3)].Number); ((struct date_yy *)parm)->yyDay = -(yyvsp[(3) - (3)].Number); } break; case 27: { /* e.g. 17-JUN-1992. */ ((struct date_yy *)parm)->yyDay = (yyvsp[(1) - (3)].Number); ((struct date_yy *)parm)->yyMonth = (yyvsp[(2) - (3)].Number); ((struct date_yy *)parm)->yyYear = -(yyvsp[(3) - (3)].Number); } break; case 28: { ((struct date_yy *)parm)->yyMonth = (yyvsp[(1) - (3)].Number); ((struct date_yy *)parm)->yyDay = (yyvsp[(2) - (3)].Number); ((struct date_yy *)parm)->yyYear = (yyvsp[(3) - (3)].Number); } break; case 29: { ((struct date_yy *)parm)->yyMonth = (yyvsp[(1) - (2)].Number); if ((yyvsp[(2) - (2)].Number) > 1000) { ((struct date_yy *)parm)->yyYear = (yyvsp[(2) - (2)].Number); } else { ((struct date_yy *)parm)->yyDay = (yyvsp[(2) - (2)].Number); } } break; case 30: { ((struct date_yy *)parm)->yyMonth = (yyvsp[(1) - (4)].Number); ((struct date_yy *)parm)->yyDay = (yyvsp[(2) - (4)].Number); ((struct date_yy *)parm)->yyYear = (yyvsp[(4) - (4)].Number); } break; case 31: { ((struct date_yy *)parm)->yyMonth = (yyvsp[(2) - (2)].Number); if ((yyvsp[(1) - (2)].Number) > 1000) { ((struct date_yy *)parm)->yyYear = (yyvsp[(1) - (2)].Number); } else { ((struct date_yy *)parm)->yyDay = (yyvsp[(1) - (2)].Number); } } break; case 32: { ((struct date_yy *)parm)->yyMonth = (yyvsp[(2) - (3)].Number); ((struct date_yy *)parm)->yyDay = (yyvsp[(1) - (3)].Number); ((struct date_yy *)parm)->yyYear = (yyvsp[(3) - (3)].Number); } break; case 33: { ((struct date_yy *)parm)->yyRelSeconds = -((struct date_yy *)parm)->yyRelSeconds; ((struct date_yy *)parm)->yyRelMinutes = -((struct date_yy *)parm)->yyRelMinutes; ((struct date_yy *)parm)->yyRelHour = -((struct date_yy *)parm)->yyRelHour; ((struct date_yy *)parm)->yyRelDay = -((struct date_yy *)parm)->yyRelDay; ((struct date_yy *)parm)->yyRelMonth = -((struct date_yy *)parm)->yyRelMonth; ((struct date_yy *)parm)->yyRelYear = -((struct date_yy *)parm)->yyRelYear; } break; case 35: { ((struct date_yy *)parm)->yyRelYear += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number); } break; case 36: { ((struct date_yy *)parm)->yyRelYear += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number); } break; case 37: { ((struct date_yy *)parm)->yyRelYear += (yyvsp[(1) - (1)].Number); } break; case 38: { ((struct date_yy *)parm)->yyRelMonth += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number); } break; case 39: { ((struct date_yy *)parm)->yyRelMonth += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number); } break; case 40: { ((struct date_yy *)parm)->yyRelMonth += (yyvsp[(1) - (1)].Number); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -