%{
typedef union{
  int num;
  char *str;
} YYSTYPE;
char *monthtab[] =
  {   "January",      "February",       "March",        "April",
      "May",          "June",           "July",         "August",
      "September",    "October",        "November",     "December"     };
%}
%token <str> MONTH
%token <num> NUMBER
%type <str> monthnum
%type <num> day year
%%
date : day MONTH year            { printf("%s %d, %d", $2, $1, $3); }
     | monthnum '/' day '/' year { printf("%s %d, %d", $1, $3, $5); }
     | MONTH day ',' year        { printf("%s %d, %d", $1, $2, $4); }
     ;
monthnum : NUMBER           { $$ = monthtab[$1 - 1 ] ; }
         ;
day  : NUMBER ;
year : NUMBER ;