📄 tcldate.c
字号:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 20, 25, 24, 27, 26, 42, 0, 0, 0, 0, 40 };TclDatetabelem TclDatepact[]={-10000000, -258,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000, -45, -267,-10000000, -244,-10000000, -14, -231, -240,-10000000,-10000000,-10000000,-10000000, -246,-10000000, -247, -248,-10000000,-10000000,-10000000,-10000000, -15,-10000000,-10000000,-10000000,-10000000,-10000000, -40, -20,-10000000, -251,-10000000,-10000000, -252,-10000000, -253,-10000000, -249,-10000000,-10000000,-10000000 };TclDatetabelem TclDatepgo[]={ 0, 28, 39, 38, 37, 36, 35, 34, 33, 32, 31 };TclDatetabelem TclDater1[]={ 0, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 1, 1 };TclDatetabelem TclDater2[]={ 0, 0, 4, 3, 3, 3, 3, 3, 2, 5, 9, 9, 13, 13, 5, 3, 3, 3, 5, 5, 7, 11, 5, 9, 5, 3, 7, 5, 2, 5, 5, 3, 5, 5, 3, 5, 5, 3, 3, 1, 3 };TclDatetabelem TclDatechk[]={-10000000, -2, -3, -4, -5, -6, -7, -8, -9, 267, 268, 259, 263, 269, 258, -10, 266, 262, 265, 264, 261, 58, 258, 47, 263, 262, 265, 264, 270, 267, 44, 257, 262, 265, 264, 267, 267, 267, 44, -1, 266, 58, 261, 47, 267, 267, 267, -1, 266 };TclDatetabelem TclDatedef[]={ 1, -2, 2, 3, 4, 5, 6, 7, 8, 38, 15, 16, 0, 25, 17, 28, 0, 31, 34, 37, 9, 0, 19, 0, 24, 29, 33, 36, 14, 22, 18, 27, 30, 32, 35, 39, 20, 26, 0, 10, 11, 0, 40, 0, 23, 39, 21, 12, 13 };typedef struct#ifdef __cplusplus TclDatetoktype#endif{ char *t_name; int t_val; } TclDatetoktype;#ifndef YYDEBUG# define YYDEBUG 0 /* don't allow debugging */#endif#if YYDEBUGTclDatetoktype TclDatetoks[] ={ "tAGO", 257, "tDAY", 258, "tDAYZONE", 259, "tID", 260, "tMERIDIAN", 261, "tMINUTE_UNIT", 262, "tMONTH", 263, "tMONTH_UNIT", 264, "tSEC_UNIT", 265, "tSNUMBER", 266, "tUNUMBER", 267, "tZONE", 268, "tEPOCH", 269, "tDST", 270, "-unknown-", -1 /* ends search */};char * TclDatereds[] ={ "-no such reduction-", "spec : /* empty */", "spec : spec item", "item : time", "item : zone", "item : date", "item : day", "item : rel", "item : number", "time : tUNUMBER tMERIDIAN", "time : tUNUMBER ':' tUNUMBER o_merid", "time : tUNUMBER ':' tUNUMBER tSNUMBER", "time : tUNUMBER ':' tUNUMBER ':' tUNUMBER o_merid", "time : tUNUMBER ':' tUNUMBER ':' tUNUMBER tSNUMBER", "zone : tZONE tDST", "zone : tZONE", "zone : tDAYZONE", "day : tDAY", "day : tDAY ','", "day : tUNUMBER tDAY", "date : tUNUMBER '/' tUNUMBER", "date : tUNUMBER '/' tUNUMBER '/' tUNUMBER", "date : tMONTH tUNUMBER", "date : tMONTH tUNUMBER ',' tUNUMBER", "date : tUNUMBER tMONTH", "date : tEPOCH", "date : tUNUMBER tMONTH tUNUMBER", "rel : relunit tAGO", "rel : relunit", "relunit : tUNUMBER tMINUTE_UNIT", "relunit : tSNUMBER tMINUTE_UNIT", "relunit : tMINUTE_UNIT", "relunit : tSNUMBER tSEC_UNIT", "relunit : tUNUMBER tSEC_UNIT", "relunit : tSEC_UNIT", "relunit : tSNUMBER tMONTH_UNIT", "relunit : tUNUMBER tMONTH_UNIT", "relunit : tMONTH_UNIT", "number : tUNUMBER", "o_merid : /* empty */", "o_merid : tMERIDIAN",};#endif /* YYDEBUG *//* * Copyright (c) 1993 by Sun Microsystems, Inc. *//*** Skeleton parser driver for yacc output*//*** yacc user known macros and defines*/#define YYERROR goto TclDateerrlab#define YYACCEPT return(0)#define YYABORT return(1)#define YYBACKUP( newtoken, newvalue )\{\ if ( TclDatechar >= 0 || ( TclDater2[ TclDatetmp ] >> 1 ) != 1 )\ {\ TclDateerror( "syntax error - cannot backup" );\ goto TclDateerrlab;\ }\ TclDatechar = newtoken;\ TclDatestate = *TclDateps;\ TclDatelval = newvalue;\ goto TclDatenewstate;\}#define YYRECOVERING() (!!TclDateerrflag)#define YYNEW(type) malloc(sizeof(type) * TclDatenewmax)#define YYCOPY(to, from, type) \ (type *) memcpy(to, (char *) from, TclDatenewmax * sizeof(type))#define YYENLARGE( from, type) \ (type *) realloc((char *) from, TclDatenewmax * sizeof(type))#ifndef YYDEBUG# define YYDEBUG 1 /* make debugging available */#endif/*** user known globals*/int TclDatedebug; /* set to 1 to get debugging *//*** driver internal defines*/#define YYFLAG (-10000000)/*** global variables used by the parser*/YYSTYPE *TclDatepv; /* top of value stack */int *TclDateps; /* top of state stack */int TclDatestate; /* current state */int TclDatetmp; /* extra var (lasts between blocks) */int TclDatenerrs; /* number of errors */int TclDateerrflag; /* error recovery flag */int TclDatechar; /* current input token number */#ifdef YYNMBCHARS#define YYLEX() TclDatecvtok(TclDatelex())/*** TclDatecvtok - 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 TclDatecvtok(int i)#elseint TclDatecvtok(i) int i;#endif{ int first = 0; int last = YYNMBCHARS - 1; int mid; wchar_t j; if(i&0x60000000){/*Must convert to a token. */ if( TclDatembchars[last].character < i ){ return i;/*Giving up*/ } while ((last>=first)&&(first>=0)) {/*Binary search loop*/ mid = (first+last)/2; j = TclDatembchars[mid].character; if( j==i ){/*Found*/ return TclDatembchars[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() TclDatelex()#endif/*!YYNMBCHARS*//*** TclDateparse - return 0 if worked, 1 if syntax error not recovered from*/#if defined(__STDC__) || defined(__cplusplus)int TclDateparse(void)#elseint TclDateparse()#endif{ register YYSTYPE *TclDatepvt; /* 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; TclDatepvt is set to 0 to avoid "used before set" warning.*/ static int __yaccpar_lint_hack__ = 0; switch (__yaccpar_lint_hack__) { case 1: goto TclDateerrlab; case 2: goto TclDatenewstate; } TclDatepvt = 0;#endif /* ** Initialize externals - TclDateparse may be called more than once */ TclDatepv = &TclDatev[-1]; TclDateps = &TclDates[-1]; TclDatestate = 0; TclDatetmp = 0; TclDatenerrs = 0; TclDateerrflag = 0; TclDatechar = -1;#if YYMAXDEPTH <= 0 if (TclDatemaxdepth <= 0) { if ((TclDatemaxdepth = YYEXPAND(0)) <= 0) { TclDateerror("yacc initialization error"); YYABORT; } }#endif { register YYSTYPE *TclDate_pv; /* top of value stack */ register int *TclDate_ps; /* top of state stack */ register int TclDate_state; /* current state */ register int TclDate_n; /* internal state number info */ goto TclDatestack; /* moved from 6 lines above to here to please C++ */ /* ** get globals into registers. ** branch to here only if YYBACKUP was called. */ TclDate_pv = TclDatepv; TclDate_ps = TclDateps; TclDate_state = TclDatestate; goto TclDate_newstate; /* ** get globals into registers. ** either we just started, or we just finished a reduction */ TclDatestack: TclDate_pv = TclDatepv; TclDate_ps = TclDateps; TclDate_state = TclDatestate; /* ** top of for (;;) loop while no reductions done */ TclDate_stack: /* ** put a state and value onto the stacks */#if YYDEBUG /* ** 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 ( TclDatedebug ) { register int TclDate_i; printf( "State %d, token ", TclDate_state ); if ( TclDatechar == 0 ) printf( "end-of-file\n" ); else if ( TclDatechar < 0 ) printf( "-none-\n" ); else { for ( TclDate_i = 0; TclDatetoks[TclDate_i].t_val >= 0; TclDate_i++ ) { if ( TclDatetoks[TclDate_i].t_val == TclDatechar ) break; } printf( "%s\n", TclDatetoks[TclDate_i].t_name ); } }#endif /* YYDEBUG */ if ( ++TclDate_ps >= &TclDates[ TclDatemaxdepth ] ) /* room on stack? */ { /* ** reallocate and recover. Note that pointers ** have to be reset, or bad things will happen */ int TclDateps_index = (TclDate_ps - TclDates); int TclDatepv_index = (TclDate_pv - TclDatev); int TclDatepvt_index = (TclDatepvt - TclDatev); int TclDatenewmax;#ifdef YYEXPAND TclDatenewmax = YYEXPAND(TclDatemaxdepth);#else TclDatenewmax = 2 * TclDatemaxdepth; /* double table size */ if (TclDatemaxdepth == YYMAXDEPTH) /* first time growth */ { char *newTclDates = (char *)YYNEW(int); char *newTclDatev = (char *)YYNEW(YYSTYPE); if (newTclDates != 0 && newTclDatev != 0) { TclDates = YYCOPY(newTclDates, TclDates, int); TclDatev = YYCOPY(newTclDatev, TclDatev, YYSTYPE); } else TclDatenewmax = 0; /* failed */ } else /* not first time */ { TclDates = YYENLARGE(TclDates, int); TclDatev = YYENLARGE(TclDatev, YYSTYPE); if (TclDates == 0 || TclDatev == 0) TclDatenewmax = 0; /* failed */ }#endif if (TclDatenewmax <= TclDatemaxdepth) /* tables not expanded */ { TclDateerror( "yacc stack overflow" ); YYABORT; } TclDatemaxdepth = TclDatenewmax; TclDate_ps = TclDates + TclDateps_index; TclDate_pv = TclDatev + TclDatepv_index; TclDatepvt = TclDatev + TclDatepvt_index; } *TclDate_ps = TclDate_state; *++TclDate_pv = TclDateval; /* ** we have a new state - find out what to do */ TclDate_newstate: if ( ( TclDate_n = TclDatepact[ TclDate_state ] ) <= YYFLAG ) goto TclDatedefault; /* simple state */#if YYDEBUG /* ** if debugging, need to mark whether new token grabbed */ TclDatetmp = TclDatechar < 0;#endif if ( ( TclDatechar < 0 ) && ( ( TclDatechar = YYLEX() ) < 0 ) ) TclDatechar = 0; /* reached EOF */#if YYDEBUG if ( TclDatedebug && TclDatetmp ) { register int TclDate_i; printf( "Received token " ); if ( TclDatechar == 0 )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -