Mercurial > hg > octave-nkf > gnulib-hg
changeset 5795:73e3d526838b
(zone): Allow relunit_snumber after tZONE, so
that "UTC +1 second" continues to work. Problem reported
by Dmitry V. Levin.
(relunit_snumber): New rule.
(relunit): Use it.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Wed, 13 Apr 2005 18:43:31 +0000 |
parents | 06cda1ed2c7f |
children | a19a92973924 |
files | lib/getdate.y |
diffstat | 1 files changed, 20 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/getdate.y +++ b/lib/getdate.y @@ -202,8 +202,8 @@ %parse-param { parser_control *pc } %lex-param { parser_control *pc } -/* This grammar has 14 shift/reduce conflicts. */ -%expect 14 +/* This grammar has 20 shift/reduce conflicts. */ +%expect 20 %union { @@ -321,6 +321,8 @@ zone: tZONE { pc->time_zone = $1; } + | tZONE relunit_snumber + { pc->time_zone = $1; pc->rels_seen = true; } | tZONE tSNUMBER o_colon_minutes { pc->time_zone = $1 + time_zone_hhmm ($2, $3); } | tDAYZONE @@ -444,54 +446,58 @@ { 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 - { pc->rel_seconds += $1.value * $2; } | tSDECIMAL_NUMBER tSEC_UNIT { pc->rel_seconds += $1.tv_sec * $2; pc->rel_ns += $1.tv_nsec * $2; } | tUDECIMAL_NUMBER tSEC_UNIT { pc->rel_seconds += $1.tv_sec * $2; pc->rel_ns += $1.tv_nsec * $2; } | tSEC_UNIT { pc->rel_seconds += $1; } + | relunit_snumber + ; + +relunit_snumber: + tSNUMBER tYEAR_UNIT + { pc->rel_year += $1.value * $2; } + | tSNUMBER tMONTH_UNIT + { pc->rel_month += $1.value * $2; } + | tSNUMBER tDAY_UNIT + { pc->rel_day += $1.value * $2; } + | tSNUMBER tHOUR_UNIT + { pc->rel_hour += $1.value * $2; } + | tSNUMBER tMINUTE_UNIT + { pc->rel_minutes += $1.value * $2; } + | tSNUMBER tSEC_UNIT + { pc->rel_seconds += $1.value * $2; } ; seconds: signed_seconds | unsigned_seconds;