STOCK_PRICE [ VLIB_STOCK_PRICE:z {} ] VLIB_STOCK_PRICE [ ; eg. "seven dollars a share exactly" ( VSUB_STOCK_DOLLAR_AMOUNT_STRING:d ?dollars ?( [ per a ] share ) ?[ even exactly ] ) {return($d)} ; eg. "twelve and five eighths" ( VSUB_STOCK_DOLLAR_AMOUNT_STRING:d and VSUB_STOCK_FRACTION_STRING:f ?dollars ?( [ per a ] share ) ) {return(strcat($d $f))} ; eg. "nine sixteenths per share" ( ?( zero and ) VSUB_STOCK_FRACTION_STRING:f ?dollars ?( [ per a ] share ) ) {return(strcat("0" $f))} ] VSUB_STOCK_DOLLAR_AMOUNT_STRING [ VSUB_DIGIT_ONE_THRU_NINE_STRING:d {return($d)} VSUB_10_THRU_99_STRING:d {return($d)} VSUB_100_THRU_499_STRING:d {return($d)} zero {return("0")} ] VSUB_10_THRU_99_STRING [ ten {return("10")} VSUB_TEEN_STRING:n {return($n)} VSUB_DECADE_STRING:n {return(strcat($n "0"))} ( VSUB_DECADE_STRING:t VSUB_DIGIT_ONE_THRU_NINE_STRING:u ) {return(strcat($t $u))} ] VSUB_100_THRU_499_STRING [ ( VSUB_DIGIT_ONE_THRU_FOUR_WITH_A_STRING:h hundred ) {return(strcat($h "00"))} ( VSUB_DIGIT_ONE_THRU_FOUR_WITH_A_STRING:h ?( hundred ?and ) VSUB_10_THRU_99_STRING:u ) {return(strcat($h $u))} ( VSUB_DIGIT_ONE_THRU_FOUR_WITH_A_STRING:h hundred ?and VSUB_DIGIT_ONE_THRU_NINE_STRING:u ) {return(strcat($h strcat("0" $u)))} ( VSUB_DIGIT_ONE_THRU_FOUR_STRING:h oh VSUB_DIGIT_ONE_THRU_NINE_STRING:u ) {return(strcat($h strcat("0" $u)))} ] VSUB_STOCK_FRACTION_STRING [ ( [ a one ] half ) {return(".5")} ( [ a one ] quarter ) {return(".25")} ( three quarters ) {return(".75")} ( [ one an ] eighth ) {return(".125")} ( [ two {return(".25")} three {return(".375")} four {return(".5")} five {return(".625")} six {return(".75")} seven {return(".875")} ] eighths ) ( [ a one ] sixteenth ) {return(".0625")} ( [ three {return(".1875")} five {return(".3125")} seven {return(".4375")} nine {return(".5625")} eleven {return(".6875")} thirteen {return(".8125")} fifteen {return(".9375")} ] sixteenths ) ( [ a one ] thirty second ) {return(".03125")} ( [ three {return(".09375")} five {return(".15625")} seven {return(".21875")} nine {return(".28125")} eleven {return(".34375")} thirteen {return(".40625")} fifteen {return(".46875")} seventeen {return(".53125")} nineteen {return(".59375")} ( twenty one ) {return(".65625")} ( twenty three ) {return(".71875")} ( twenty five ) {return(".78125")} ( twenty seven ) {return(".84375")} ( twenty nine ) {return(".90625")} ( thirty one ) {return(".96875")} ] thirty seconds ) ( [ a one ] sixty fourth ) {return(".015625")} ( [ three {return(".046875")} five {return(".078125")} seven {return(".109375")} nine {return(".140625")} eleven {return(".171875")} thirteen {return(".203125")} fifteen {return(".234375")} seventeen {return(".265625")} nineteen {return(".296875")} ( twenty one ) {return(".328125")} ( twenty three ) {return(".359375")} ( twenty five ) {return(".390625")} ( twenty seven ) {return(".421875")} ( twenty nine ) {return(".453125")} ( thirty one ) {return(".484375")} ( thirty three ) {return(".515625")} ( thirty five ) {return(".546875")} ( thirty seven ) {return(".578125")} ( thirty nine ) {return(".609375")} ( forty one ) {return(".640625")} ( forty three ) {return(".671875")} ( forty five ) {return(".703125")} ( forty seven ) {return(".734375")} ( forty nine ) {return(".765625")} ( fifty one ) {return(".796875")} ( fifty three ) {return(".828125")} ( fifty five ) {return(".859375")} ( fifty seven ) {return(".890625")} ( fifty nine ) {return(".921875")} ( sixty one ) {return(".953125")} ( sixty three ) {return(".984375")} ] sixty fourths ) ] VSUB_DIGIT_ONE_THRU_FOUR_STRING [ one {return("1")} two {return("2")} three {return("3")} four {return("4")} ] VSUB_DIGIT_ONE_THRU_FOUR_WITH_A_STRING [ a {return("1")} VSUB_DIGIT_ONE_THRU_FOUR_STRING:n {return($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)} ]