CREDIT_CARD_EXPIRATION [ VLIB_CREDIT_CARD_EXPIRATION:z {< choice $z>} ] VLIB_CREDIT_CARD_EXPIRATION [ ( ?[ ( ?( ?it's [ valid good ] ) ?up [ through til until ] ) ( it expires ) ( the expiration ?date is ) ( the date is ) it's ] ?[ ( the [ end ( [ last ( twenty [ eighth ninth ] ) thirtieth ( thirty first ) ] ?day ) ] of ) ( twenty [ eight nine ] ) ( thirty ?one ) ] VSUB_CREDIT_CARD_DATE_MONTH_NAME:m ?of VSUB_CREDIT_CARD_DATE_YEAR:y ) ( VSUB_CREDIT_CARD_MONTH_NUMBER_AS_DIGIT:m ?[ ( [ two twenty ] [ eight nine ] ) ( thirty ?one ) ( three [ zero oh one ] ) ] VSUB_CREDIT_CARD_DATE_YEAR:y ) ] {return (strcat($m strcat(", " $y)))} ; ] {return([ ])} VSUB_CREDIT_CARD_MONTH_NUMBER [ ( ?[ zero oh ] VSUB_DIGIT_ONE_THRU_NINE:n ) {return($n)} ten {return(10)} eleven {return(11)} twelve {return(12)} ] VSUB_CREDIT_CARD_MONTH_NUMBER_AS_DIGIT [ ( [ zero oh ] VSUB_DIGIT_ONE_THRU_NINE:n ) {return($n)} ( one [ zero oh ] ) {return(10)} ( one one ) {return(11)} ( one two ) {return(12)} ] VSUB_CREDIT_CARD_DATE_MONTH_NAME [ january {return(1)} february {return(2)} march {return(3)} april {return(4)} may {return(5)} june {return(6)} july {return(7)} august {return(8)} september {return(9)} october {return(10)} november {return(11)} december {return(12)} ] VSUB_CREDIT_CARD_DATE_YEAR [ ( ?( nineteen ?( hundred ?and ) ) ninety nine ) {return(1999)} ( ?( the year ) two thousand ) {return(2000)} ( double zero ) {return(2000)} ( [ ( two thousand ?and ) ( twenty oh ) ] VSUB_DIGIT_ONE_THRU_NINE:n ) {return(add(2000 $n))} ( [ zero oh ] VSUB_DIGIT_ONE_THRU_NINE:n ) {return(add(2000 $n))} ] 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)} ]