DATE [ VLIB_DATE:z { } ] VLIB_DATE [ ; Special words and phrases VSUB_RELATIVE_DATE:r {return([])} ; Sunday through Saturday ( ?( [ this the ] ?coming ) VSUB_DAY_OF_WEEK:d ) {return([])} ( VSUB_LAST_THIS_NEXT_WEEK_FROM:t VSUB_DAY_OF_WEEK:d ) {return([ ])} ; Days this month ( ?the VSUB_DAY_OF_MONTH_ORDINAL:d ?( ?day of [ the this ] month ) ) {return([])} ( VSUB_DAY_OF_WEEK:d the VSUB_DAY_OF_MONTH_ORDINAL:n ) {return([ ])} ( VSUB_RELATIVE_DATE_SHORT:m the VSUB_DAY_OF_MONTH_ORDINAL:n ) {return([ ])} ( ?the VSUB_BEGINNING_END:m of [ the this ] month ) {return([])} ; Days of an unnamed but specific month ( ?the VSUB_DAY_OF_MONTH_ORDINAL:d ?day ?of VSUB_LAST_THIS_NEXT:t month ) {return([ ])} ( ?the last ?day of VSUB_MONTH:m ) {return([ ])} ; Month and day VSUB_DAY_AND_MONTH:v {return($v)} ; Month and day with relative day ( VSUB_RELATIVE_DATE_SHORT:m VSUB_DAY_AND_MONTH:v ) {return([ ])} ; Month and day with weekday ( VSUB_DAY_OF_WEEK:d VSUB_DAY_AND_MONTH:v ) {return([ ])} ; Month, day and year ( VSUB_DAY_AND_MONTH:v ?of VSUB_YEAR:y ) {return([ ])} ; Month, day, and year with weekday ( VSUB_DAY_OF_WEEK:d VSUB_DAY_AND_MONTH:v ?of VSUB_YEAR:y ) {return([ ])} ] VSUB_RELATIVE_DATE [ VSUB_RELATIVE_DATE_SHORT:d {return($d)} ( ?the day after tomorrow ) {return("day_after_tomorrow")} ( ?the day before yesterday ) {return("day_before_yesterday")} ] VSUB_RELATIVE_DATE_SHORT [ today {return("today")} tomorrow {return("tomorrow")} yesterday {return("yesterday")} ] VSUB_DAY_OF_WEEK [ sunday {return("sunday")} monday {return("monday")} tuesday {return("tuesday")} wednesday {return("wednesday")} thursday {return("thursday")} friday {return("friday")} saturday {return("saturday")} ] VSUB_DAY_AND_MONTH [ ; Month plus day ( VSUB_MONTH:m [ ( ?the VSUB_DAY_OF_MONTH_ORDINAL:d ) ; "january the fifteenth" VSUB_DAY_OF_MONTH_CARDINAL:d ; "january fifteen" ] ) {return([ ])} ; Day plus month ( ?the VSUB_DAY_OF_MONTH_ORDINAL:d of VSUB_MONTH:m ) {return([ ])} ] VSUB_MONTH [ january {return("january")} february {return("february")} march {return("march")} april {return("april")} may {return("may")} june {return("june")} july {return("july")} august {return("august")} september {return("september")} october {return("october")} november {return("november")} december {return("december")} ] VSUB_DAY_OF_MONTH_CARDINAL [ VSUB_DIGIT_ONE_THRU_NINE:n {return($n)} ten {return(10)} VSUB_TEEN:n {return($n)} twenty {return(20)} ( twenty VSUB_DIGIT_ONE_THRU_NINE:n ) {return(add(20 $n))} thirty {return(30)} ( thirty one ) {return(31)} ] VSUB_DAY_OF_MONTH_ORDINAL [ VSUB_FIRST_THRU_NINTH_DATE:n {return($n)} tenth {return(10)} eleventh {return(11)} twelfth {return(12)} thirteenth {return(13)} fourteenth {return(14)} fifteenth {return(15)} sixteenth {return(16)} seventeenth {return(17)} eighteenth {return(18)} nineteenth {return(19)} twentieth {return(20)} ( twenty VSUB_FIRST_THRU_NINTH_DATE:n ) {return(add(20 $n))} thirtieth {return(30)} ( thirty first ) {return(31)} ] VSUB_FIRST_THRU_NINTH_DATE [ first {return(1)} second {return(2)} third {return(3)} fourth {return(4)} fifth {return(5)} sixth {return(6)} seventh {return(7)} eighth {return(8)} ninth {return(9)} ] VSUB_YEAR [ ; 1900 ( nineteen hundred ) {return(1900)} ; 1901-1909 ( nineteen [ ( hundred ?and ) oh ] VSUB_DIGIT_ONE_THRU_NINE:n ) {return(add(1900 $n))} ; 1910 ( nineteen ?( hundred ?and ) ten ) {return(1910)} ; 1911-1919 ( nineteen ?( hundred ?and ) VSUB_TEEN:t ) {return(add(1900 $t))} ; 1920-1990, even 10's only ( nineteen ?( hundred ?and ) VSUB_DECADE:t ) {return(add(1900 $t))} ; 1921-1999, except even 10's ( nineteen ?( hundred ?and ) VSUB_DECADE:t VSUB_DIGIT_ONE_THRU_NINE:u ) {return(add(1900 add($t $u)))} ; 2000 ( ?( the year ) two thousand ) {return(2000)} ; 2001-2009 ( [ ( twenty oh ) ( two thousand ?and ) ] VSUB_DIGIT_ONE_THRU_NINE:n ) {return(add(2000 $n))} ; 2010 ( [ twenty ( two thousand ?and ) ] ten ) {return(2010)} ; 2011-2019 ( [ twenty ( two thousand ?and ) ] VSUB_TEEN:t ) {return(add(2000 $t))} ; 2020-2090, even 10's only ( [ twenty ( two thousand ?and ) ] VSUB_DECADE:t ) {return(add(2000 $t))} ; 2021-2099, except even 10's ( [ twenty ( two thousand ?and ) ] VSUB_DECADE:t VSUB_DIGIT_ONE_THRU_NINE:u ) {return(add(2000 add($t $u)))} ; 00 ( double zero ) {return(2000)} ; 01-09 ( [ oh zero ] VSUB_DIGIT:n ) {return(add(2000 $n))} ; 10 ten {return(2010)} ; 11-19 VSUB_TEEN:n {return(add(2000 $n))} ; 20 and 30 VSUB_DATE_DECADE_TWENTY_THRU_THIRTY:n {return(add(2000 $n))} ; 21-39, except even 10's ( VSUB_DATE_DECADE_TWENTY_THRU_THIRTY:t VSUB_DIGIT_ONE_THRU_NINE:u ) {return(add(2000 add($t $u)))} ; 40-90, even 10's only VSUB_DATE_DECADE_FORTY_THRU_NINETY:n {return(add(1900 $n))} ; 41-99, except even 10's ( VSUB_DATE_DECADE_FORTY_THRU_NINETY:t VSUB_DIGIT_ONE_THRU_NINE:u ) {return(add(1900 add($t $u)))} ] VSUB_DATE_DECADE_TWENTY_THRU_THIRTY [ twenty {return(20)} thirty {return(30)} ] VSUB_DATE_DECADE_FORTY_THRU_NINETY [ forty {return(40)} fifty {return(50)} sixty {return(60)} seventy {return(70)} eighty {return(80)} ninety {return(90)} ] VSUB_LAST_THIS_NEXT_WEEK_FROM [ VSUB_LAST_THIS_NEXT:r {return($r)} ( [ one a ] week from ) {return("a_week_from")} ] VSUB_LAST_THIS_NEXT [ last {return("last")} this next {return("next")} ] VSUB_BEGINNING_END [ beginning {return("beginning_of_month")} [ end ( last ?day ) ] {return("end_of_month")} ] VSUB_DIGIT_TWO_THRU_NINE [ two {return(2)} three {return(3)} four {return(4)} five {return(5)} six {return(6)} seven {return(7)} eight {return(8)} nine {return(9)} ] VSUB_DIGIT_ONE_THRU_NINE [ one {return(1)} VSUB_DIGIT_TWO_THRU_NINE:n {return($n)} ] VSUB_DIGIT [ [ zero oh ] {return(0)} VSUB_DIGIT_ONE_THRU_NINE:n {return($n)} ] ; Single-digit grammars that return string values VSUB_DIGIT_TWO_THRU_NINE_STRING [ two {return("2")} three {return("3")} four {return("4")} five {return("5")} six {return("6")} seven {return("7")} eight {return("8")} nine {return("9")} ] VSUB_DIGIT_ONE_THRU_NINE_STRING [ one {return("1")} VSUB_DIGIT_TWO_THRU_NINE_STRING:n {return($n)} ] VSUB_DIGIT_STRING [ [ zero oh ] {return("0")} VSUB_DIGIT_ONE_THRU_NINE_STRING:n {return($n)} ] VSUB_TEEN_STRING [ eleven {return("11")} twelve {return("12")} thirteen {return("13")} fourteen {return("14")} fifteen {return("15")} sixteen {return("16")} seventeen {return("17")} eighteen {return("18")} nineteen {return("19")} ] VSUB_DECADE_STRING [ twenty {return("2")} thirty {return("3")} forty {return("4")} fifty {return("5")} sixty {return("6")} seventy {return("7")} eighty {return("8")} ninety {return("9")} ] VSUB_TEEN [ eleven {return(11)} twelve {return(12)} thirteen {return(13)} fourteen {return(14)} fifteen {return(15)} sixteen {return(16)} seventeen {return(17)} eighteen {return(18)} nineteen {return(19)} ] VSUB_DECADE [ twenty {return(20)} thirty {return(30)} forty {return(40)} fifty {return(50)} sixty {return(60)} seventy {return(70)} eighty {return(80)} ninety {return(90)} ]