From 1a126a58992f2cd613335aaed6d306ec45d4dfed Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 16 Nov 2004 08:16:10 +0000 Subject: (tORDINAL): New token. (day, relunit): Allow it for relative times. (relative_time_table): Use tORDINAL for ordinals. --- lib/getdate.y | 52 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/lib/getdate.y b/lib/getdate.y index 2f72f045a..8b8c11f4a 100644 --- a/lib/getdate.y +++ b/lib/getdate.y @@ -201,7 +201,8 @@ static int yyerror (parser_control *, char *); %token tAGO tDST %token tDAY tDAY_UNIT tDAYZONE tHOUR_UNIT tLOCAL_ZONE tMERIDIAN -%token tMINUTE_UNIT tMONTH tMONTH_UNIT tSEC_UNIT tYEAR_UNIT tZONE +%token tMINUTE_UNIT tMONTH tMONTH_UNIT tORDINAL +%token tSEC_UNIT tYEAR_UNIT tZONE %token tSNUMBER tUNUMBER %token tSDECIMAL_NUMBER tUDECIMAL_NUMBER @@ -317,6 +318,11 @@ day: pc->day_ordinal = 1; pc->day_number = $1; } + | tORDINAL tDAY + { + pc->day_ordinal = $1; + pc->day_number = $2; + } | tUNUMBER tDAY { pc->day_ordinal = $1.value; @@ -412,36 +418,48 @@ rel: ; relunit: - tUNUMBER tYEAR_UNIT + tORDINAL tYEAR_UNIT + { pc->rel_year += $1 * $2; } + | tUNUMBER tYEAR_UNIT { pc->rel_year += $1.value * $2; } | tSNUMBER tYEAR_UNIT { pc->rel_year += $1.value * $2; } | tYEAR_UNIT { pc->rel_year += $1; } + | tORDINAL tMONTH_UNIT + { pc->rel_month += $1 * $2; } | tUNUMBER tMONTH_UNIT { pc->rel_month += $1.value * $2; } | tSNUMBER tMONTH_UNIT { pc->rel_month += $1.value * $2; } | tMONTH_UNIT { pc->rel_month += $1; } + | tORDINAL tDAY_UNIT + { pc->rel_day += $1 * $2; } | tUNUMBER tDAY_UNIT { pc->rel_day += $1.value * $2; } | tSNUMBER tDAY_UNIT { pc->rel_day += $1.value * $2; } | tDAY_UNIT { pc->rel_day += $1; } + | tORDINAL tHOUR_UNIT + { pc->rel_hour += $1 * $2; } | tUNUMBER tHOUR_UNIT { pc->rel_hour += $1.value * $2; } | tSNUMBER tHOUR_UNIT { pc->rel_hour += $1.value * $2; } | tHOUR_UNIT { pc->rel_hour += $1; } + | tORDINAL tMINUTE_UNIT + { pc->rel_minutes += $1 * $2; } | tUNUMBER tMINUTE_UNIT { pc->rel_minutes += $1.value * $2; } | tSNUMBER tMINUTE_UNIT { pc->rel_minutes += $1.value * $2; } | tMINUTE_UNIT { pc->rel_minutes += $1; } + | tORDINAL tSEC_UNIT + { pc->rel_seconds += $1 * $2; } | tUNUMBER tSEC_UNIT { pc->rel_seconds += $1.value * $2; } | tSNUMBER tSEC_UNIT @@ -579,21 +597,21 @@ static table const relative_time_table[] = { "YESTERDAY",tDAY_UNIT, -1 }, { "TODAY", tDAY_UNIT, 0 }, { "NOW", tDAY_UNIT, 0 }, - { "LAST", tUNUMBER, -1 }, - { "THIS", tUNUMBER, 0 }, - { "NEXT", tUNUMBER, 1 }, - { "FIRST", tUNUMBER, 1 }, -/*{ "SECOND", tUNUMBER, 2 }, */ - { "THIRD", tUNUMBER, 3 }, - { "FOURTH", tUNUMBER, 4 }, - { "FIFTH", tUNUMBER, 5 }, - { "SIXTH", tUNUMBER, 6 }, - { "SEVENTH", tUNUMBER, 7 }, - { "EIGHTH", tUNUMBER, 8 }, - { "NINTH", tUNUMBER, 9 }, - { "TENTH", tUNUMBER, 10 }, - { "ELEVENTH", tUNUMBER, 11 }, - { "TWELFTH", tUNUMBER, 12 }, + { "LAST", tORDINAL, -1 }, + { "THIS", tORDINAL, 0 }, + { "NEXT", tORDINAL, 1 }, + { "FIRST", tORDINAL, 1 }, +/*{ "SECOND", tORDINAL, 2 }, */ + { "THIRD", tORDINAL, 3 }, + { "FOURTH", tORDINAL, 4 }, + { "FIFTH", tORDINAL, 5 }, + { "SIXTH", tORDINAL, 6 }, + { "SEVENTH", tORDINAL, 7 }, + { "EIGHTH", tORDINAL, 8 }, + { "NINTH", tORDINAL, 9 }, + { "TENTH", tORDINAL, 10 }, + { "ELEVENTH", tORDINAL, 11 }, + { "TWELFTH", tORDINAL, 12 }, { "AGO", tAGO, 1 }, { NULL, 0, 0 } }; -- cgit v1.2.3-54-g00ecf