* First cut at Solaris fixes. There may still be some *printf("%s", NULL)
[citadel.git] / citadel / parsedate.c
index f2927093ea3c60d65f37754c0685df834002c5d7..284dbac836b29bca7afcbd3e567db0a8cb56df23 100644 (file)
@@ -1,14 +1,5 @@
-#ifndef lint
-static char yysccsid[] = "@(#)yaccpar  1.9 (Berkeley) 02/21/93";
-#endif
-#define YYBYACC 1
-#define YYMAJOR 1
-#define YYMINOR 9
-#define yyclearin (yychar=(-1))
-#define yyerrok (yyerrflag=0)
-#define YYRECOVERING (yyerrflag!=0)
-#define YYPREFIX "yy"
-#line 2 "parsedate.y"
+
+# line 2 "parsedate.y"
 /* $Revision$
 **
 **  Originally written by Steven M. Bellovin <smb@research.att.com> while
@@ -105,196 +96,80 @@ static time_t     yyRelSeconds;
 
 
 static void            date_error(char *);
-#line 100 "parsedate.y"
-typedef union {
+
+# line 100 "parsedate.y"
+typedef union
+#ifdef __cplusplus
+       YYSTYPE
+#endif
+ {
     time_t             Number;
     enum _MERIDIAN     Meridian;
 } YYSTYPE;
-#line 114 "y.tab.c"
-#define tDAY 257
-#define tDAYZONE 258
-#define tMERIDIAN 259
-#define tMONTH 260
-#define tMONTH_UNIT 261
-#define tSEC_UNIT 262
-#define tSNUMBER 263
-#define tUNUMBER 264
-#define tZONE 265
-#define YYERRCODE 256
-short yylhs[] = {                                        -1,
-    0,    0,    4,    4,    4,    4,    5,    5,    5,    5,
-    5,    2,    2,    2,    2,    1,    6,    6,    6,    6,
-    6,    6,    6,    7,    7,    7,    7,    3,    3,
-};
-short yylen[] = {                                         2,
-    0,    2,    1,    2,    1,    1,    2,    4,    4,    6,
-    6,    1,    1,    2,    1,    1,    3,    5,    2,    4,
-    2,    3,    5,    2,    2,    2,    2,    0,    1,
-};
-short yydefred[] = {                                      1,
-    0,    0,    0,    0,    0,    2,    0,    5,    6,    0,
-    0,   26,   24,   29,    0,   27,   25,    0,    0,    7,
-   13,   16,    0,   15,    4,    0,    0,   22,    0,    0,
-   14,    0,   20,    0,    9,    8,    0,   23,    0,   18,
-   11,   10,
-};
-short yydgoto[] = {                                       1,
-   24,   25,   20,    6,    7,    8,    9,
-};
-short yysindex[] = {                                      0,
- -239,  -36, -248, -255,  -47,    0, -232,    0,    0, -247,
-  -25,    0,    0,    0, -237,    0,    0, -235, -234,    0,
-    0,    0, -231,    0,    0, -226, -229,    0,  -56,  -11,
-    0, -227,    0, -225,    0,    0, -224,    0, -250,    0,
-    0,    0,
-};
-short yyrindex[] = {                                      0,
-    0,    0,    0,    0,    1,    0,   22,    0,    0,    0,
-   12,    0,    0,    0,   28,    0,    0,    0,    0,    0,
-    0,    0,   23,    0,    0,    0,    0,    0,    3,   14,
-    0,    0,    0,    0,    0,    0,    0,    0,    3,    0,
-    0,    0,
-};
-short yygindex[] = {                                      0,
-  -19,    0,  -24,    0,    0,    0,    0,
-};
-#define YYTABLESIZE 291
-short yytable[] = {                                      19,
-   28,   34,   28,   31,   36,   12,   13,   10,   14,   35,
-   18,   19,   22,   17,   42,   11,   26,    2,   27,   41,
-    3,    3,   12,    4,    5,   21,   28,   21,   29,   30,
-   22,   22,   23,   32,   33,   37,   38,    0,   39,   40,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   14,    0,    0,    0,   22,    0,    0,    0,
-    0,   14,   15,   16,   17,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,   28,   28,   28,
-   28,    0,   28,   28,   28,   28,   28,   28,   19,    0,
-   17,   19,    0,   17,   19,   19,   17,   17,    3,   12,
-    0,    3,   12,    0,   21,    3,   12,   21,    0,    0,
-   21,
-};
-short yycheck[] = {                                      47,
-    0,   58,    0,   23,   29,  261,  262,   44,  259,   29,
-   58,    0,  263,    0,   39,  264,  264,  257,   44,   39,
-  260,    0,    0,  263,  264,  258,  264,    0,  264,  264,
-  263,  263,  265,  260,  264,   47,  264,   -1,  264,  264,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  259,   -1,   -1,   -1,  263,   -1,   -1,   -1,
-   -1,  259,  260,  261,  262,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,  257,  258,  257,
-  258,   -1,  260,  263,  264,  265,  264,  265,  257,   -1,
-  257,  260,   -1,  260,  263,  264,  263,  264,  257,  257,
-   -1,  260,  260,   -1,  257,  264,  264,  260,   -1,   -1,
-  263,
-};
-#define YYFINAL 1
-#ifndef YYDEBUG
-#define YYDEBUG 0
+# define tDAY 257
+# define tDAYZONE 258
+# define tMERIDIAN 259
+# define tMONTH 260
+# define tMONTH_UNIT 261
+# define tSEC_UNIT 262
+# define tSNUMBER 263
+# define tUNUMBER 264
+# define tZONE 265
+
+#include <inttypes.h>
+
+#ifdef __STDC__
+#include <stdlib.h>
+#include <string.h>
+#else
+#include <malloc.h>
+#include <memory.h>
 #endif
-#define YYMAXTOKEN 265
-#if YYDEBUG
-char *yyname[] = {
-"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,"','",0,0,"'/'",0,0,0,0,0,0,0,0,0,0,"':'",0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"tDAY","tDAYZONE",
-"tMERIDIAN","tMONTH","tMONTH_UNIT","tSEC_UNIT","tSNUMBER","tUNUMBER","tZONE",
-};
-char *yyrule[] = {
-"$accept : spec",
-"spec :",
-"spec : spec item",
-"item : time",
-"item : time zone",
-"item : date",
-"item : rel",
-"time : tUNUMBER o_merid",
-"time : tUNUMBER ':' tUNUMBER o_merid",
-"time : tUNUMBER ':' tUNUMBER numzone",
-"time : tUNUMBER ':' tUNUMBER ':' tUNUMBER o_merid",
-"time : tUNUMBER ':' tUNUMBER ':' tUNUMBER numzone",
-"zone : tZONE",
-"zone : tDAYZONE",
-"zone : tZONE numzone",
-"zone : numzone",
-"numzone : tSNUMBER",
-"date : tUNUMBER '/' tUNUMBER",
-"date : tUNUMBER '/' tUNUMBER '/' tUNUMBER",
-"date : tMONTH tUNUMBER",
-"date : tMONTH tUNUMBER ',' tUNUMBER",
-"date : tUNUMBER tMONTH",
-"date : tUNUMBER tMONTH tUNUMBER",
-"date : tDAY ',' tUNUMBER tMONTH tUNUMBER",
-"rel : tSNUMBER tSEC_UNIT",
-"rel : tUNUMBER tSEC_UNIT",
-"rel : tSNUMBER tMONTH_UNIT",
-"rel : tUNUMBER tMONTH_UNIT",
-"o_merid :",
-"o_merid : tMERIDIAN",
-};
+
+#include <values.h>
+
+#if defined(__cplusplus) || defined(__STDC__)
+
+#if defined(__cplusplus) && defined(__EXTERN_C__)
+extern "C" {
 #endif
-#ifdef YYSTACKSIZE
-#undef YYMAXDEPTH
-#define YYMAXDEPTH YYSTACKSIZE
-#else
-#ifdef YYMAXDEPTH
-#define YYSTACKSIZE YYMAXDEPTH
-#else
-#define YYSTACKSIZE 500
-#define YYMAXDEPTH 500
+#ifndef yyerror
+#if defined(__cplusplus)
+       void yyerror(const char *);
 #endif
 #endif
-int yydebug;
-int yynerrs;
-int yyerrflag;
-int yychar;
-short *yyssp;
-YYSTYPE *yyvsp;
-YYSTYPE yyval;
+#ifndef yylex
+       int yylex(void);
+#endif
+       int yyparse(void);
+#if defined(__cplusplus) && defined(__EXTERN_C__)
+}
+#endif
+
+#endif
+
+#define yyclearin yychar = -1
+#define yyerrok yyerrflag = 0
+extern int yychar;
+extern int yyerrflag;
 YYSTYPE yylval;
-short yyss[YYSTACKSIZE];
-YYSTYPE yyvs[YYSTACKSIZE];
-#define yystacksize YYSTACKSIZE
-#line 287 "parsedate.y"
+YYSTYPE yyval;
+typedef int yytabelem;
+#ifndef YYMAXDEPTH
+#define YYMAXDEPTH 150
+#endif
+#if YYMAXDEPTH > 0
+int yy_yys[YYMAXDEPTH], *yys = yy_yys;
+YYSTYPE yy_yyv[YYMAXDEPTH], *yyv = yy_yyv;
+#else  /* user does initial allocation */
+int *yys;
+YYSTYPE *yyv;
+#endif
+static int yymaxdepth = YYMAXDEPTH;
+# define YYERRCODE 256
+
+# line 286 "parsedate.y"
+
 
 /* Month and day table. */
 static TABLE   MonthDayTable[] = {
@@ -801,149 +676,663 @@ main(int ac, char *av[])
     /* NOTREACHED */
 }
 #endif /* TEST */
-#line 805 "y.tab.c"
-#define YYABORT goto yyabort
-#define YYREJECT goto yyabort
-#define YYACCEPT goto yyaccept
-#define YYERROR goto yyerrlab
-int
-yyparse()
-{
-    register int yym, yyn, yystate;
+static const yytabelem yyexca[] ={
+-1, 1,
+       0, -1,
+       -2, 0,
+       };
+# define YYNPROD 30
+# define YYLAST 216
+static const yytabelem yyact[]={
+
+    17,    12,    34,    40,    39,    21,    14,     8,    11,    14,
+     7,    16,    38,     9,     6,    36,    31,    29,    28,    27,
+    22,    14,    25,    24,    37,    35,    30,    23,    13,    15,
+     5,     4,     3,     2,     1,    10,     0,     0,     0,     0,
+    26,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    33,    32,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    42,    41,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    21,     0,     0,     0,    14,     0,     0,
+     0,     0,    21,    18,    20,    19 };
+static const yytabelem yypact[]={
+
+-10000000,  -250,-10000000,  -257,-10000000,-10000000,   -47,  -244,   -17,  -239,
+-10000000,  -242,-10000000,-10000000,-10000000,-10000000,  -245,  -246,  -247,-10000000,
+-10000000,-10000000,   -18,  -248,-10000000,-10000000,-10000000,   -56,   -22,-10000000,
+  -249,  -236,-10000000,-10000000,  -252,  -260,-10000000,  -261,  -254,-10000000,
+-10000000,-10000000,-10000000 };
+static const yytabelem yypgo[]={
+
+     0,    28,    35,    29,    34,    33,    32,    31,    30 };
+static const yytabelem yyr1[]={
+
+     0,     4,     4,     5,     5,     5,     5,     6,     6,     6,
+     6,     6,     2,     2,     2,     2,     1,     7,     7,     7,
+     7,     7,     7,     7,     8,     8,     8,     8,     3,     3 };
+static const yytabelem yyr2[]={
+
+     0,     0,     4,     3,     5,     3,     3,     5,     9,     9,
+    13,    13,     3,     3,     5,     3,     3,     7,    11,     5,
+     9,     5,     7,    11,     5,     5,     5,     5,     1,     3 };
+static const yytabelem yychk[]={
+
+-10000000,    -4,    -5,    -6,    -7,    -8,   264,   260,   257,   263,
+    -2,   265,   258,    -1,   263,    -3,    58,    47,   260,   262,
+   261,   259,   264,    44,   262,   261,    -1,   264,   264,   264,
+    44,   264,    -3,    -1,    58,    47,   264,   260,   264,   264,
+   264,    -3,    -1 };
+static const yytabelem yydef[]={
+
+     1,    -2,     2,     3,     5,     6,    28,     0,     0,     0,
+     4,    12,    13,    15,    16,     7,     0,     0,    21,    25,
+    27,    29,    19,     0,    24,    26,    14,    28,    17,    22,
+     0,     0,     8,     9,     0,     0,    20,     0,    28,    18,
+    23,    10,    11 };
+typedef struct
+#ifdef __cplusplus
+       yytoktype
+#endif
+{ char *t_name; int t_val; } yytoktype;
+#ifndef YYDEBUG
+#      define YYDEBUG  0       /* don't allow debugging */
+#endif
+
 #if YYDEBUG
-    register char *yys;
-    extern char *getenv();
-
-    if (yys = getenv("YYDEBUG"))
-    {
-        yyn = *yys;
-        if (yyn >= '0' && yyn <= '9')
-            yydebug = yyn - '0';
-    }
+
+yytoktype yytoks[] =
+{
+       "tDAY", 257,
+       "tDAYZONE",     258,
+       "tMERIDIAN",    259,
+       "tMONTH",       260,
+       "tMONTH_UNIT",  261,
+       "tSEC_UNIT",    262,
+       "tSNUMBER",     263,
+       "tUNUMBER",     264,
+       "tZONE",        265,
+       "-unknown-",    -1      /* ends search */
+};
+
+char * yyreds[] =
+{
+       "-no such reduction-",
+       "spec : /* empty */",
+       "spec : spec item",
+       "item : time",
+       "item : time zone",
+       "item : date",
+       "item : rel",
+       "time : tUNUMBER o_merid",
+       "time : tUNUMBER ':' tUNUMBER o_merid",
+       "time : tUNUMBER ':' tUNUMBER numzone",
+       "time : tUNUMBER ':' tUNUMBER ':' tUNUMBER o_merid",
+       "time : tUNUMBER ':' tUNUMBER ':' tUNUMBER numzone",
+       "zone : tZONE",
+       "zone : tDAYZONE",
+       "zone : tZONE numzone",
+       "zone : numzone",
+       "numzone : tSNUMBER",
+       "date : tUNUMBER '/' tUNUMBER",
+       "date : tUNUMBER '/' tUNUMBER '/' tUNUMBER",
+       "date : tMONTH tUNUMBER",
+       "date : tMONTH tUNUMBER ',' tUNUMBER",
+       "date : tUNUMBER tMONTH",
+       "date : tUNUMBER tMONTH tUNUMBER",
+       "date : tDAY ',' tUNUMBER tMONTH tUNUMBER",
+       "rel : tSNUMBER tSEC_UNIT",
+       "rel : tUNUMBER tSEC_UNIT",
+       "rel : tSNUMBER tMONTH_UNIT",
+       "rel : tUNUMBER tMONTH_UNIT",
+       "o_merid : /* empty */",
+       "o_merid : tMERIDIAN",
+};
+#endif /* YYDEBUG */
+# line 1 "/usr/ccs/bin/yaccpar"
+/*
+ * Copyright (c) 1993 by Sun Microsystems, Inc.
+ */
+
+#pragma ident  "@(#)yaccpar    6.15    97/12/08 SMI"
+
+/*
+** Skeleton parser driver for yacc output
+*/
+
+/*
+** yacc user known macros and defines
+*/
+#define YYERROR                goto yyerrlab
+#define YYACCEPT       return(0)
+#define YYABORT                return(1)
+#define YYBACKUP( newtoken, newvalue )\
+{\
+       if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\
+       {\
+               yyerror( "syntax error - cannot backup" );\
+               goto yyerrlab;\
+       }\
+       yychar = newtoken;\
+       yystate = *yyps;\
+       yylval = newvalue;\
+       goto yynewstate;\
+}
+#define YYRECOVERING() (!!yyerrflag)
+#define YYNEW(type)    malloc(sizeof(type) * yynewmax)
+#define YYCOPY(to, from, type) \
+       (type *) memcpy(to, (char *) from, yymaxdepth * sizeof (type))
+#define YYENLARGE( from, type) \
+       (type *) realloc((char *) from, yynewmax * sizeof(type))
+#ifndef YYDEBUG
+#      define YYDEBUG  1       /* make debugging available */
 #endif
 
-    yynerrs = 0;
-    yyerrflag = 0;
-    yychar = (-1);
+/*
+** user known globals
+*/
+int yydebug;                   /* set to 1 to get debugging */
 
-    yyssp = yyss;
-    yyvsp = yyvs;
-    *yyssp = yystate = 0;
+/*
+** driver internal defines
+*/
+#define YYFLAG         (-10000000)
 
-yyloop:
-    if (yyn = yydefred[yystate]) goto yyreduce;
-    if (yychar < 0)
-    {
-        if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
-        if (yydebug)
-        {
-            yys = 0;
-            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
-            if (!yys) yys = "illegal-symbol";
-            printf("%sdebug: state %d, reading %d (%s)\n",
-                    YYPREFIX, yystate, yychar, yys);
-        }
+/*
+** global variables used by the parser
+*/
+YYSTYPE *yypv;                 /* top of value stack */
+int *yyps;                     /* top of state stack */
+
+int yystate;                   /* current state */
+int yytmp;                     /* extra var (lasts between blocks) */
+
+int yynerrs;                   /* number of errors */
+int yyerrflag;                 /* error recovery flag */
+int yychar;                    /* current input token number */
+
+
+
+#ifdef YYNMBCHARS
+#define YYLEX()                yycvtok(yylex())
+/*
+** yycvtok - return a token if i is a wchar_t value that exceeds 255.
+**     If i<255, i itself is the token.  If i>255 but the neither 
+**     of the 30th or 31st bit is on, i is already a token.
+*/
+#if defined(__STDC__) || defined(__cplusplus)
+int yycvtok(int i)
+#else
+int yycvtok(i) int i;
 #endif
-    }
-    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
-            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
-    {
-#if YYDEBUG
-        if (yydebug)
-            printf("%sdebug: state %d, shifting to state %d\n",
-                    YYPREFIX, yystate, yytable[yyn]);
+{
+       int first = 0;
+       int last = YYNMBCHARS - 1;
+       int mid;
+       wchar_t j;
+
+       if(i&0x60000000){/*Must convert to a token. */
+               if( yymbchars[last].character < i ){
+                       return i;/*Giving up*/
+               }
+               while ((last>=first)&&(first>=0)) {/*Binary search loop*/
+                       mid = (first+last)/2;
+                       j = yymbchars[mid].character;
+                       if( j==i ){/*Found*/ 
+                               return yymbchars[mid].tvalue;
+                       }else if( j<i ){
+                               first = mid + 1;
+                       }else{
+                               last = mid -1;
+                       }
+               }
+               /*No entry in the table.*/
+               return i;/* Giving up.*/
+       }else{/* i is already a token. */
+               return i;
+       }
+}
+#else/*!YYNMBCHARS*/
+#define YYLEX()                yylex()
+#endif/*!YYNMBCHARS*/
+
+/*
+** yyparse - return 0 if worked, 1 if syntax error not recovered from
+*/
+#if defined(__STDC__) || defined(__cplusplus)
+int yyparse(void)
+#else
+int yyparse()
 #endif
-        if (yyssp >= yyss + yystacksize - 1)
-        {
-            goto yyoverflow;
-        }
-        *++yyssp = yystate = yytable[yyn];
-        *++yyvsp = yylval;
-        yychar = (-1);
-        if (yyerrflag > 0)  --yyerrflag;
-        goto yyloop;
-    }
-    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
-            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
-    {
-        yyn = yytable[yyn];
-        goto yyreduce;
-    }
-    if (yyerrflag) goto yyinrecovery;
-#ifdef lint
-    goto yynewerror;
+{
+       register YYSTYPE *yypvt = 0;    /* top of value stack for $vars */
+
+#if defined(__cplusplus) || defined(lint)
+/*
+       hacks to please C++ and lint - goto's inside
+       switch should never be executed
+*/
+       static int __yaccpar_lint_hack__ = 0;
+       switch (__yaccpar_lint_hack__)
+       {
+               case 1: goto yyerrlab;
+               case 2: goto yynewstate;
+       }
 #endif
-yynewerror:
-    yyerror("syntax error");
-#ifdef lint
-    goto yyerrlab;
+
+       /*
+       ** Initialize externals - yyparse may be called more than once
+       */
+       yypv = &yyv[-1];
+       yyps = &yys[-1];
+       yystate = 0;
+       yytmp = 0;
+       yynerrs = 0;
+       yyerrflag = 0;
+       yychar = -1;
+
+#if YYMAXDEPTH <= 0
+       if (yymaxdepth <= 0)
+       {
+               if ((yymaxdepth = YYEXPAND(0)) <= 0)
+               {
+                       yyerror("yacc initialization error");
+                       YYABORT;
+               }
+       }
 #endif
-yyerrlab:
-    ++yynerrs;
-yyinrecovery:
-    if (yyerrflag < 3)
-    {
-        yyerrflag = 3;
-        for (;;)
-        {
-            if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
-                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
-            {
+
+       {
+               register YYSTYPE *yy_pv;        /* top of value stack */
+               register int *yy_ps;            /* top of state stack */
+               register int yy_state;          /* current state */
+               register int  yy_n;             /* internal state number info */
+       goto yystack;   /* moved from 6 lines above to here to please C++ */
+
+               /*
+               ** get globals into registers.
+               ** branch to here only if YYBACKUP was called.
+               */
+       yynewstate:
+               yy_pv = yypv;
+               yy_ps = yyps;
+               yy_state = yystate;
+               goto yy_newstate;
+
+               /*
+               ** get globals into registers.
+               ** either we just started, or we just finished a reduction
+               */
+       yystack:
+               yy_pv = yypv;
+               yy_ps = yyps;
+               yy_state = yystate;
+
+               /*
+               ** top of for (;;) loop while no reductions done
+               */
+       yy_stack:
+               /*
+               ** put a state and value onto the stacks
+               */
 #if YYDEBUG
-                if (yydebug)
-                    printf("%sdebug: state %d, error recovery shifting\
- to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
+               /*
+               ** if debugging, look up token value in list of value vs.
+               ** name pairs.  0 and negative (-1) are special values.
+               ** Note: linear search is used since time is not a real
+               ** consideration while debugging.
+               */
+               if ( yydebug )
+               {
+                       register int yy_i;
+
+                       printf( "State %d, token ", yy_state );
+                       if ( yychar == 0 )
+                               printf( "end-of-file\n" );
+                       else if ( yychar < 0 )
+                               printf( "-none-\n" );
+                       else
+                       {
+                               for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
+                                       yy_i++ )
+                               {
+                                       if ( yytoks[yy_i].t_val == yychar )
+                                               break;
+                               }
+                               printf( "%s\n", yytoks[yy_i].t_name );
+                       }
+               }
+#endif /* YYDEBUG */
+               if ( ++yy_ps >= &yys[ yymaxdepth ] )    /* room on stack? */
+               {
+                       /*
+                       ** reallocate and recover.  Note that pointers
+                       ** have to be reset, or bad things will happen
+                       */
+                       long yyps_index = (yy_ps - yys);
+                       long yypv_index = (yy_pv - yyv);
+                       long yypvt_index = (yypvt - yyv);
+                       int yynewmax;
+#ifdef YYEXPAND
+                       yynewmax = YYEXPAND(yymaxdepth);
+#else
+                       yynewmax = 2 * yymaxdepth;      /* double table size */
+                       if (yymaxdepth == YYMAXDEPTH)   /* first time growth */
+                       {
+                               char *newyys = (char *)YYNEW(int);
+                               char *newyyv = (char *)YYNEW(YYSTYPE);
+                               if (newyys != 0 && newyyv != 0)
+                               {
+                                       yys = YYCOPY(newyys, yys, int);
+                                       yyv = YYCOPY(newyyv, yyv, YYSTYPE);
+                               }
+                               else
+                                       yynewmax = 0;   /* failed */
+                       }
+                       else                            /* not first time */
+                       {
+                               yys = YYENLARGE(yys, int);
+                               yyv = YYENLARGE(yyv, YYSTYPE);
+                               if (yys == 0 || yyv == 0)
+                                       yynewmax = 0;   /* failed */
+                       }
 #endif
-                if (yyssp >= yyss + yystacksize - 1)
-                {
-                    goto yyoverflow;
-                }
-                *++yyssp = yystate = yytable[yyn];
-                *++yyvsp = yylval;
-                goto yyloop;
-            }
-            else
-            {
+                       if (yynewmax <= yymaxdepth)     /* tables not expanded */
+                       {
+                               yyerror( "yacc stack overflow" );
+                               YYABORT;
+                       }
+                       yymaxdepth = yynewmax;
+
+                       yy_ps = yys + yyps_index;
+                       yy_pv = yyv + yypv_index;
+                       yypvt = yyv + yypvt_index;
+               }
+               *yy_ps = yy_state;
+               *++yy_pv = yyval;
+
+               /*
+               ** we have a new state - find out what to do
+               */
+       yy_newstate:
+               if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG )
+                       goto yydefault;         /* simple state */
 #if YYDEBUG
-                if (yydebug)
-                    printf("%sdebug: error recovery discarding state %d\n",
-                            YYPREFIX, *yyssp);
+               /*
+               ** if debugging, need to mark whether new token grabbed
+               */
+               yytmp = yychar < 0;
 #endif
-                if (yyssp <= yyss) goto yyabort;
-                --yyssp;
-                --yyvsp;
-            }
-        }
-    }
-    else
-    {
-        if (yychar == 0) goto yyabort;
+               if ( ( yychar < 0 ) && ( ( yychar = YYLEX() ) < 0 ) )
+                       yychar = 0;             /* reached EOF */
+#if YYDEBUG
+               if ( yydebug && yytmp )
+               {
+                       register int yy_i;
+
+                       printf( "Received token " );
+                       if ( yychar == 0 )
+                               printf( "end-of-file\n" );
+                       else if ( yychar < 0 )
+                               printf( "-none-\n" );
+                       else
+                       {
+                               for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
+                                       yy_i++ )
+                               {
+                                       if ( yytoks[yy_i].t_val == yychar )
+                                               break;
+                               }
+                               printf( "%s\n", yytoks[yy_i].t_name );
+                       }
+               }
+#endif /* YYDEBUG */
+               if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) )
+                       goto yydefault;
+               if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar )  /*valid shift*/
+               {
+                       yychar = -1;
+                       yyval = yylval;
+                       yy_state = yy_n;
+                       if ( yyerrflag > 0 )
+                               yyerrflag--;
+                       goto yy_stack;
+               }
+
+       yydefault:
+               if ( ( yy_n = yydef[ yy_state ] ) == -2 )
+               {
 #if YYDEBUG
-        if (yydebug)
-        {
-            yys = 0;
-            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
-            if (!yys) yys = "illegal-symbol";
-            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
-                    YYPREFIX, yystate, yychar, yys);
-        }
+                       yytmp = yychar < 0;
 #endif
-        yychar = (-1);
-        goto yyloop;
-    }
-yyreduce:
+                       if ( ( yychar < 0 ) && ( ( yychar = YYLEX() ) < 0 ) )
+                               yychar = 0;             /* reached EOF */
+#if YYDEBUG
+                       if ( yydebug && yytmp )
+                       {
+                               register int yy_i;
+
+                               printf( "Received token " );
+                               if ( yychar == 0 )
+                                       printf( "end-of-file\n" );
+                               else if ( yychar < 0 )
+                                       printf( "-none-\n" );
+                               else
+                               {
+                                       for ( yy_i = 0;
+                                               yytoks[yy_i].t_val >= 0;
+                                               yy_i++ )
+                                       {
+                                               if ( yytoks[yy_i].t_val
+                                                       == yychar )
+                                               {
+                                                       break;
+                                               }
+                                       }
+                                       printf( "%s\n", yytoks[yy_i].t_name );
+                               }
+                       }
+#endif /* YYDEBUG */
+                       /*
+                       ** look through exception table
+                       */
+                       {
+                               register const int *yyxi = yyexca;
+
+                               while ( ( *yyxi != -1 ) ||
+                                       ( yyxi[1] != yy_state ) )
+                               {
+                                       yyxi += 2;
+                               }
+                               while ( ( *(yyxi += 2) >= 0 ) &&
+                                       ( *yyxi != yychar ) )
+                                       ;
+                               if ( ( yy_n = yyxi[1] ) < 0 )
+                                       YYACCEPT;
+                       }
+               }
+
+               /*
+               ** check for syntax error
+               */
+               if ( yy_n == 0 )        /* have an error */
+               {
+                       /* no worry about speed here! */
+                       switch ( yyerrflag )
+                       {
+                       case 0:         /* new error */
+                               yyerror( "syntax error" );
+                               goto skip_init;
+                       yyerrlab:
+                               /*
+                               ** get globals into registers.
+                               ** we have a user generated syntax type error
+                               */
+                               yy_pv = yypv;
+                               yy_ps = yyps;
+                               yy_state = yystate;
+                       skip_init:
+                               yynerrs++;
+                               /* FALLTHRU */
+                       case 1:
+                       case 2:         /* incompletely recovered error */
+                                       /* try again... */
+                               yyerrflag = 3;
+                               /*
+                               ** find state where "error" is a legal
+                               ** shift action
+                               */
+                               while ( yy_ps >= yys )
+                               {
+                                       yy_n = yypact[ *yy_ps ] + YYERRCODE;
+                                       if ( yy_n >= 0 && yy_n < YYLAST &&
+                                               yychk[yyact[yy_n]] == YYERRCODE)                                        {
+                                               /*
+                                               ** simulate shift of "error"
+                                               */
+                                               yy_state = yyact[ yy_n ];
+                                               goto yy_stack;
+                                       }
+                                       /*
+                                       ** current state has no shift on
+                                       ** "error", pop stack
+                                       */
+#if YYDEBUG
+#      define _POP_ "Error recovery pops state %d, uncovers state %d\n"
+                                       if ( yydebug )
+                                               printf( _POP_, *yy_ps,
+                                                       yy_ps[-1] );
+#      undef _POP_
+#endif
+                                       yy_ps--;
+                                       yy_pv--;
+                               }
+                               /*
+                               ** there is no state on stack with "error" as
+                               ** a valid shift.  give up.
+                               */
+                               YYABORT;
+                       case 3:         /* no shift yet; eat a token */
+#if YYDEBUG
+                               /*
+                               ** if debugging, look up token in list of
+                               ** pairs.  0 and negative shouldn't occur,
+                               ** but since timing doesn't matter when
+                               ** debugging, it doesn't hurt to leave the
+                               ** tests here.
+                               */
+                               if ( yydebug )
+                               {
+                                       register int yy_i;
+
+                                       printf( "Error recovery discards " );
+                                       if ( yychar == 0 )
+                                               printf( "token end-of-file\n" );
+                                       else if ( yychar < 0 )
+                                               printf( "token -none-\n" );
+                                       else
+                                       {
+                                               for ( yy_i = 0;
+                                                       yytoks[yy_i].t_val >= 0;
+                                                       yy_i++ )
+                                               {
+                                                       if ( yytoks[yy_i].t_val
+                                                               == yychar )
+                                                       {
+                                                               break;
+                                                       }
+                                               }
+                                               printf( "token %s\n",
+                                                       yytoks[yy_i].t_name );
+                                       }
+                               }
+#endif /* YYDEBUG */
+                               if ( yychar == 0 )      /* reached EOF. quit */
+                                       YYABORT;
+                               yychar = -1;
+                               goto yy_newstate;
+                       }
+               }/* end if ( yy_n == 0 ) */
+               /*
+               ** reduction by production yy_n
+               ** put stack tops, etc. so things right after switch
+               */
 #if YYDEBUG
-    if (yydebug)
-        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
-                YYPREFIX, yystate, yyn, yyrule[yyn]);
+               /*
+               ** if debugging, print the string that is the user's
+               ** specification of the reduction which is just about
+               ** to be done.
+               */
+               if ( yydebug )
+                       printf( "Reduce by (%d) \"%s\"\n",
+                               yy_n, yyreds[ yy_n ] );
 #endif
-    yym = yylen[yyn];
-    yyval = yyvsp[1-yym];
-    switch (yyn)
-    {
+               yytmp = yy_n;                   /* value to switch over */
+               yypvt = yy_pv;                  /* $vars top of value stack */
+               /*
+               ** Look in goto table for next state
+               ** Sorry about using yy_state here as temporary
+               ** register variable, but why not, if it works...
+               ** If yyr2[ yy_n ] doesn't have the low order bit
+               ** set, then there is no action to be done for
+               ** this reduction.  So, no saving & unsaving of
+               ** registers done.  The only difference between the
+               ** code just after the if and the body of the if is
+               ** the goto yy_stack in the body.  This way the test
+               ** can be made before the choice of what to do is needed.
+               */
+               {
+                       /* length of production doubled with extra bit */
+                       register int yy_len = yyr2[ yy_n ];
+
+                       if ( !( yy_len & 01 ) )
+                       {
+                               yy_len >>= 1;
+                               yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
+                               yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
+                                       *( yy_ps -= yy_len ) + 1;
+                               if ( yy_state >= YYLAST ||
+                                       yychk[ yy_state =
+                                       yyact[ yy_state ] ] != -yy_n )
+                               {
+                                       yy_state = yyact[ yypgo[ yy_n ] ];
+                               }
+                               goto yy_stack;
+                       }
+                       yy_len >>= 1;
+                       yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
+                       yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
+                               *( yy_ps -= yy_len ) + 1;
+                       if ( yy_state >= YYLAST ||
+                               yychk[ yy_state = yyact[ yy_state ] ] != -yy_n )
+                       {
+                               yy_state = yyact[ yypgo[ yy_n ] ];
+                       }
+               }
+                                       /* save until reenter driver code */
+               yystate = yy_state;
+               yyps = yy_ps;
+               yypv = yy_pv;
+       }
+       /*
+       ** code supplied by user is placed in this switch
+       */
+       switch( yytmp )
+       {
+               
 case 3:
-#line 118 "parsedate.y"
+# line 118 "parsedate.y"
 {
            yyHaveTime++;
 #ifdef lint
@@ -952,285 +1341,206 @@ case 3:
                YYERROR;
            }
 #endif /* lint */
-       }
-break;
+       } break;
 case 4:
-#line 127 "parsedate.y"
+# line 127 "parsedate.y"
 {
            yyHaveTime++;
-           yyTimezone = yyvsp[0].Number;
-       }
-break;
+           yyTimezone = yypvt[-0].Number;
+       } break;
 case 5:
-#line 131 "parsedate.y"
+# line 131 "parsedate.y"
 {
            yyHaveDate++;
-       }
-break;
+       } break;
 case 6:
-#line 134 "parsedate.y"
+# line 134 "parsedate.y"
 {
            yyHaveRel = 1;
-       }
-break;
+       } break;
 case 7:
-#line 139 "parsedate.y"
+# line 139 "parsedate.y"
 {
-           if (yyvsp[-1].Number < 100) {
-               yyHour = yyvsp[-1].Number;
+           if (yypvt[-1].Number < 100) {
+               yyHour = yypvt[-1].Number;
                yyMinutes = 0;
            }
            else {
-               yyHour = yyvsp[-1].Number / 100;
-               yyMinutes = yyvsp[-1].Number % 100;
+               yyHour = yypvt[-1].Number / 100;
+               yyMinutes = yypvt[-1].Number % 100;
            }
            yySeconds = 0;
-           yyMeridian = yyvsp[0].Meridian;
-       }
-break;
+           yyMeridian = yypvt[-0].Meridian;
+       } break;
 case 8:
-#line 151 "parsedate.y"
+# line 151 "parsedate.y"
 {
-           yyHour = yyvsp[-3].Number;
-           yyMinutes = yyvsp[-1].Number;
+           yyHour = yypvt[-3].Number;
+           yyMinutes = yypvt[-1].Number;
            yySeconds = 0;
-           yyMeridian = yyvsp[0].Meridian;
-       }
-break;
+           yyMeridian = yypvt[-0].Meridian;
+       } break;
 case 9:
-#line 157 "parsedate.y"
+# line 157 "parsedate.y"
 {
-           yyHour = yyvsp[-3].Number;
-           yyMinutes = yyvsp[-1].Number;
-           yyTimezone = yyvsp[0].Number;
+           yyHour = yypvt[-3].Number;
+           yyMinutes = yypvt[-1].Number;
+           yyTimezone = yypvt[-0].Number;
            yyMeridian = MER24;
            yyDSTmode = DSToff;
-       }
-break;
+       } break;
 case 10:
-#line 164 "parsedate.y"
+# line 164 "parsedate.y"
 {
-           yyHour = yyvsp[-5].Number;
-           yyMinutes = yyvsp[-3].Number;
-           yySeconds = yyvsp[-1].Number;
-           yyMeridian = yyvsp[0].Meridian;
-       }
-break;
+           yyHour = yypvt[-5].Number;
+           yyMinutes = yypvt[-3].Number;
+           yySeconds = yypvt[-1].Number;
+           yyMeridian = yypvt[-0].Meridian;
+       } break;
 case 11:
-#line 170 "parsedate.y"
+# line 170 "parsedate.y"
 {
-           yyHour = yyvsp[-5].Number;
-           yyMinutes = yyvsp[-3].Number;
-           yySeconds = yyvsp[-1].Number;
-           yyTimezone = yyvsp[0].Number;
+           yyHour = yypvt[-5].Number;
+           yyMinutes = yypvt[-3].Number;
+           yySeconds = yypvt[-1].Number;
+           yyTimezone = yypvt[-0].Number;
            yyMeridian = MER24;
            yyDSTmode = DSToff;
-       }
-break;
+       } break;
 case 12:
-#line 180 "parsedate.y"
+# line 180 "parsedate.y"
 {
-           yyval.Number = yyvsp[0].Number;
+           yyval.Number = yypvt[-0].Number;
            yyDSTmode = DSToff;
-       }
-break;
+       } break;
 case 13:
-#line 184 "parsedate.y"
+# line 184 "parsedate.y"
 {
-           yyval.Number = yyvsp[0].Number;
+           yyval.Number = yypvt[-0].Number;
            yyDSTmode = DSTon;
-       }
-break;
+       } break;
 case 14:
-#line 188 "parsedate.y"
+# line 188 "parsedate.y"
 {
            /* Only allow "GMT+300" and "GMT-0800" */
-           if (yyvsp[-1].Number != 0) {
+           if (yypvt[-1].Number != 0) {
                YYABORT;
            }
-           yyval.Number = yyvsp[0].Number;
+           yyval.Number = yypvt[-0].Number;
            yyDSTmode = DSToff;
-       }
-break;
+       } break;
 case 15:
-#line 196 "parsedate.y"
+# line 196 "parsedate.y"
 {
-           yyval.Number = yyvsp[0].Number;
+           yyval.Number = yypvt[-0].Number;
            yyDSTmode = DSToff;
-       }
-break;
+       } break;
 case 16:
-#line 202 "parsedate.y"
+# line 202 "parsedate.y"
 {
            int         i;
 
            /* Unix and GMT and numeric timezones -- a little confusing. */
-           if (yyvsp[0].Number < 0) {
+           if (yypvt[-0].Number < 0) {
                /* Don't work with negative modulus. */
-               yyvsp[0].Number = -yyvsp[0].Number;
-               if (yyvsp[0].Number > 9999 || (i = yyvsp[0].Number % 100) >= 60) {
+               yypvt[-0].Number = -yypvt[-0].Number;
+               if (yypvt[-0].Number > 9999 || (i = yypvt[-0].Number % 100) >= 60) {
                    YYABORT;
                }
-               yyval.Number = (yyvsp[0].Number / 100) * 60 + i;
+               yyval.Number = (yypvt[-0].Number / 100) * 60 + i;
            }
            else {
-               if (yyvsp[0].Number > 9999 || (i = yyvsp[0].Number % 100) >= 60) {
+               if (yypvt[-0].Number > 9999 || (i = yypvt[-0].Number % 100) >= 60) {
                    YYABORT;
                }
-               yyval.Number = -((yyvsp[0].Number / 100) * 60 + i);
+               yyval.Number = -((yypvt[-0].Number / 100) * 60 + i);
            }
-       }
-break;
+       } break;
 case 17:
-#line 223 "parsedate.y"
+# line 223 "parsedate.y"
 {
-           yyMonth = yyvsp[-2].Number;
-           yyDay = yyvsp[0].Number;
-       }
-break;
+           yyMonth = yypvt[-2].Number;
+           yyDay = yypvt[-0].Number;
+       } break;
 case 18:
-#line 227 "parsedate.y"
+# line 227 "parsedate.y"
 {
-           if (yyvsp[-4].Number > 100) {
-               yyYear = yyvsp[-4].Number;
-               yyMonth = yyvsp[-2].Number;
-               yyDay = yyvsp[0].Number;
+           if (yypvt[-4].Number > 100) {
+               yyYear = yypvt[-4].Number;
+               yyMonth = yypvt[-2].Number;
+               yyDay = yypvt[-0].Number;
            }
            else {
-               yyMonth = yyvsp[-4].Number;
-               yyDay = yyvsp[-2].Number;
-               yyYear = yyvsp[0].Number;
+               yyMonth = yypvt[-4].Number;
+               yyDay = yypvt[-2].Number;
+               yyYear = yypvt[-0].Number;
            }
-       }
-break;
+       } break;
 case 19:
-#line 239 "parsedate.y"
+# line 239 "parsedate.y"
 {
-           yyMonth = yyvsp[-1].Number;
-           yyDay = yyvsp[0].Number;
-       }
-break;
+           yyMonth = yypvt[-1].Number;
+           yyDay = yypvt[-0].Number;
+       } break;
 case 20:
-#line 243 "parsedate.y"
+# line 243 "parsedate.y"
 {
-           yyMonth = yyvsp[-3].Number;
-           yyDay = yyvsp[-2].Number;
-           yyYear = yyvsp[0].Number;
-       }
-break;
+           yyMonth = yypvt[-3].Number;
+           yyDay = yypvt[-2].Number;
+           yyYear = yypvt[-0].Number;
+       } break;
 case 21:
-#line 248 "parsedate.y"
+# line 248 "parsedate.y"
 {
-           yyDay = yyvsp[-1].Number;
-           yyMonth = yyvsp[0].Number;
-       }
-break;
+           yyDay = yypvt[-1].Number;
+           yyMonth = yypvt[-0].Number;
+       } break;
 case 22:
-#line 252 "parsedate.y"
+# line 252 "parsedate.y"
 {
-           yyDay = yyvsp[-2].Number;
-           yyMonth = yyvsp[-1].Number;
-           yyYear = yyvsp[0].Number;
-       }
-break;
+           yyDay = yypvt[-2].Number;
+           yyMonth = yypvt[-1].Number;
+           yyYear = yypvt[-0].Number;
+       } break;
 case 23:
-#line 257 "parsedate.y"
+# line 257 "parsedate.y"
 {
-           yyDay = yyvsp[-2].Number;
-           yyMonth = yyvsp[-1].Number;
-           yyYear = yyvsp[0].Number;
-       }
-break;
+           yyDay = yypvt[-2].Number;
+           yyMonth = yypvt[-1].Number;
+           yyYear = yypvt[-0].Number;
+       } break;
 case 24:
-#line 264 "parsedate.y"
+# line 264 "parsedate.y"
 {
-           yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number;
-       }
-break;
+           yyRelSeconds += yypvt[-1].Number * yypvt[-0].Number;
+       } break;
 case 25:
-#line 267 "parsedate.y"
+# line 267 "parsedate.y"
 {
-           yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number;
-       }
-break;
+           yyRelSeconds += yypvt[-1].Number * yypvt[-0].Number;
+       } break;
 case 26:
-#line 270 "parsedate.y"
+# line 270 "parsedate.y"
 {
-           yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
-       }
-break;
+           yyRelMonth += yypvt[-1].Number * yypvt[-0].Number;
+       } break;
 case 27:
-#line 273 "parsedate.y"
+# line 273 "parsedate.y"
 {
-           yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
-       }
-break;
+           yyRelMonth += yypvt[-1].Number * yypvt[-0].Number;
+       } break;
 case 28:
-#line 278 "parsedate.y"
+# line 278 "parsedate.y"
 {
            yyval.Meridian = MER24;
-       }
-break;
+       } break;
 case 29:
-#line 281 "parsedate.y"
+# line 281 "parsedate.y"
 {
-           yyval.Meridian = yyvsp[0].Meridian;
+           yyval.Meridian = yypvt[-0].Meridian;
+       } break;
+# line 531 "/usr/ccs/bin/yaccpar"
        }
-break;
-#line 1181 "y.tab.c"
-    }
-    yyssp -= yym;
-    yystate = *yyssp;
-    yyvsp -= yym;
-    yym = yylhs[yyn];
-    if (yystate == 0 && yym == 0)
-    {
-#if YYDEBUG
-        if (yydebug)
-            printf("%sdebug: after reduction, shifting from state 0 to\
- state %d\n", YYPREFIX, YYFINAL);
-#endif
-        yystate = YYFINAL;
-        *++yyssp = YYFINAL;
-        *++yyvsp = yyval;
-        if (yychar < 0)
-        {
-            if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
-            if (yydebug)
-            {
-                yys = 0;
-                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
-                if (!yys) yys = "illegal-symbol";
-                printf("%sdebug: state %d, reading %d (%s)\n",
-                        YYPREFIX, YYFINAL, yychar, yys);
-            }
-#endif
-        }
-        if (yychar == 0) goto yyaccept;
-        goto yyloop;
-    }
-    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
-            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
-        yystate = yytable[yyn];
-    else
-        yystate = yydgoto[yym];
-#if YYDEBUG
-    if (yydebug)
-        printf("%sdebug: after reduction, shifting from state %d \
-to state %d\n", YYPREFIX, *yyssp, yystate);
-#endif
-    if (yyssp >= yyss + yystacksize - 1)
-    {
-        goto yyoverflow;
-    }
-    *++yyssp = yystate;
-    *++yyvsp = yyval;
-    goto yyloop;
-yyoverflow:
-    yyerror("yacc stack overflow");
-yyabort:
-    return (1);
-yyaccept:
-    return (0);
+       goto yystack;           /* reset registers in driver code */
 }
+