Module Name: src
Committed By: dholland
Date: Thu Dec 31 09:12:58 UTC 2015
Modified Files:
src/lib/libutil: parsedate.y
Log Message:
Reformat grammar part according to my standards for yacc grammars.
To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/lib/libutil/parsedate.y
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libutil/parsedate.y
diff -u src/lib/libutil/parsedate.y:1.24 src/lib/libutil/parsedate.y:1.25
--- src/lib/libutil/parsedate.y:1.24 Tue Dec 8 12:51:04 2015
+++ src/lib/libutil/parsedate.y Thu Dec 31 09:12:57 2015
@@ -14,7 +14,7 @@
#include <sys/cdefs.h>
#ifdef __RCSID
-__RCSID("$NetBSD: parsedate.y,v 1.24 2015/12/08 12:51:04 christos Exp $");
+__RCSID("$NetBSD: parsedate.y,v 1.25 2015/12/31 09:12:57 dholland Exp $");
#endif
#include <stdio.h>
@@ -103,7 +103,10 @@ struct dateinfo {
%type <Number> tDAY tDAYZONE tMINUTE_UNIT tMONTH tMONTH_UNIT
%type <Number> tSEC_UNIT tSNUMBER tUNUMBER tZONE tTIME
-%type <Meridian> tMERIDIAN o_merid
+%type <Meridian> tMERIDIAN
+
+%type <Number> at_number
+%type <Meridian> o_merid
%parse-param { struct dateinfo *param }
%parse-param { const char **yyInput }
@@ -112,289 +115,250 @@ struct dateinfo {
%%
-spec : /* NULL */
+spec:
+ /* empty */
| spec item
- ;
+;
-item : time {
- param->yyHaveTime++;
- }
- | time_numericzone {
- param->yyHaveTime++;
- param->yyHaveZone++;
- }
- | zone {
- param->yyHaveZone++;
- }
- | date {
- param->yyHaveDate++;
- }
- | day {
- param->yyHaveDay++;
- }
- | rel {
- param->yyHaveRel++;
- }
- | cvsstamp {
- param->yyHaveTime++;
- param->yyHaveDate++;
- param->yyHaveZone++;
- }
- | epochdate {
- param->yyHaveTime++;
- param->yyHaveDate++;
- param->yyHaveZone++;
- }
+item:
+ time { param->yyHaveTime++; }
+ | time_numericzone { param->yyHaveTime++; param->yyHaveZone++; }
+ | zone { param->yyHaveZone++; }
+ | date { param->yyHaveDate++; }
+ | day { param->yyHaveDay++; }
+ | rel { param->yyHaveRel++; }
+ | cvsstamp { param->yyHaveTime++; param->yyHaveDate++;
+ param->yyHaveZone++; }
+ | epochdate { param->yyHaveTime++; param->yyHaveDate++;
+ param->yyHaveZone++; }
| number
- ;
-
-cvsstamp: tUNUMBER '.' tUNUMBER '.' tUNUMBER '.' tUNUMBER '.' tUNUMBER '.' tUNUMBER {
- param->yyYear = $1;
- if (param->yyYear < 100) param->yyYear += 1900;
- param->yyHaveFullYear = 1;
- param->yyMonth = $3;
- param->yyDay = $5;
- param->yyHour = $7;
- param->yyMinutes = $9;
- param->yySeconds = $11;
- param->yyDSTmode = DSToff;
- param->yyTimezone = 0;
- }
- ;
+;
-epochdate: AT_SIGN at_number {
- time_t when = $<Number>2;
- struct tm tmbuf;
- if (gmtime_r(&when, &tmbuf) != NULL) {
- param->yyYear = tmbuf.tm_year + 1900;
- param->yyMonth = tmbuf.tm_mon + 1;
- param->yyDay = tmbuf.tm_mday;
-
- param->yyHour = tmbuf.tm_hour;
- param->yyMinutes = tmbuf.tm_min;
- param->yySeconds = tmbuf.tm_sec;
- } else {
- param->yyYear = EPOCH;
- param->yyMonth = 1;
- param->yyDay = 1;
+cvsstamp:
+ tUNUMBER '.' tUNUMBER '.' tUNUMBER '.'
+ tUNUMBER '.' tUNUMBER '.' tUNUMBER {
+ param->yyYear = $1;
+ if (param->yyYear < 100) {
+ param->yyYear += 1900;
+ }
+ param->yyHaveFullYear = 1;
+ param->yyMonth = $3;
+ param->yyDay = $5;
+ param->yyHour = $7;
+ param->yyMinutes = $9;
+ param->yySeconds = $11;
+ param->yyDSTmode = DSToff;
+ param->yyTimezone = 0;
+ }
+;
+
+epochdate:
+ AT_SIGN at_number {
+ time_t when = $2;
+ struct tm tmbuf;
+
+ if (gmtime_r(&when, &tmbuf) != NULL) {
+ param->yyYear = tmbuf.tm_year + 1900;
+ param->yyMonth = tmbuf.tm_mon + 1;
+ param->yyDay = tmbuf.tm_mday;
+
+ param->yyHour = tmbuf.tm_hour;
+ param->yyMinutes = tmbuf.tm_min;
+ param->yySeconds = tmbuf.tm_sec;
+ } else {
+ param->yyYear = EPOCH;
+ param->yyMonth = 1;
+ param->yyDay = 1;
- param->yyHour = 0;
+ param->yyHour = 0;
+ param->yyMinutes = 0;
+ param->yySeconds = 0;
+ }
+ param->yyHaveFullYear = 1;
+ param->yyDSTmode = DSToff;
+ param->yyTimezone = 0;
+ }
+;
+
+at_number:
+ tUNUMBER
+ | tSNUMBER
+;
+
+time:
+ tUNUMBER tMERIDIAN {
+ param->yyHour = $1;
param->yyMinutes = 0;
param->yySeconds = 0;
- }
- param->yyHaveFullYear = 1;
- param->yyDSTmode = DSToff;
- param->yyTimezone = 0;
- }
- ;
-
-at_number : tUNUMBER | tSNUMBER ;
-
-time : tUNUMBER tMERIDIAN {
- param->yyHour = $1;
- param->yyMinutes = 0;
- param->yySeconds = 0;
- param->yyMeridian = $2;
- }
+ param->yyMeridian = $2;
+ }
| tUNUMBER ':' tUNUMBER o_merid {
- param->yyHour = $1;
- param->yyMinutes = $3;
- param->yySeconds = 0;
- param->yyMeridian = $4;
- }
+ param->yyHour = $1;
+ param->yyMinutes = $3;
+ param->yySeconds = 0;
+ param->yyMeridian = $4;
+ }
| tUNUMBER ':' tUNUMBER ':' tUNUMBER o_merid {
- param->yyHour = $1;
- param->yyMinutes = $3;
- param->yySeconds = $5;
- param->yyMeridian = $6;
- }
+ param->yyHour = $1;
+ param->yyMinutes = $3;
+ param->yySeconds = $5;
+ param->yyMeridian = $6;
+ }
| tUNUMBER ':' tUNUMBER ':' tUNUMBER '.' tUNUMBER {
- param->yyHour = $1;
- param->yyMinutes = $3;
- param->yySeconds = $5;
- param->yyMeridian = MER24;
-/* XXX: Do nothing with millis */
- }
+ param->yyHour = $1;
+ param->yyMinutes = $3;
+ param->yySeconds = $5;
+ param->yyMeridian = MER24;
+ /* XXX: Do nothing with millis */
+ }
| tTIME {
- param->yyHour = $1;
- param->yyMinutes = 0;
- param->yySeconds = 0;
- param->yyMeridian = MER24;
- /* Tues midnight --> Weds 00:00, midnight Tues -> Tues 00:00 */
- if ($1 == 0 && param->yyHaveDay)
- param->yyDayNumber++;
- }
- ;
-
-time_numericzone : tUNUMBER ':' tUNUMBER tSNUMBER {
- param->yyHour = $1;
- param->yyMinutes = $3;
- param->yyMeridian = MER24;
- param->yyDSTmode = DSToff;
- param->yyTimezone = - ($4 % 100 + ($4 / 100) * 60);
- }
+ param->yyHour = $1;
+ param->yyMinutes = 0;
+ param->yySeconds = 0;
+ param->yyMeridian = MER24;
+ /* Tues midnight --> Weds 00:00, midnight Tues -> Tues 00:00 */
+ if ($1 == 0 && param->yyHaveDay)
+ param->yyDayNumber++;
+ }
+;
+
+time_numericzone:
+ tUNUMBER ':' tUNUMBER tSNUMBER {
+ param->yyHour = $1;
+ param->yyMinutes = $3;
+ param->yyMeridian = MER24;
+ param->yyDSTmode = DSToff;
+ param->yyTimezone = - ($4 % 100 + ($4 / 100) * 60);
+ }
| tUNUMBER ':' tUNUMBER ':' tUNUMBER tSNUMBER {
- param->yyHour = $1;
- param->yyMinutes = $3;
- param->yySeconds = $5;
- param->yyMeridian = MER24;
- param->yyDSTmode = DSToff;
- param->yyTimezone = - ($6 % 100 + ($6 / 100) * 60);
- }
- ;
+ param->yyHour = $1;
+ param->yyMinutes = $3;
+ param->yySeconds = $5;
+ param->yyMeridian = MER24;
+ param->yyDSTmode = DSToff;
+ param->yyTimezone = - ($6 % 100 + ($6 / 100) * 60);
+ }
+;
+
+zone:
+ tZONE { param->yyTimezone = $1; param->yyDSTmode = DSToff; }
+ | tDAYZONE { param->yyTimezone = $1; param->yyDSTmode = DSTon; }
+ | tZONE tDST { param->yyTimezone = $1; param->yyDSTmode = DSTon; }
+;
+
+day:
+ tDAY { param->yyDayOrdinal = 1; param->yyDayNumber = $1; }
+ | tDAY ',' { param->yyDayOrdinal = 1; param->yyDayNumber = $1; }
+ | tUNUMBER tDAY { param->yyDayOrdinal = $1; param->yyDayNumber = $2; }
+;
-zone : tZONE {
- param->yyTimezone = $1;
- param->yyDSTmode = DSToff;
- }
- | tDAYZONE {
- param->yyTimezone = $1;
- param->yyDSTmode = DSTon;
- }
- |
- tZONE tDST {
- param->yyTimezone = $1;
- param->yyDSTmode = DSTon;
- }
- ;
-
-day : tDAY {
- param->yyDayOrdinal = 1;
- param->yyDayNumber = $1;
- }
- | tDAY ',' {
- param->yyDayOrdinal = 1;
- param->yyDayNumber = $1;
- }
- | tUNUMBER tDAY {
- param->yyDayOrdinal = $1;
- param->yyDayNumber = $2;
- }
- ;
-
-date : tUNUMBER '/' tUNUMBER {
- param->yyMonth = $1;
- param->yyDay = $3;
- }
- | tUNUMBER '/' tUNUMBER '/' tUNUMBER {
- if ($1 >= 100) {
- param->yyYear = $1;
- param->yyMonth = $3;
- param->yyDay = $5;
- } else {
+date:
+ tUNUMBER '/' tUNUMBER {
param->yyMonth = $1;
param->yyDay = $3;
- param->yyYear = $5;
- }
- }
+ }
+ | tUNUMBER '/' tUNUMBER '/' tUNUMBER {
+ if ($1 >= 100) {
+ param->yyYear = $1;
+ param->yyMonth = $3;
+ param->yyDay = $5;
+ } else {
+ param->yyMonth = $1;
+ param->yyDay = $3;
+ param->yyYear = $5;
+ }
+ }
| tUNUMBER tSNUMBER tSNUMBER {
- /* ISO 8601 format. yyyy-mm-dd. */
- param->yyYear = $1;
- param->yyHaveFullYear = 1;
- param->yyMonth = -$2;
- param->yyDay = -$3;
- }
+ /* ISO 8601 format. yyyy-mm-dd. */
+ param->yyYear = $1;
+ param->yyHaveFullYear = 1;
+ param->yyMonth = -$2;
+ param->yyDay = -$3;
+ }
| tUNUMBER tMONTH tSNUMBER {
- /* e.g. 17-JUN-1992. */
- param->yyDay = $1;
- param->yyMonth = $2;
- param->yyYear = -$3;
- }
+ /* e.g. 17-JUN-1992. */
+ param->yyDay = $1;
+ param->yyMonth = $2;
+ param->yyYear = -$3;
+ }
| tMONTH tUNUMBER {
- param->yyMonth = $1;
- param->yyDay = $2;
- }
+ param->yyMonth = $1;
+ param->yyDay = $2;
+ }
| tMONTH tUNUMBER ',' tUNUMBER {
- param->yyMonth = $1;
- param->yyDay = $2;
- param->yyYear = $4;
- }
+ param->yyMonth = $1;
+ param->yyDay = $2;
+ param->yyYear = $4;
+ }
| tUNUMBER tMONTH {
- param->yyMonth = $2;
- param->yyDay = $1;
- }
+ param->yyMonth = $2;
+ param->yyDay = $1;
+ }
| tUNUMBER tMONTH tUNUMBER {
- param->yyMonth = $2;
- if ($1 < 35) {
- param->yyDay = $1;
- param->yyYear = $3;
- } else {
- param->yyDay = $3;
- param->yyYear = $1;
- }
- }
- ;
-
-rel : relunit tAGO {
- param->yyRelSeconds = -param->yyRelSeconds;
- param->yyRelMonth = -param->yyRelMonth;
- }
- | relunit
- ;
-
-relunit : tUNUMBER tMINUTE_UNIT {
- param->yyRelSeconds += $1 * $2 * 60L;
- }
- | tSNUMBER tMINUTE_UNIT {
- param->yyRelSeconds += $1 * $2 * 60L;
- }
- | tMINUTE_UNIT {
- param->yyRelSeconds += $1 * 60L;
- }
- | tSNUMBER tSEC_UNIT {
- param->yyRelSeconds += $1;
- }
- | tUNUMBER tSEC_UNIT {
- param->yyRelSeconds += $1;
- }
- | tSEC_UNIT {
- param->yyRelSeconds++;
- }
- | tSNUMBER tMONTH_UNIT {
- param->yyRelMonth += $1 * $2;
- }
- | tUNUMBER tMONTH_UNIT {
- param->yyRelMonth += $1 * $2;
- }
- | tMONTH_UNIT {
- param->yyRelMonth += $1;
- }
- ;
+ param->yyMonth = $2;
+ if ($1 < 35) {
+ param->yyDay = $1;
+ param->yyYear = $3;
+ } else {
+ param->yyDay = $3;
+ param->yyYear = $1;
+ }
+ }
+;
-number : tUNUMBER {
- if (param->yyHaveTime && param->yyHaveDate && !param->yyHaveRel)
- param->yyYear = $1;
- else {
- if($1>10000) {
- param->yyHaveDate++;
- param->yyDay= ($1)%100;
- param->yyMonth= ($1/100)%100;
- param->yyYear = $1/10000;
+rel:
+ relunit
+ | relunit tAGO {
+ param->yyRelSeconds = -param->yyRelSeconds;
+ param->yyRelMonth = -param->yyRelMonth;
+ }
+;
+
+relunit:
+ tUNUMBER tMINUTE_UNIT { param->yyRelSeconds += $1 * $2 * 60L; }
+ | tSNUMBER tMINUTE_UNIT { param->yyRelSeconds += $1 * $2 * 60L; }
+ | tMINUTE_UNIT { param->yyRelSeconds += $1 * 60L; }
+ | tSNUMBER tSEC_UNIT { param->yyRelSeconds += $1; }
+ | tUNUMBER tSEC_UNIT { param->yyRelSeconds += $1; }
+ | tSEC_UNIT { param->yyRelSeconds++; }
+ | tSNUMBER tMONTH_UNIT { param->yyRelMonth += $1 * $2; }
+ | tUNUMBER tMONTH_UNIT { param->yyRelMonth += $1 * $2; }
+ | tMONTH_UNIT { param->yyRelMonth += $1; }
+;
+
+number:
+ tUNUMBER {
+ if (param->yyHaveTime && param->yyHaveDate &&
+ !param->yyHaveRel) {
+ param->yyYear = $1;
+ } else {
+ if ($1 > 10000) {
+ param->yyHaveDate++;
+ param->yyDay = ($1)%100;
+ param->yyMonth = ($1/100)%100;
+ param->yyYear = $1/10000;
+ }
+ else {
+ param->yyHaveTime++;
+ if ($1 < 100) {
+ param->yyHour = $1;
+ param->yyMinutes = 0;
+ }
+ else {
+ param->yyHour = $1 / 100;
+ param->yyMinutes = $1 % 100;
+ }
+ param->yySeconds = 0;
+ param->yyMeridian = MER24;
+ }
}
- else {
- param->yyHaveTime++;
- if ($1 < 100) {
- param->yyHour = $1;
- param->yyMinutes = 0;
- }
- else {
- param->yyHour = $1 / 100;
- param->yyMinutes = $1 % 100;
- }
- param->yySeconds = 0;
- param->yyMeridian = MER24;
- }
- }
}
- ;
+;
-o_merid : /* NULL */ {
- $$ = MER24;
- }
- | tMERIDIAN {
- $$ = $1;
- }
- ;
+o_merid:
+ /* empty */ { $$ = MER24; }
+ | tMERIDIAN { $$ = $1; }
+;
%%