#include #include #include # define U(x) x # define NLSTATE yyprevious=YYNEWLINE # define BEGIN yybgin = yysvec + 1 + # define INITIAL 0 # define YYLERR yysvec # define YYSTATE (yyestate-yysvec-1) # define YYOPTIM 1 # ifndef YYLMAX # define YYLMAX BUFSIZ # endif #ifndef __cplusplus # define output(c) (void)putc(c,yyout) #else # define lex_output(c) (void)putc(c,yyout) #endif #if defined(__cplusplus) || defined(__STDC__) #if defined(__cplusplus) && defined(__EXTERN_C__) extern "C" { #endif int yyback(int *, int); int yyinput(void); int yylook(void); void yyoutput(int); int yyracc(int); int yyreject(void); void yyunput(int); int yylex(void); #ifdef YYLEX_E void yywoutput(wchar_t); wchar_t yywinput(void); void yywunput(wchar_t); #endif #ifndef yyless int yyless(int); #endif #ifndef yywrap int yywrap(void); #endif #ifdef LEXDEBUG void allprint(char); void sprint(char *); #endif #if defined(__cplusplus) && defined(__EXTERN_C__) } #endif #ifdef __cplusplus extern "C" { #endif void exit(int); #ifdef __cplusplus } #endif #endif # define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;} # define yymore() (yymorfg=1) #ifndef __cplusplus # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar) #else # define lex_input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar) #endif #define ECHO fprintf(yyout, "%s",yytext) # define REJECT { nstr = yyreject(); goto yyfussy;} int yyleng; #define YYISARRAY char yytext[YYLMAX]; int yymorfg; extern char *yysptr, yysbuf[]; int yytchar; FILE *yyin = {stdin}, *yyout = {stdout}; extern int yylineno; struct yysvf { struct yywork *yystoff; struct yysvf *yyother; int *yystops;}; struct yysvf *yyestate; extern struct yysvf yysvec[], *yybgin; # line 3 "../common/dt_lex.l" /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ # line 24 "../common/dt_lex.l" /* * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. */ # line 27 "../common/dt_lex.l" /* * Copyright (c) 2013 by Delphix. All rights reserved. * Copyright (c) 2013, Joyent, Inc. All rights reserved. */ #include #include #include #include #include #include #include #include #include #include # line 44 "../common/dt_lex.l" /* * We need to undefine lex's input and unput macros so that references to these * call the functions provided at the end of this source file. */ #undef input #undef unput static int id_or_type(const char *); static int input(void); static void unput(int); # line 55 "../common/dt_lex.l" /* * We first define a set of labeled states for use in the D lexer and then a * set of regular expressions to simplify things below. The lexer states are: * * S0 - D program clause and expression lexing * S1 - D comments (i.e. skip everything until end of comment) * S2 - D program outer scope (probe specifiers and declarations) * S3 - D control line parsing (i.e. after ^# is seen but before \n) * S4 - D control line scan (locate control directives only and invoke S3) */ # define S0 2 # define S1 4 # define S2 6 # define S3 8 # define S4 10 # define YYNEWLINE 10 int yylex(){ int nstr; extern int yyprevious; # line 92 "../common/dt_lex.l" /* * We insert a special prologue into yylex() itself: if the pcb contains a * context token, we return that prior to running the normal lexer. This * allows libdtrace to force yacc into one of our three parsing contexts: D * expression (DT_CTX_DEXPR), D program (DT_CTX_DPROG) or D type (DT_CTX_DTYPE). * Once the token is returned, we clear it so this only happens once. */ if (yypcb->pcb_token != 0) { int tok = yypcb->pcb_token; yypcb->pcb_token = 0; return (tok); } #ifdef __cplusplus /* to avoid CC and lint complaining yyfussy not being used ...*/ static int __lex_hack = 0; if (__lex_hack) goto yyfussy; #endif while((nstr = yylook()) >= 0) yyfussy: switch(nstr){ case 0: if(yywrap()) return(0); break; case 1: # line 106 "../common/dt_lex.l" return (DT_KEY_AUTO); break; case 2: # line 107 "../common/dt_lex.l" return (DT_KEY_BREAK); break; case 3: # line 108 "../common/dt_lex.l" return (DT_KEY_CASE); break; case 4: # line 109 "../common/dt_lex.l" return (DT_KEY_CHAR); break; case 5: # line 110 "../common/dt_lex.l" return (DT_KEY_CONST); break; case 6: # line 111 "../common/dt_lex.l" return (DT_KEY_CONTINUE); break; case 7: # line 112 "../common/dt_lex.l" return (DT_KEY_COUNTER); break; case 8: # line 113 "../common/dt_lex.l" return (DT_KEY_DEFAULT); break; case 9: # line 114 "../common/dt_lex.l" return (DT_KEY_DO); break; case 10: # line 115 "../common/dt_lex.l" return (DT_KEY_DOUBLE); break; case 11: # line 116 "../common/dt_lex.l" return (DT_KEY_ELSE); break; case 12: # line 117 "../common/dt_lex.l" return (DT_KEY_ENUM); break; case 13: # line 118 "../common/dt_lex.l" return (DT_KEY_EXTERN); break; case 14: # line 119 "../common/dt_lex.l" return (DT_KEY_FLOAT); break; case 15: # line 120 "../common/dt_lex.l" return (DT_KEY_FOR); break; case 16: # line 121 "../common/dt_lex.l" return (DT_KEY_GOTO); break; case 17: # line 122 "../common/dt_lex.l" return (DT_KEY_IF); break; case 18: # line 123 "../common/dt_lex.l" return (DT_KEY_IMPORT); break; case 19: # line 124 "../common/dt_lex.l" return (DT_KEY_INLINE); break; case 20: # line 125 "../common/dt_lex.l" return (DT_KEY_INT); break; case 21: # line 126 "../common/dt_lex.l" return (DT_KEY_LONG); break; case 22: # line 127 "../common/dt_lex.l" return (DT_TOK_OFFSETOF); break; case 23: # line 128 "../common/dt_lex.l" return (DT_KEY_PROBE); break; case 24: # line 129 "../common/dt_lex.l" return (DT_KEY_PROVIDER); break; case 25: # line 130 "../common/dt_lex.l" return (DT_KEY_REGISTER); break; case 26: # line 131 "../common/dt_lex.l" return (DT_KEY_RESTRICT); break; case 27: # line 132 "../common/dt_lex.l" return (DT_KEY_RETURN); break; case 28: # line 133 "../common/dt_lex.l" return (DT_KEY_SELF); break; case 29: # line 134 "../common/dt_lex.l" return (DT_KEY_SHORT); break; case 30: # line 135 "../common/dt_lex.l" return (DT_KEY_SIGNED); break; case 31: # line 136 "../common/dt_lex.l" return (DT_TOK_SIZEOF); break; case 32: # line 137 "../common/dt_lex.l" return (DT_KEY_STATIC); break; case 33: # line 138 "../common/dt_lex.l" return (DT_KEY_STRING); break; case 34: # line 139 "../common/dt_lex.l" return (DT_TOK_STRINGOF); break; case 35: # line 140 "../common/dt_lex.l" return (DT_KEY_STRUCT); break; case 36: # line 141 "../common/dt_lex.l" return (DT_KEY_SWITCH); break; case 37: # line 142 "../common/dt_lex.l" return (DT_KEY_THIS); break; case 38: # line 143 "../common/dt_lex.l" return (DT_KEY_XLATOR); break; case 39: # line 144 "../common/dt_lex.l" return (DT_KEY_TYPEDEF); break; case 40: # line 145 "../common/dt_lex.l" return (DT_KEY_UNION); break; case 41: # line 146 "../common/dt_lex.l" return (DT_KEY_UNSIGNED); break; case 42: # line 147 "../common/dt_lex.l" return (DT_KEY_USERLAND); break; case 43: # line 148 "../common/dt_lex.l" return (DT_KEY_VOID); break; case 44: # line 149 "../common/dt_lex.l" return (DT_KEY_VOLATILE); break; case 45: # line 150 "../common/dt_lex.l" return (DT_KEY_WHILE); break; case 46: # line 151 "../common/dt_lex.l" return (DT_TOK_XLATE); break; case 47: # line 153 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_AUTO); } break; case 48: # line 154 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_CHAR); } break; case 49: # line 155 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_CONST); } break; case 50: # line 156 "../common/dt_lex.l" { yybegin(YYS_DEFINE); return (DT_KEY_COUNTER); } break; case 51: # line 157 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_DOUBLE); } break; case 52: # line 158 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_ENUM); } break; case 53: # line 159 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_EXTERN); } break; case 54: # line 160 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_FLOAT); } break; case 55: # line 161 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_IMPORT); } break; case 56: # line 162 "../common/dt_lex.l" { yybegin(YYS_DEFINE); return (DT_KEY_INLINE); } break; case 57: # line 163 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_INT); } break; case 58: # line 164 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_LONG); } break; case 59: # line 165 "../common/dt_lex.l" { yybegin(YYS_DEFINE); return (DT_KEY_PROVIDER); } break; case 60: # line 166 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_REGISTER); } break; case 61: # line 167 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_RESTRICT); } break; case 62: # line 168 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_SELF); } break; case 63: # line 169 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_SHORT); } break; case 64: # line 170 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_SIGNED); } break; case 65: # line 171 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_STATIC); } break; case 66: # line 172 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_STRING); } break; case 67: # line 173 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_STRUCT); } break; case 68: # line 174 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_THIS); } break; case 69: # line 175 "../common/dt_lex.l" { yybegin(YYS_DEFINE); return (DT_KEY_XLATOR); } break; case 70: # line 176 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_TYPEDEF); } break; case 71: # line 177 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_UNION); } break; case 72: # line 178 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_UNSIGNED); } break; case 73: # line 179 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_VOID); } break; case 74: # line 180 "../common/dt_lex.l" { yybegin(YYS_EXPR); return (DT_KEY_VOLATILE); } break; case 75: # line 182 "../common/dt_lex.l" { int i = atoi(yytext + 2); char *v = ""; /* * A macro argument reference substitutes the text of * an argument in place of the current token. When we * see $$ we fetch the saved string from pcb_sargv * (or use the default argument if the option has been * set and the argument hasn't been specified) and * return a token corresponding to this string. */ if (i < 0 || (i >= yypcb->pcb_sargc && !(yypcb->pcb_cflags & DTRACE_C_DEFARG))) { xyerror(D_MACRO_UNDEF, "macro argument %s is " "not defined\n", yytext); } if (i < yypcb->pcb_sargc) { v = yypcb->pcb_sargv[i]; /* get val from pcb */ yypcb->pcb_sflagv[i] |= DT_IDFLG_REF; } if ((yylval.l_str = strdup(v)) == NULL) longjmp(yypcb->pcb_jmpbuf, EDT_NOMEM); (void) stresc2chr(yylval.l_str); return (DT_TOK_STRING); } break; case 76: # line 212 "../common/dt_lex.l" { int i = atoi(yytext + 1); char *p, *v = "0"; /* * A macro argument reference substitutes the text of * one identifier or integer pattern for another. When * we see $ we fetch the saved string from pcb_sargv * (or use the default argument if the option has been * set and the argument hasn't been specified) and * return a token corresponding to this string. */ if (i < 0 || (i >= yypcb->pcb_sargc && !(yypcb->pcb_cflags & DTRACE_C_DEFARG))) { xyerror(D_MACRO_UNDEF, "macro argument %s is " "not defined\n", yytext); } if (i < yypcb->pcb_sargc) { v = yypcb->pcb_sargv[i]; /* get val from pcb */ yypcb->pcb_sflagv[i] |= DT_IDFLG_REF; } /* * If the macro text is not a valid integer or ident, * then we treat it as a string. The string may be * optionally enclosed in quotes, which we strip. */ if (strbadidnum(v)) { size_t len = strlen(v); if (len != 1 && *v == '"' && v[len - 1] == '"') yylval.l_str = strndup(v + 1, len - 2); else yylval.l_str = strndup(v, len); if (yylval.l_str == NULL) longjmp(yypcb->pcb_jmpbuf, EDT_NOMEM); (void) stresc2chr(yylval.l_str); return (DT_TOK_STRING); } /* * If the macro text is not a string an begins with a * digit or a +/- sign, process it as an integer token. */ if (isdigit(v[0]) || v[0] == '-' || v[0] == '+') { if (isdigit(v[0])) yyintprefix = 0; else yyintprefix = *v++; errno = 0; yylval.l_int = strtoull(v, &p, 0); (void) strncpy(yyintsuffix, p, sizeof (yyintsuffix)); yyintdecimal = *v != '0'; if (errno == ERANGE) { xyerror(D_MACRO_OFLOW, "macro argument" " %s constant %s results in integer" " overflow\n", yytext, v); } return (DT_TOK_INT); } return (id_or_type(v)); } break; case 77: # line 283 "../common/dt_lex.l" { dt_ident_t *idp = dt_idhash_lookup( yypcb->pcb_hdl->dt_macros, yytext + 2); char s[16]; /* enough for UINT_MAX + \0 */ if (idp == NULL) { xyerror(D_MACRO_UNDEF, "macro variable %s " "is not defined\n", yytext); } /* * For the moment, all current macro variables are of * type id_t (refer to dtrace_update() for details). */ (void) snprintf(s, sizeof (s), "%u", idp->di_id); if ((yylval.l_str = strdup(s)) == NULL) longjmp(yypcb->pcb_jmpbuf, EDT_NOMEM); return (DT_TOK_STRING); } break; case 78: # line 305 "../common/dt_lex.l" { dt_ident_t *idp = dt_idhash_lookup( yypcb->pcb_hdl->dt_macros, yytext + 1); if (idp == NULL) { xyerror(D_MACRO_UNDEF, "macro variable %s " "is not defined\n", yytext); } /* * For the moment, all current macro variables are of * type id_t (refer to dtrace_update() for details). */ yylval.l_int = (intmax_t)(int)idp->di_id; yyintprefix = 0; yyintsuffix[0] = '\0'; yyintdecimal = 1; return (DT_TOK_INT); } break; case 79: # line 326 "../common/dt_lex.l" case 80: # line 327 "../common/dt_lex.l" case 81: # line 328 "../common/dt_lex.l" { return (id_or_type(yytext)); } break; case 82: # line 332 "../common/dt_lex.l" { if ((yylval.l_str = strdup(yytext)) == NULL) longjmp(yypcb->pcb_jmpbuf, EDT_NOMEM); return (DT_TOK_AGG); } break; case 83: # line 338 "../common/dt_lex.l" { if ((yylval.l_str = strdup("@_")) == NULL) longjmp(yypcb->pcb_jmpbuf, EDT_NOMEM); return (DT_TOK_AGG); } break; case 84: # line 344 "../common/dt_lex.l" case 85: # line 345 "../common/dt_lex.l" case 86: # line 346 "../common/dt_lex.l" { char *p; errno = 0; yylval.l_int = strtoull(yytext, &p, 0); yyintprefix = 0; (void) strncpy(yyintsuffix, p, sizeof (yyintsuffix)); yyintdecimal = yytext[0] != '0'; if (errno == ERANGE) { xyerror(D_INT_OFLOW, "constant %s results in " "integer overflow\n", yytext); } if (*p != '\0' && strchr("uUlL", *p) == NULL) { xyerror(D_INT_DIGIT, "constant %s contains " "invalid digit %c\n", yytext, *p); } if ((YYSTATE) != S3) return (DT_TOK_INT); yypragma = dt_node_link(yypragma, dt_node_int(yylval.l_int)); } break; case 87: # line 372 "../common/dt_lex.l" yyerror("floating-point constants are not permitted\n"); break; case 88: # line 374 "../common/dt_lex.l" case 89: # line 375 "../common/dt_lex.l" xyerror(D_STR_NL, "newline encountered in string literal"); break; case 90: # line 377 "../common/dt_lex.l" case 91: # line 378 "../common/dt_lex.l" { /* * Quoted string -- convert C escape sequences and * return the string as a token. */ yylval.l_str = strndup(yytext + 1, yyleng - 2); if (yylval.l_str == NULL) longjmp(yypcb->pcb_jmpbuf, EDT_NOMEM); (void) stresc2chr(yylval.l_str); if ((YYSTATE) != S3) return (DT_TOK_STRING); yypragma = dt_node_link(yypragma, dt_node_string(yylval.l_str)); } break; case 92: # line 396 "../common/dt_lex.l" xyerror(D_CHR_NL, "newline encountered in character constant"); break; case 93: # line 398 "../common/dt_lex.l" { char *s, *p, *q; size_t nbytes; /* * Character constant -- convert C escape sequences and * return the character as an integer immediate value. */ if (yyleng == 2) xyerror(D_CHR_NULL, "empty character constant"); s = yytext + 1; yytext[yyleng - 1] = '\0'; nbytes = stresc2chr(s); yylval.l_int = 0; yyintprefix = 0; yyintsuffix[0] = '\0'; yyintdecimal = 1; if (nbytes > sizeof (yylval.l_int)) { xyerror(D_CHR_OFLOW, "character constant is " "too long"); } #ifdef _LITTLE_ENDIAN p = ((char *)&yylval.l_int) + nbytes - 1; for (q = s; nbytes != 0; nbytes--) *p-- = *q++; #else bcopy(s, ((char *)&yylval.l_int) + sizeof (yylval.l_int) - nbytes, nbytes); #endif return (DT_TOK_INT); } break; case 94: # line 432 "../common/dt_lex.l" case 95: # line 433 "../common/dt_lex.l" { yypcb->pcb_cstate = (YYSTATE); BEGIN(S1); } break; case 96: # line 438 "../common/dt_lex.l" case 97: # line 439 "../common/dt_lex.l" ; break; case 98: # line 441 "../common/dt_lex.l" case 99: # line 442 "../common/dt_lex.l" case 100: # line 443 "../common/dt_lex.l" { assert(yypragma == NULL); yypcb->pcb_cstate = (YYSTATE); BEGIN(S3); } break; case 101: # line 449 "../common/dt_lex.l" ; break; case 102: # line 450 "../common/dt_lex.l" ; break; case 103: # line 452 "../common/dt_lex.l" { int c, tok; /* * The use of "/" as the predicate delimiter and as the * integer division symbol requires special lookahead * to avoid a shift/reduce conflict in the D grammar. * We look ahead to the next non-whitespace character. * If we encounter EOF, ";", "{", or "/", then this "/" * closes the predicate and we return DT_TOK_EPRED. * If we encounter anything else, it's DT_TOK_DIV. */ while ((c = input()) != 0) { if (strchr("\f\n\r\t\v ", c) == NULL) break; } if (c == 0 || c == ';' || c == '{' || c == '/') { if (yypcb->pcb_parens != 0) { yyerror("closing ) expected in " "predicate before /\n"); } if (yypcb->pcb_brackets != 0) { yyerror("closing ] expected in " "predicate before /\n"); } tok = DT_TOK_EPRED; } else tok = DT_TOK_DIV; unput(c); return (tok); } break; case 104: # line 486 "../common/dt_lex.l" { yypcb->pcb_parens++; return (DT_TOK_LPAR); } break; case 105: # line 491 "../common/dt_lex.l" { if (--yypcb->pcb_parens < 0) yyerror("extra ) in input stream\n"); return (DT_TOK_RPAR); } break; case 106: # line 497 "../common/dt_lex.l" { yypcb->pcb_brackets++; return (DT_TOK_LBRAC); } break; case 107: # line 502 "../common/dt_lex.l" { if (--yypcb->pcb_brackets < 0) yyerror("extra ] in input stream\n"); return (DT_TOK_RBRAC); } break; case 108: # line 508 "../common/dt_lex.l" case 109: # line 509 "../common/dt_lex.l" { yypcb->pcb_braces++; return ('{'); } break; case 110: # line 514 "../common/dt_lex.l" { if (--yypcb->pcb_braces < 0) yyerror("extra } in input stream\n"); return ('}'); } break; case 111: # line 520 "../common/dt_lex.l" return (DT_TOK_BOR); break; case 112: # line 521 "../common/dt_lex.l" return (DT_TOK_XOR); break; case 113: # line 522 "../common/dt_lex.l" return (DT_TOK_BAND); break; case 114: # line 523 "../common/dt_lex.l" return (DT_TOK_LAND); break; case 115: # line 524 "../common/dt_lex.l" return (DT_TOK_LXOR); break; case 116: # line 525 "../common/dt_lex.l" return (DT_TOK_LOR); break; case 117: # line 526 "../common/dt_lex.l" return (DT_TOK_EQU); break; case 118: # line 527 "../common/dt_lex.l" return (DT_TOK_NEQ); break; case 119: # line 528 "../common/dt_lex.l" return (DT_TOK_LT); break; case 120: # line 529 "../common/dt_lex.l" return (DT_TOK_LE); break; case 121: # line 530 "../common/dt_lex.l" return (DT_TOK_GT); break; case 122: # line 531 "../common/dt_lex.l" return (DT_TOK_GE); break; case 123: # line 532 "../common/dt_lex.l" return (DT_TOK_LSH); break; case 124: # line 533 "../common/dt_lex.l" return (DT_TOK_RSH); break; case 125: # line 534 "../common/dt_lex.l" return (DT_TOK_ADD); break; case 126: # line 535 "../common/dt_lex.l" return (DT_TOK_SUB); break; case 127: # line 536 "../common/dt_lex.l" return (DT_TOK_MUL); break; case 128: # line 537 "../common/dt_lex.l" return (DT_TOK_MOD); break; case 129: # line 538 "../common/dt_lex.l" return (DT_TOK_BNEG); break; case 130: # line 539 "../common/dt_lex.l" return (DT_TOK_LNEG); break; case 131: # line 540 "../common/dt_lex.l" return (DT_TOK_QUESTION); break; case 132: # line 541 "../common/dt_lex.l" return (DT_TOK_COLON); break; case 133: # line 542 "../common/dt_lex.l" return (DT_TOK_DOT); break; case 134: # line 543 "../common/dt_lex.l" return (DT_TOK_PTR); break; case 135: # line 544 "../common/dt_lex.l" return (DT_TOK_ASGN); break; case 136: # line 545 "../common/dt_lex.l" return (DT_TOK_ADD_EQ); break; case 137: # line 546 "../common/dt_lex.l" return (DT_TOK_SUB_EQ); break; case 138: # line 547 "../common/dt_lex.l" return (DT_TOK_MUL_EQ); break; case 139: # line 548 "../common/dt_lex.l" return (DT_TOK_DIV_EQ); break; case 140: # line 549 "../common/dt_lex.l" return (DT_TOK_MOD_EQ); break; case 141: # line 550 "../common/dt_lex.l" return (DT_TOK_AND_EQ); break; case 142: # line 551 "../common/dt_lex.l" return (DT_TOK_XOR_EQ); break; case 143: # line 552 "../common/dt_lex.l" return (DT_TOK_OR_EQ); break; case 144: # line 553 "../common/dt_lex.l" return (DT_TOK_LSH_EQ); break; case 145: # line 554 "../common/dt_lex.l" return (DT_TOK_RSH_EQ); break; case 146: # line 555 "../common/dt_lex.l" return (DT_TOK_ADDADD); break; case 147: # line 556 "../common/dt_lex.l" return (DT_TOK_SUBSUB); break; case 148: # line 557 "../common/dt_lex.l" return (DT_TOK_ELLIPSIS); break; case 149: # line 558 "../common/dt_lex.l" return (DT_TOK_COMMA); break; case 150: # line 559 "../common/dt_lex.l" return (';'); break; case 151: # line 560 "../common/dt_lex.l" ; break; case 152: # line 561 "../common/dt_lex.l" ; break; case 153: # line 562 "../common/dt_lex.l" yyerror("syntax error near \"%c\"\n", yytext[0]); break; case 154: # line 564 "../common/dt_lex.l" yyerror("/* encountered inside a comment\n"); break; case 155: # line 565 "../common/dt_lex.l" BEGIN(yypcb->pcb_cstate); break; case 156: # line 566 "../common/dt_lex.l" ; break; case 157: # line 568 "../common/dt_lex.l" { /* * S2 has an ambiguity because RGX_PSPEC includes '*' * as a glob character and '*' also can be DT_TOK_STAR. * Since lex always matches the longest token, this * rule can be matched by an input string like "int*", * which could begin a global variable declaration such * as "int*x;" or could begin a RGX_PSPEC with globbing * such as "int* { trace(timestamp); }". If C_PSPEC is * not set, we must resolve the ambiguity in favor of * the type and perform lexer pushback if the fragment * before '*' or entire fragment matches a type name. * If C_PSPEC is set, we always return a PSPEC token. * If C_PSPEC is off, the user can avoid ambiguity by * including a ':' delimiter in the specifier, which * they should be doing anyway to specify the provider. */ if (!(yypcb->pcb_cflags & DTRACE_C_PSPEC) && strchr(yytext, ':') == NULL) { char *p = strchr(yytext, '*'); char *q = yytext + yyleng - 1; if (p != NULL && p > yytext) *p = '\0'; /* prune yytext */ if (dt_type_lookup(yytext, NULL) == 0) { yylval.l_str = strdup(yytext); if (yylval.l_str == NULL) { longjmp(yypcb->pcb_jmpbuf, EDT_NOMEM); } if (p != NULL && p > yytext) { for (*p = '*'; q >= p; q--) unput(*q); } yybegin(YYS_EXPR); return (DT_TOK_TNAME); } if (p != NULL && p > yytext) *p = '*'; /* restore yytext */ } if ((yylval.l_str = strdup(yytext)) == NULL) longjmp(yypcb->pcb_jmpbuf, EDT_NOMEM); return (DT_TOK_PSPEC); } break; case 158: # line 621 "../common/dt_lex.l" return (DT_TOK_DIV); break; case 159: # line 622 "../common/dt_lex.l" return (DT_TOK_COMMA); break; case 160: # line 624 "../common/dt_lex.l" ; break; case 161: # line 625 "../common/dt_lex.l" yyerror("syntax error near \"%c\"\n", yytext[0]); break; case 162: # line 627 "../common/dt_lex.l" { dt_pragma(yypragma); yypragma = NULL; BEGIN(yypcb->pcb_cstate); } break; case 163: # line 633 "../common/dt_lex.l" ; break; case 164: # line 635 "../common/dt_lex.l" { dt_node_t *dnp; if ((yylval.l_str = strdup(yytext)) == NULL) longjmp(yypcb->pcb_jmpbuf, EDT_NOMEM); /* * We want to call dt_node_ident() here, but we can't * because it will expand inlined identifiers, which we * don't want to do from #pragma context in order to * support pragmas that apply to the ident itself. We * call dt_node_string() and then reset dn_op instead. */ dnp = dt_node_string(yylval.l_str); dnp->dn_kind = DT_NODE_IDENT; dnp->dn_op = DT_TOK_IDENT; yypragma = dt_node_link(yypragma, dnp); } break; case 165: # line 654 "../common/dt_lex.l" yyerror("syntax error near \"%c\"\n", yytext[0]); break; case -1: break; default: (void)fprintf(yyout,"bad switch yylook %d",nstr); } return(0); } /* end of yylex */ # line 657 "../common/dt_lex.l" /* * yybegin provides a wrapper for use from C code around the lex BEGIN() macro. * We use two main states for lexing because probe descriptions use a syntax * that is incompatible with the normal D tokens (e.g. names can contain "-"). * yybegin also handles the job of switching between two lists of dt_nodes * as we allocate persistent definitions, like inlines, and transient nodes * that will be freed once we are done parsing the current program file. */ void yybegin(yystate_t state) { #ifdef YYDEBUG yydebug = _dtrace_debug; #endif if (yypcb->pcb_yystate == state) return; /* nothing to do if we're in the state already */ if (yypcb->pcb_yystate == YYS_DEFINE) { yypcb->pcb_list = yypcb->pcb_hold; yypcb->pcb_hold = NULL; } switch (state) { case YYS_CLAUSE: BEGIN(S2); break; case YYS_DEFINE: assert(yypcb->pcb_hold == NULL); yypcb->pcb_hold = yypcb->pcb_list; yypcb->pcb_list = NULL; /*FALLTHRU*/ case YYS_EXPR: BEGIN(S0); break; case YYS_DONE: break; case YYS_CONTROL: BEGIN(S4); break; default: xyerror(D_UNKNOWN, "internal error -- bad yystate %d\n", state); } yypcb->pcb_yystate = state; } void yyinit(dt_pcb_t *pcb) { yypcb = pcb; yylineno = 1; yypragma = NULL; yysptr = yysbuf; } /* * Given a lexeme 's' (typically yytext), set yylval and return an appropriate * token to the parser indicating either an identifier or a typedef name. * User-defined global variables always take precedence over types, but we do * use some heuristics because D programs can look at an ever-changing set of * kernel types and also can implicitly instantiate variables by assignment, * unlike in C. The code here is ordered carefully as lookups are not cheap. */ static int id_or_type(const char *s) { dtrace_hdl_t *dtp = yypcb->pcb_hdl; dt_decl_t *ddp = yypcb->pcb_dstack.ds_decl; int c0, c1, ttok = DT_TOK_TNAME; dt_ident_t *idp; if ((s = yylval.l_str = strdup(s)) == NULL) longjmp(yypcb->pcb_jmpbuf, EDT_NOMEM); /* * If the lexeme is a global variable or likely identifier or *not* a * type_name, then it is an identifier token. */ if (dt_idstack_lookup(&yypcb->pcb_globals, s) != NULL || dt_idhash_lookup(yypcb->pcb_idents, s) != NULL || dt_type_lookup(s, NULL) != 0) return (DT_TOK_IDENT); /* * If we're in the midst of parsing a declaration and a type_specifier * has already been shifted, then return DT_TOK_IDENT instead of TNAME. * This semantic is necessary to permit valid ISO C code such as: * * typedef int foo; * struct s { foo foo; }; * * without causing shift/reduce conflicts in the direct_declarator part * of the grammar. The result is that we must check for conflicting * redeclarations of the same identifier as part of dt_node_decl(). */ if (ddp != NULL && ddp->dd_name != NULL) return (DT_TOK_IDENT); /* * If the lexeme is a type name and we are not in a program clause, * then always interpret it as a type and return DT_TOK_TNAME. */ if ((YYSTATE) != S0) return (DT_TOK_TNAME); /* * If the lexeme matches a type name but is in a program clause, then * it could be a type or it could be an undefined variable. Peek at * the next token to decide. If we see ++, --, [, or =, we know there * might be an assignment that is trying to create a global variable, * so we optimistically return DT_TOK_IDENT. There is no harm in being * wrong: a type_name followed by ++, --, [, or = is a syntax error. */ while ((c0 = input()) != 0) { if (strchr("\f\n\r\t\v ", c0) == NULL) break; } switch (c0) { case '+': case '-': if ((c1 = input()) == c0) ttok = DT_TOK_IDENT; unput(c1); break; case '=': if ((c1 = input()) != c0) ttok = DT_TOK_IDENT; unput(c1); break; case '[': ttok = DT_TOK_IDENT; break; } if (ttok == DT_TOK_IDENT) { idp = dt_idhash_insert(yypcb->pcb_idents, s, DT_IDENT_SCALAR, 0, 0, _dtrace_defattr, 0, &dt_idops_thaw, NULL, dtp->dt_gen); if (idp == NULL) longjmp(yypcb->pcb_jmpbuf, EDT_NOMEM); } unput(c0); return (ttok); } static int input(void) { int c; if (yysptr > yysbuf) c = *--yysptr; else if (yypcb->pcb_fileptr != NULL) c = fgetc(yypcb->pcb_fileptr); else if (yypcb->pcb_strptr < yypcb->pcb_string + yypcb->pcb_strlen) c = *(unsigned char *)(yypcb->pcb_strptr++); else c = EOF; if (c == '\n') yylineno++; if (c != EOF) return (c); if ((YYSTATE) == S1) yyerror("end-of-file encountered before matching */\n"); if ((YYSTATE) == S3) yyerror("end-of-file encountered before end of control line\n"); if (yypcb->pcb_fileptr != NULL && ferror(yypcb->pcb_fileptr)) longjmp(yypcb->pcb_jmpbuf, EDT_FIO); return (0); /* EOF */ } static void unput(int c) { if (c == '\n') yylineno--; *yysptr++ = c; yytchar = c; } int yyvstop[] = { 0, 153, 0, 151, 153, 0, 151, 0, 130, 153, 0, 153, -88, 0, 153, 0, 128, 153, 0, 113, 153, 0, 153, -92, 0, 104, 153, 0, 105, 153, 0, 127, 153, 0, 125, 153, 0, 149, 153, 0, 126, 153, 0, 133, 153, 0, 103, 153, 0, 84, 87, 153, 0, 84, 87, 153, 0, 132, 153, 0, 150, 153, 0, 119, 153, 0, 135, 153, 0, 121, 153, 0, 131, 153, 0, 83, 153, 0, 79, 153, 0, 106, 153, 0, 153, 0, 107, 153, 0, 112, 153, 0, 79, 153, 0, 79, 153, 0, 79, 153, 0, 79, 153, 0, 79, 153, 0, 79, 153, 0, 79, 153, 0, 79, 153, 0, 79, 153, 0, 79, 153, 0, 79, 153, 0, 79, 153, 0, 79, 153, 0, 79, 153, 0, 79, 153, 0, 79, 153, 0, 79, 153, 0, 79, 153, 0, 108, 153, 0, 111, 153, 0, 110, 153, 0, 129, 153, 0, 151, 153, 0, 98, 153, 0, 156, 0, 156, 0, 156, 0, 161, 0, 160, 161, 0, 160, 0, 157, 161, 0, 159, 161, 0, 158, 161, 0, 85, 161, 0, 85, 161, 0, 157, 161, 0, 157, 161, 0, 157, 161, 0, 157, 161, 0, 157, 161, 0, 157, 161, 0, 157, 161, 0, 157, 161, 0, 157, 161, 0, 157, 161, 0, 157, 161, 0, 157, 161, 0, 157, 161, 0, 109, 161, 0, 160, 161, 0, 99, 161, 0, 164, 165, 0, 163, 165, 0, 162, 0, 165, -89, 0, 86, 164, 165, 0, 86, 164, 165, 0, 101, 0, 102, 0, 101, 0, 100, 101, 0, 118, 0, -88, 0, 88, 0, 90, 0, 76, 0, 78, 0, 140, 0, 114, 0, 141, 0, -92, 0, 92, 0, 93, 0, 138, 0, 146, 0, 136, 0, 147, 0, 137, 0, 134, 0, 87, 0, 94, 0, 139, 0, 87, 0, 84, 87, 0, 87, 0, 84, 87, 0, 84, 0, 123, 0, 120, 0, 117, 0, 122, 0, 124, 0, 82, 0, 79, 0, 79, 81, 0, 152, 0, 142, 0, 115, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 9, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 17, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 143, 0, 116, 0, 98, 0, 96, 0, 155, 0, 154, 0, 157, 0, 95, 0, 85, 0, 85, 0, 85, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 99, 0, 97, 0, 164, 0, 163, 0, -89, 0, 89, 0, 91, 0, 86, 164, 0, 86, 164, 0, 86, 164, 0, 164, 0, 100, 0, 75, 0, 77, 0, 148, 0, 87, 0, 84, 0, 84, 0, 84, 0, 144, 0, 145, 0, 81, 0, 79, 80, 0, 79, 80, 81, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 15, 79, 0, 79, 0, 79, 0, 79, 0, 20, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 85, 0, 85, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 57, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 86, 164, 0, 86, 164, 0, 80, 0, 80, 81, 0, 1, 79, 0, 79, 0, 3, 79, 0, 4, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 11, 79, 0, 12, 79, 0, 79, 0, 79, 0, 16, 79, 0, 79, 0, 79, 0, 21, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 28, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 37, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 43, 79, 0, 79, 0, 79, 0, 79, 0, 47, 157, 0, 48, 157, 0, 157, 0, 157, 0, 157, 0, 52, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 58, 157, 0, 157, 0, 157, 0, 157, 0, 62, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 68, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 73, 157, 0, 157, 0, 2, 79, 0, 5, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 14, 79, 0, 79, 0, 79, 0, 79, 0, 23, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 29, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 40, 79, 0, 79, 0, 79, 0, 79, 0, 45, 79, 0, 46, 79, 0, 49, 157, 0, 157, 0, 157, 0, 157, 0, 54, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 63, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 71, 157, 0, 157, 0, 157, 0, 79, 0, 79, 0, 79, 0, 10, 79, 0, 13, 79, 0, 18, 79, 0, 19, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 27, 79, 0, 30, 79, 0, 31, 79, 0, 32, 79, 0, 33, 79, 0, 35, 79, 0, 36, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 157, 0, 51, 157, 0, 53, 157, 0, 55, 157, 0, 56, 157, 0, 157, 0, 157, 0, 157, 0, 64, 157, 0, 65, 157, 0, 66, 157, 0, 67, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 79, 0, 7, 79, 0, 8, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 39, 79, 0, 79, 0, 79, 0, 79, 0, 50, 157, 0, 157, 0, 157, 0, 157, 0, 157, 0, 70, 157, 0, 157, 0, 157, 0, 6, 79, 0, 22, 79, 0, 24, 79, 0, 25, 79, 0, 26, 79, 0, 34, 79, 0, 79, 0, 41, 79, 0, 42, 79, 0, 44, 79, 0, 59, 157, 0, 60, 157, 0, 61, 157, 0, 157, 0, 72, 157, 0, 74, 157, 0, 79, 0, 157, 0, 38, 79, 0, 69, 157, 0, 0}; # define YYTYPE int struct yywork { YYTYPE verify, advance; } yycrank[] = { 0,0, 0,0, 3,13, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 3,14, 3,15, 41,146, 0,0, 3,14, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 3,16, 3,17, 67,186, 3,18, 3,19, 3,20, 3,21, 3,22, 3,23, 3,24, 3,25, 3,26, 3,27, 3,28, 3,29, 3,30, 3,31, 3,31, 3,31, 3,31, 3,31, 3,31, 3,31, 3,31, 3,31, 3,32, 3,33, 3,34, 3,35, 3,36, 3,37, 3,38, 3,39, 16,105, 6,69, 19,113, 12,103, 3,39, 3,39, 6,70, 24,120, 34,137, 34,138, 3,39, 35,139, 36,140, 36,141, 43,147, 69,187, 70,188, 20,114, 76,190, 3,39, 94,218, 126,233, 3,39, 25,121, 29,128, 3,40, 3,41, 3,42, 3,43, 12,104, 3,39, 3,44, 3,45, 3,46, 3,47, 3,48, 3,49, 3,50, 4,66, 3,51, 20,115, 25,122, 3,52, 29,129, 53,166, 3,53, 3,54, 43,148, 3,55, 3,56, 3,57, 3,58, 3,59, 3,60, 3,61, 44,149, 45,150, 3,62, 3,63, 3,64, 3,65, 46,151, 50,161, 52,165, 4,67, 4,18, 4,19, 4,20, 46,152, 4,22, 4,23, 4,24, 4,25, 4,26, 4,27, 46,153, 4,29, 54,167, 4,31, 4,31, 4,31, 4,31, 4,31, 4,31, 4,31, 4,31, 4,31, 4,32, 4,33, 4,34, 4,35, 4,36, 4,37, 4,38, 10,100, 10,100, 10,100, 10,100, 10,100, 10,100, 10,100, 10,100, 10,100, 49,159, 55,168, 59,179, 49,160, 28,126, 27,123, 28,127, 28,127, 28,127, 28,127, 28,127, 28,127, 28,127, 28,127, 28,127, 28,127, 60,180, 4,40, 61,181, 4,42, 4,43, 27,124, 27,125, 4,44, 4,45, 4,46, 4,47, 4,48, 4,49, 4,50, 58,177, 4,51, 63,182, 79,195, 4,52, 58,178, 81,198, 4,53, 4,54, 83,201, 4,55, 4,56, 4,57, 4,58, 4,59, 4,60, 4,61, 5,68, 47,154, 4,62, 4,63, 4,64, 4,65, 85,204, 80,196, 5,68, 5,68, 51,162, 47,155, 5,68, 48,156, 80,197, 48,157, 56,169, 51,163, 51,164, 56,170, 56,171, 84,202, 84,203, 86,205, 87,206, 48,158, 57,174, 66,184, 90,214, 66,184, 66,184, 56,172, 5,68, 5,68, 56,173, 91,215, 57,175, 137,239, 5,68, 82,199, 134,236, 5,69, 89,211, 57,176, 109,0, 5,68, 5,70, 5,68, 63,183, 82,200, 66,184, 88,207, 89,212, 66,185, 88,208, 88,209, 119,0, 135,237, 141,240, 89,213, 93,216, 149,244, 93,216, 93,216, 5,68, 7,71, 88,210, 150,245, 109,106, 5,68, 5,68, 151,246, 134,236, 7,72, 7,73, 5,68, 96,220, 7,72, 96,220, 96,220, 152,247, 153,248, 154,250, 93,216, 5,68, 119,116, 93,217, 5,68, 153,249, 135,237, 155,251, 5,68, 156,252, 157,253, 158,254, 5,68, 159,255, 7,74, 7,71, 96,220, 160,256, 161,257, 103,229, 7,71, 103,229, 103,229, 163,258, 165,261, 7,75, 166,262, 7,74, 7,76, 7,77, 7,78, 7,78, 7,78, 7,78, 7,78, 7,78, 7,78, 7,78, 7,78, 164,259, 167,263, 168,264, 103,229, 109,106, 169,267, 103,230, 7,74, 164,260, 170,268, 171,269, 172,271, 7,74, 7,74, 168,265, 168,266, 119,116, 173,273, 7,74, 174,274, 175,275, 176,276, 177,277, 178,279, 180,282, 181,283, 8,93, 7,74, 172,272, 171,270, 7,74, 192,284, 177,278, 179,280, 7,74, 195,286, 179,281, 196,287, 7,71, 7,79, 198,290, 7,80, 7,81, 7,82, 7,83, 193,192, 197,288, 7,84, 199,291, 200,292, 7,85, 201,293, 8,94, 197,289, 7,86, 202,294, 7,87, 7,88, 7,89, 7,90, 7,91, 8,75, 204,297, 192,284, 8,76, 7,92, 8,78, 8,78, 8,78, 8,78, 8,78, 8,78, 8,78, 8,78, 8,78, 205,298, 207,301, 193,192, 78,191, 78,191, 78,191, 78,191, 78,191, 78,191, 78,191, 78,191, 78,191, 78,191, 111,111, 111,111, 111,111, 111,111, 111,111, 111,111, 111,111, 111,111, 111,111, 111,111, 206,299, 203,295, 208,302, 209,303, 211,306, 212,307, 213,308, 215,311, 78,192, 203,296, 215,312, 210,304, 206,300, 244,317, 9,95, 214,309, 8,79, 78,193, 8,80, 8,81, 8,82, 8,83, 9,96, 9,97, 8,84, 214,310, 9,95, 8,85, 210,305, 224,0, 245,318, 8,86, 246,319, 8,87, 8,88, 8,89, 8,90, 8,91, 247,320, 249,323, 78,192, 250,324, 8,92, 248,321, 248,322, 251,325, 9,95, 9,98, 11,101, 78,193, 252,326, 253,327, 9,95, 224,221, 254,328, 255,329, 11,101, 11,102, 257,330, 9,95, 11,101, 9,99, 9,100, 9,100, 9,100, 9,100, 9,100, 9,100, 9,100, 9,100, 9,100, 258,331, 259,332, 261,333, 99,0, 99,0, 99,0, 99,0, 9,95, 262,334, 11,101, 11,101, 17,106, 9,95, 9,95, 264,337, 11,101, 263,335, 265,338, 9,95, 17,106, 17,107, 266,339, 11,101, 17,106, 11,101, 235,133, 99,0, 9,95, 99,0, 267,340, 9,95, 235,133, 268,341, 269,342, 9,95, 270,343, 263,336, 271,344, 9,95, 273,347, 224,221, 11,101, 99,225, 17,106, 17,108, 274,348, 11,101, 11,101, 275,349, 17,106, 272,345, 238,237, 11,101, 276,350, 277,351, 278,352, 17,106, 235,133, 17,106, 279,353, 238,135, 11,101, 272,346, 235,133, 11,101, 280,354, 281,355, 282,356, 11,101, 283,357, 99,226, 286,358, 11,101, 287,359, 288,360, 17,106, 289,361, 290,362, 291,363, 99,227, 17,106, 17,106, 99,228, 238,237, 292,364, 293,365, 17,106, 294,366, 295,367, 297,368, 298,369, 299,370, 238,135, 300,371, 301,372, 17,106, 18,110, 302,373, 17,106, 303,374, 304,375, 306,378, 17,109, 307,379, 308,380, 309,381, 17,106, 305,376, 18,111, 18,111, 18,111, 18,111, 18,111, 18,111, 18,111, 18,111, 18,111, 18,111, 310,382, 305,377, 311,383, 312,384, 318,385, 321,386, 322,387, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 323,388, 324,389, 325,390, 328,391, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 18,112, 21,116, 100,0, 100,0, 100,0, 100,0, 329,392, 331,393, 332,394, 21,116, 21,117, 334,395, 30,130, 21,116, 30,131, 30,131, 30,131, 30,131, 30,131, 30,131, 30,131, 30,131, 30,131, 30,131, 335,396, 100,0, 336,397, 100,0, 337,398, 338,399, 339,400, 341,401, 342,402, 21,116, 21,116, 30,132, 30,133, 343,403, 344,404, 21,118, 285,192, 100,225, 30,134, 345,405, 346,406, 347,407, 21,116, 349,408, 21,116, 285,193, 350,409, 30,135, 351,410, 352,411, 30,136, 130,130, 130,130, 130,130, 130,130, 130,130, 130,130, 130,130, 130,130, 130,130, 130,130, 21,116, 353,412, 30,132, 30,133, 100,226, 21,116, 21,116, 285,192, 355,413, 30,134, 356,414, 21,116, 357,415, 100,227, 360,416, 361,417, 285,193, 362,418, 30,135, 364,419, 21,116, 30,136, 365,420, 21,116, 366,421, 367,422, 369,423, 21,119, 370,424, 371,425, 31,130, 21,116, 31,131, 31,131, 31,131, 31,131, 31,131, 31,131, 31,131, 31,131, 31,131, 31,131, 142,142, 142,142, 142,142, 142,142, 142,142, 142,142, 142,142, 142,142, 142,142, 142,142, 373,426, 31,132, 31,133, 374,427, 375,428, 376,429, 377,430, 379,431, 31,134, 380,432, 381,433, 382,434, 384,435, 132,234, 387,436, 132,234, 388,437, 31,135, 132,235, 132,235, 132,235, 132,235, 132,235, 132,235, 132,235, 132,235, 132,235, 132,235, 389,438, 390,439, 391,440, 393,441, 394,442, 31,132, 31,133, 395,443, 397,444, 398,445, 399,446, 400,447, 31,134, 402,448, 403,449, 404,450, 405,451, 406,452, 407,453, 408,454, 409,455, 31,135, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 411,456, 412,457, 413,458, 417,459, 38,142, 418,460, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 38,142, 39,143, 419,461, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 421,462, 422,463, 423,464, 424,465, 425,466, 427,467, 428,468, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 429,469, 430,470, 431,471, 432,472, 39,144, 39,145, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 39,144, 74,189, 434,473, 435,474, 74,189, 219,0, 219,0, 219,0, 219,0, 436,475, 74,189, 437,476, 438,477, 74,189, 74,189, 443,478, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 444,479, 219,0, 445,480, 219,0, 74,189, 446,481, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 451,482, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 74,189, 77,191, 77,191, 77,191, 77,191, 77,191, 77,191, 77,191, 77,191, 77,191, 77,191, 95,219, 225,0, 225,0, 225,0, 225,0, 454,483, 455,484, 456,485, 95,0, 95,0, 95,0, 95,0, 95,219, 457,486, 313,0, 313,0, 313,0, 313,0, 77,192, 458,487, 459,488, 464,489, 465,490, 466,491, 225,0, 471,492, 225,0, 77,193, 472,493, 473,494, 77,194, 95,0, 95,219, 95,0, 98,221, 474,495, 475,496, 313,0, 95,219, 313,0, 225,225, 478,497, 98,221, 98,222, 479,498, 95,219, 98,221, 95,219, 480,499, 481,500, 77,192, 482,501, 483,502, 226,0, 226,0, 226,0, 226,0, 485,503, 486,504, 77,193, 487,505, 489,506, 77,194, 490,507, 95,219, 491,508, 98,221, 98,223, 225,226, 95,219, 95,219, 492,509, 98,221, 494,510, 495,511, 95,219, 226,0, 225,227, 226,0, 98,221, 502,512, 98,221, 509,513, 512,514, 95,219, 513,515, 0,0, 95,219, 0,0, 0,0, 0,0, 95,219, 0,0, 0,0, 0,0, 95,219, 0,0, 0,0, 98,221, 0,0, 0,0, 0,0, 0,0, 98,221, 98,221, 0,0, 0,0, 0,0, 0,0, 98,221, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 98,221, 0,0, 226,313, 98,221, 0,0, 0,0, 0,0, 98,224, 0,0, 0,0, 0,0, 98,221, 110,231, 110,231, 110,231, 110,231, 110,231, 110,231, 110,231, 110,231, 110,231, 110,231, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 0,0, 0,0, 0,0, 0,0, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 110,232, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 0,0, 0,0, 0,0, 0,0, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 112,112, 127,127, 127,127, 127,127, 127,127, 127,127, 127,127, 127,127, 127,127, 127,127, 127,127, 231,231, 231,231, 231,231, 231,231, 231,231, 231,231, 231,231, 231,231, 231,231, 231,231, 0,0, 127,132, 127,133, 0,0, 0,0, 0,0, 0,0, 0,0, 127,133, 136,238, 136,238, 136,238, 136,238, 136,238, 136,238, 136,238, 136,238, 136,238, 136,238, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 136,238, 136,238, 136,238, 136,238, 136,238, 136,238, 0,0, 127,132, 127,133, 0,0, 0,0, 0,0, 0,0, 0,0, 127,133, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 0,0, 136,238, 136,238, 136,238, 136,238, 136,238, 136,238, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 0,0, 0,0, 0,0, 0,0, 143,143, 143,241, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 143,143, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 0,0, 0,0, 0,0, 0,0, 145,242, 145,243, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 145,242, 186,186, 227,0, 227,0, 227,0, 227,0, 0,0, 0,0, 0,0, 186,186, 186,0, 0,0, 0,0, 186,186, 0,0, 0,0, 0,0, 228,0, 228,0, 228,0, 228,0, 0,0, 0,0, 0,0, 0,0, 227,0, 0,0, 227,0, 0,0, 0,0, 0,0, 0,0, 0,0, 186,186, 186,186, 0,0, 0,0, 0,0, 0,0, 186,186, 228,0, 0,0, 228,0, 0,0, 0,0, 0,0, 186,186, 0,0, 186,186, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 228,314, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 186,186, 0,0, 0,0, 0,0, 227,226, 186,186, 186,186, 0,0, 228,314, 0,0, 0,0, 186,186, 0,0, 228,314, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 186,186, 0,0, 0,0, 186,186, 0,0, 0,0, 0,0, 186,186, 0,0, 0,0, 0,0, 186,186, 194,285, 194,285, 194,285, 194,285, 194,285, 194,285, 194,285, 194,285, 194,285, 194,285, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 194,285, 194,285, 194,285, 194,285, 194,285, 194,285, 218,218, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 218,218, 218,0, 0,0, 0,0, 218,218, 232,232, 232,232, 232,232, 232,232, 232,232, 232,232, 232,232, 232,232, 232,232, 232,232, 0,0, 0,0, 0,0, 194,285, 194,285, 194,285, 194,285, 194,285, 194,285, 218,218, 218,218, 0,0, 0,0, 0,0, 0,0, 218,218, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 218,218, 0,0, 218,218, 234,235, 234,235, 234,235, 234,235, 234,235, 234,235, 234,235, 234,235, 234,235, 234,235, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 218,218, 0,0, 0,0, 0,0, 0,0, 218,218, 218,218, 0,0, 0,0, 0,0, 0,0, 218,218, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 218,218, 0,0, 0,0, 218,218, 0,0, 0,0, 0,0, 218,218, 0,0, 0,0, 0,0, 218,218, 241,143, 241,143, 241,143, 241,143, 241,143, 241,143, 241,143, 241,143, 241,143, 241,143, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 0,0, 0,0, 0,0, 0,0, 241,315, 241,316, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 241,315, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 0,0, 0,0, 0,0, 0,0, 242,242, 242,243, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 242,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 0,0, 0,0, 0,0, 0,0, 243,242, 243,243, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 243,242, 314,0, 314,0, 314,0, 314,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 314,0, 0,0, 314,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 314,314, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 314,314, 0,0, 0,0, 0,0, 0,0, 314,314, 0,0, 0,0, 0,0, 0,0, 0,0, 314,226, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 314,227, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 0,0, 0,0, 0,0, 0,0, 315,315, 315,316, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 315,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 0,0, 0,0, 0,0, 0,0, 316,315, 316,316, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 316,315, 0,0, 0,0}; struct yysvf yysvec[] = { 0, 0, 0, yycrank+0, 0, 0, yycrank+0, 0, 0, yycrank+-1, 0, 0, yycrank+-96, yysvec+3, 0, yycrank+-216, 0, 0, yycrank+-26, yysvec+5, 0, yycrank+-281, 0, 0, yycrank+-356, yysvec+7, 0, yycrank+-450, 0, 0, yycrank+-112, yysvec+9, 0, yycrank+-484, 0, 0, yycrank+-61, yysvec+11, 0, yycrank+0, 0, yyvstop+1, yycrank+0, 0, yyvstop+3, yycrank+0, 0, yyvstop+6, yycrank+6, 0, yyvstop+8, yycrank+-518, 0, yyvstop+11, yycrank+568, 0, yyvstop+14, yycrank+8, 0, yyvstop+16, yycrank+46, 0, yyvstop+19, yycrank+-690, 0, yyvstop+22, yycrank+0, 0, yyvstop+25, yycrank+0, 0, yyvstop+28, yycrank+13, 0, yyvstop+31, yycrank+47, 0, yyvstop+34, yycrank+0, 0, yyvstop+37, yycrank+130, 0, yyvstop+40, yycrank+128, 0, yyvstop+43, yycrank+49, 0, yyvstop+46, yycrank+656, 0, yyvstop+49, yycrank+739, 0, yyvstop+53, yycrank+0, 0, yyvstop+57, yycrank+0, 0, yyvstop+60, yycrank+15, 0, yyvstop+63, yycrank+17, 0, yyvstop+66, yycrank+18, 0, yyvstop+69, yycrank+0, 0, yyvstop+72, yycrank+792, 0, yyvstop+75, yycrank+869, 0, yyvstop+78, yycrank+0, 0, yyvstop+81, yycrank+2, 0, yyvstop+84, yycrank+0, 0, yyvstop+86, yycrank+20, 0, yyvstop+89, yycrank+5, yysvec+39, yyvstop+92, yycrank+9, yysvec+39, yyvstop+95, yycrank+31, yysvec+39, yyvstop+98, yycrank+117, yysvec+39, yyvstop+101, yycrank+122, yysvec+39, yyvstop+104, yycrank+62, yysvec+39, yyvstop+107, yycrank+18, yysvec+39, yyvstop+110, yycrank+125, yysvec+39, yyvstop+113, yycrank+19, yysvec+39, yyvstop+116, yycrank+9, yysvec+39, yyvstop+119, yycrank+30, yysvec+39, yyvstop+122, yycrank+70, yysvec+39, yyvstop+125, yycrank+132, yysvec+39, yyvstop+128, yycrank+139, yysvec+39, yyvstop+131, yycrank+90, yysvec+39, yyvstop+134, yycrank+61, yysvec+39, yyvstop+137, yycrank+82, yysvec+39, yyvstop+140, yycrank+80, yysvec+39, yyvstop+143, yycrank+0, 0, yyvstop+146, yycrank+141, 0, yyvstop+149, yycrank+0, 0, yyvstop+152, yycrank+0, 0, yyvstop+155, yycrank+235, 0, yyvstop+158, yycrank+3, 0, yyvstop+161, yycrank+0, 0, yyvstop+164, yycrank+35, 0, yyvstop+166, yycrank+41, 0, yyvstop+168, yycrank+0, 0, yyvstop+170, yycrank+0, 0, yyvstop+172, yycrank+0, 0, yyvstop+175, yycrank+959, 0, yyvstop+177, yycrank+0, 0, yyvstop+180, yycrank+43, 0, yyvstop+183, yycrank+1034, 0, yyvstop+186, yycrank+369, 0, yyvstop+189, yycrank+86, yysvec+74, yyvstop+192, yycrank+120, yysvec+74, yyvstop+195, yycrank+95, yysvec+74, yyvstop+198, yycrank+146, yysvec+74, yyvstop+201, yycrank+101, yysvec+74, yyvstop+204, yycrank+129, yysvec+74, yyvstop+207, yycrank+112, yysvec+74, yyvstop+210, yycrank+126, yysvec+74, yyvstop+213, yycrank+140, yysvec+74, yyvstop+216, yycrank+167, yysvec+74, yyvstop+219, yycrank+155, yysvec+74, yyvstop+222, yycrank+135, yysvec+74, yyvstop+225, yycrank+141, yysvec+74, yyvstop+228, yycrank+0, 0, yyvstop+231, yycrank+268, 0, yyvstop+234, yycrank+54, 0, yyvstop+237, yycrank+-1091, 0, yyvstop+240, yycrank+284, 0, yyvstop+243, yycrank+0, 0, yyvstop+246, yycrank+-1125, 0, yyvstop+248, yycrank+-502, yysvec+95, yyvstop+251, yycrank+-683, yysvec+95, yyvstop+255, yycrank+0, 0, yyvstop+259, yycrank+0, 0, yyvstop+261, yycrank+310, 0, yyvstop+263, yycrank+0, 0, yyvstop+265, yycrank+0, 0, yyvstop+268, yycrank+0, yysvec+17, yyvstop+270, yycrank+0, 0, yyvstop+272, yycrank+0, 0, yyvstop+274, yycrank+-251, yysvec+17, 0, yycrank+1174, 0, 0, yycrank+379, 0, yyvstop+276, yycrank+1249, 0, yyvstop+278, yycrank+0, 0, yyvstop+280, yycrank+0, 0, yyvstop+282, yycrank+0, 0, yyvstop+284, yycrank+0, yysvec+21, yyvstop+286, yycrank+0, 0, yyvstop+288, yycrank+0, 0, yyvstop+290, yycrank+-263, yysvec+21, 0, yycrank+0, 0, yyvstop+292, yycrank+0, 0, yyvstop+294, yycrank+0, 0, yyvstop+296, yycrank+0, 0, yyvstop+298, yycrank+0, 0, yyvstop+300, yycrank+0, 0, yyvstop+302, yycrank+42, 0, 0, yycrank+1324, 0, yyvstop+304, yycrank+0, 0, yyvstop+306, yycrank+0, 0, yyvstop+308, yycrank+697, yysvec+127, yyvstop+310, yycrank+0, yysvec+31, yyvstop+312, yycrank+777, 0, 0, yycrank+0, 0, yyvstop+315, yycrank+181, 0, yyvstop+317, yycrank+198, 0, yyvstop+320, yycrank+1353, 0, 0, yycrank+193, 0, yyvstop+322, yycrank+0, 0, yyvstop+324, yycrank+0, 0, yyvstop+326, yycrank+0, 0, yyvstop+328, yycrank+214, 0, yyvstop+330, yycrank+749, yysvec+38, yyvstop+332, yycrank+1391, yysvec+39, 0, yycrank+0, yysvec+39, yyvstop+334, yycrank+1449, yysvec+39, yyvstop+336, yycrank+0, 0, yyvstop+339, yycrank+0, 0, yyvstop+341, yycrank+0, 0, yyvstop+343, yycrank+162, yysvec+39, yyvstop+345, yycrank+183, yysvec+39, yyvstop+347, yycrank+173, yysvec+39, yyvstop+349, yycrank+200, yysvec+39, yyvstop+351, yycrank+188, yysvec+39, yyvstop+353, yycrank+197, yysvec+39, yyvstop+355, yycrank+190, yysvec+39, yyvstop+357, yycrank+194, yysvec+39, yyvstop+360, yycrank+193, yysvec+39, yyvstop+362, yycrank+195, yysvec+39, yyvstop+364, yycrank+202, yysvec+39, yyvstop+366, yycrank+203, yysvec+39, yyvstop+368, yycrank+202, yysvec+39, yyvstop+370, yycrank+0, yysvec+39, yyvstop+372, yycrank+211, yysvec+39, yyvstop+375, yycrank+231, yysvec+39, yyvstop+377, yycrank+214, yysvec+39, yyvstop+379, yycrank+224, yysvec+39, yyvstop+381, yycrank+229, yysvec+39, yyvstop+383, yycrank+238, yysvec+39, yyvstop+385, yycrank+236, yysvec+39, yyvstop+387, yycrank+237, yysvec+39, yyvstop+389, yycrank+246, yysvec+39, yyvstop+391, yycrank+253, yysvec+39, yyvstop+393, yycrank+251, yysvec+39, yyvstop+395, yycrank+253, yysvec+39, yyvstop+397, yycrank+262, yysvec+39, yyvstop+399, yycrank+248, yysvec+39, yyvstop+401, yycrank+256, yysvec+39, yyvstop+403, yycrank+261, yysvec+39, yyvstop+405, yycrank+267, yysvec+39, yyvstop+407, yycrank+258, yysvec+39, yyvstop+409, yycrank+267, yysvec+39, yyvstop+411, yycrank+0, 0, yyvstop+413, yycrank+0, 0, yyvstop+415, yycrank+0, yysvec+66, 0, yycrank+0, yysvec+67, yyvstop+417, yycrank+-1571, 0, yyvstop+419, yycrank+0, 0, yyvstop+421, yycrank+0, 0, yyvstop+423, yycrank+0, yysvec+74, yyvstop+425, yycrank+0, 0, yyvstop+427, yycrank+0, yysvec+78, yyvstop+429, yycrank+294, 0, yyvstop+431, yycrank+308, 0, yyvstop+433, yycrank+1620, 0, 0, yycrank+258, yysvec+74, yyvstop+435, yycrank+279, yysvec+74, yyvstop+437, yycrank+275, yysvec+74, yyvstop+439, yycrank+262, yysvec+74, yyvstop+441, yycrank+270, yysvec+74, yyvstop+443, yycrank+272, yysvec+74, yyvstop+445, yycrank+279, yysvec+74, yyvstop+447, yycrank+282, yysvec+74, yyvstop+449, yycrank+330, yysvec+74, yyvstop+451, yycrank+291, yysvec+74, yyvstop+453, yycrank+303, yysvec+74, yyvstop+455, yycrank+334, yysvec+74, yyvstop+457, yycrank+307, yysvec+74, yyvstop+459, yycrank+328, yysvec+74, yyvstop+461, yycrank+337, yysvec+74, yyvstop+463, yycrank+351, yysvec+74, yyvstop+465, yycrank+336, yysvec+74, yyvstop+467, yycrank+345, yysvec+74, yyvstop+469, yycrank+331, yysvec+74, yyvstop+471, yycrank+347, yysvec+74, yyvstop+473, yycrank+339, yysvec+74, yyvstop+475, yycrank+0, yysvec+93, 0, yycrank+0, yysvec+94, yyvstop+477, yycrank+-1690, 0, yyvstop+479, yycrank+-987, yysvec+95, yyvstop+481, yycrank+0, yysvec+96, yyvstop+483, yycrank+0, yysvec+98, yyvstop+485, yycrank+0, 0, yyvstop+487, yycrank+0, 0, yyvstop+489, yycrank+-456, yysvec+98, 0, yycrank+-1084, yysvec+95, yyvstop+491, yycrank+-1136, yysvec+95, yyvstop+494, yycrank+-1564, yysvec+95, yyvstop+497, yycrank+-1579, yysvec+95, yyvstop+500, yycrank+0, yysvec+103, 0, yycrank+0, 0, yyvstop+502, yycrank+1334, 0, yyvstop+504, yycrank+1656, yysvec+110, yyvstop+506, yycrank+0, 0, yyvstop+508, yycrank+1691, 0, 0, yycrank+463, yysvec+234, yyvstop+510, yycrank+0, 0, yyvstop+512, yycrank+0, yysvec+134, yyvstop+514, yycrank+483, yysvec+136, yyvstop+516, yycrank+0, 0, yyvstop+518, yycrank+0, 0, yyvstop+520, yycrank+1739, yysvec+39, yyvstop+522, yycrank+1814, yysvec+39, yyvstop+524, yycrank+1889, yysvec+39, yyvstop+527, yycrank+339, yysvec+39, yyvstop+531, yycrank+370, yysvec+39, yyvstop+533, yycrank+368, yysvec+39, yyvstop+535, yycrank+361, yysvec+39, yyvstop+537, yycrank+365, yysvec+39, yyvstop+539, yycrank+366, yysvec+39, yyvstop+541, yycrank+381, yysvec+39, yyvstop+543, yycrank+384, yysvec+39, yyvstop+545, yycrank+386, yysvec+39, yyvstop+547, yycrank+379, yysvec+39, yyvstop+549, yycrank+390, yysvec+39, yyvstop+551, yycrank+395, yysvec+39, yyvstop+553, yycrank+0, yysvec+39, yyvstop+555, yycrank+384, yysvec+39, yyvstop+558, yycrank+397, yysvec+39, yyvstop+560, yycrank+404, yysvec+39, yyvstop+562, yycrank+0, yysvec+39, yyvstop+564, yycrank+407, yysvec+39, yyvstop+567, yycrank+401, yysvec+39, yyvstop+569, yycrank+426, yysvec+39, yyvstop+571, yycrank+417, yysvec+39, yyvstop+573, yycrank+409, yysvec+39, yyvstop+575, yycrank+412, yysvec+39, yyvstop+577, yycrank+435, yysvec+39, yyvstop+579, yycrank+426, yysvec+39, yyvstop+581, yycrank+431, yysvec+39, yyvstop+583, yycrank+442, yysvec+39, yyvstop+585, yycrank+429, yysvec+39, yyvstop+587, yycrank+453, yysvec+39, yyvstop+589, yycrank+431, yysvec+39, yyvstop+591, yycrank+438, yysvec+39, yyvstop+593, yycrank+446, yysvec+39, yyvstop+595, yycrank+460, yysvec+39, yyvstop+597, yycrank+451, yysvec+39, yyvstop+599, yycrank+458, yysvec+39, yyvstop+601, yycrank+453, yysvec+39, yyvstop+603, yycrank+473, yysvec+39, yyvstop+605, yycrank+477, yysvec+39, yyvstop+607, yycrank+467, yysvec+39, yyvstop+609, yycrank+461, yysvec+39, yyvstop+611, yycrank+0, 0, yyvstop+613, yycrank+654, yysvec+194, yyvstop+615, yycrank+468, yysvec+74, yyvstop+617, yycrank+467, yysvec+74, yyvstop+619, yycrank+467, yysvec+74, yyvstop+621, yycrank+474, yysvec+74, yyvstop+623, yycrank+487, yysvec+74, yyvstop+625, yycrank+477, yysvec+74, yyvstop+627, yycrank+491, yysvec+74, yyvstop+629, yycrank+496, yysvec+74, yyvstop+631, yycrank+484, yysvec+74, yyvstop+633, yycrank+491, yysvec+74, yyvstop+635, yycrank+0, yysvec+74, yyvstop+637, yycrank+494, yysvec+74, yyvstop+640, yycrank+480, yysvec+74, yyvstop+642, yycrank+494, yysvec+74, yyvstop+644, yycrank+485, yysvec+74, yyvstop+646, yycrank+500, yysvec+74, yyvstop+648, yycrank+491, yysvec+74, yyvstop+650, yycrank+497, yysvec+74, yyvstop+652, yycrank+492, yysvec+74, yyvstop+654, yycrank+510, yysvec+74, yyvstop+656, yycrank+494, yysvec+74, yyvstop+658, yycrank+501, yysvec+74, yyvstop+660, yycrank+511, yysvec+74, yyvstop+662, yycrank+502, yysvec+74, yyvstop+664, yycrank+521, yysvec+74, yyvstop+666, yycrank+528, yysvec+74, yyvstop+668, yycrank+532, yysvec+74, yyvstop+670, yycrank+-1097, yysvec+95, yyvstop+672, yycrank+-2003, yysvec+95, yyvstop+675, yycrank+2041, yysvec+39, yyvstop+678, yycrank+2116, yysvec+39, yyvstop+680, yycrank+0, yysvec+39, yyvstop+683, yycrank+523, yysvec+39, yyvstop+686, yycrank+0, yysvec+39, yyvstop+688, yycrank+0, yysvec+39, yyvstop+691, yycrank+515, yysvec+39, yyvstop+694, yycrank+527, yysvec+39, yyvstop+696, yycrank+543, yysvec+39, yyvstop+698, yycrank+543, yysvec+39, yyvstop+700, yycrank+553, yysvec+39, yyvstop+702, yycrank+0, yysvec+39, yyvstop+704, yycrank+0, yysvec+39, yyvstop+707, yycrank+548, yysvec+39, yyvstop+710, yycrank+580, yysvec+39, yyvstop+712, yycrank+0, yysvec+39, yyvstop+714, yycrank+583, yysvec+39, yyvstop+717, yycrank+588, yysvec+39, yyvstop+719, yycrank+0, yysvec+39, yyvstop+721, yycrank+600, yysvec+39, yyvstop+724, yycrank+613, yysvec+39, yyvstop+726, yycrank+611, yysvec+39, yyvstop+728, yycrank+603, yysvec+39, yyvstop+730, yycrank+605, yysvec+39, yyvstop+732, yycrank+606, yysvec+39, yyvstop+734, yycrank+0, yysvec+39, yyvstop+736, yycrank+605, yysvec+39, yyvstop+739, yycrank+621, yysvec+39, yyvstop+741, yycrank+616, yysvec+39, yyvstop+743, yycrank+623, yysvec+39, yyvstop+745, yycrank+623, yysvec+39, yyvstop+747, yycrank+635, yysvec+39, yyvstop+749, yycrank+636, yysvec+39, yyvstop+751, yycrank+0, yysvec+39, yyvstop+753, yycrank+622, yysvec+39, yyvstop+756, yycrank+640, yysvec+39, yyvstop+758, yycrank+632, yysvec+39, yyvstop+760, yycrank+640, yysvec+39, yyvstop+762, yycrank+648, yysvec+39, yyvstop+764, yycrank+0, yysvec+39, yyvstop+766, yycrank+647, yysvec+39, yyvstop+769, yycrank+664, yysvec+39, yyvstop+771, yycrank+666, yysvec+39, yyvstop+773, yycrank+0, yysvec+74, yyvstop+775, yycrank+0, yysvec+74, yyvstop+778, yycrank+653, yysvec+74, yyvstop+781, yycrank+654, yysvec+74, yyvstop+783, yycrank+664, yysvec+74, yyvstop+785, yycrank+0, yysvec+74, yyvstop+787, yycrank+660, yysvec+74, yyvstop+790, yycrank+661, yysvec+74, yyvstop+792, yycrank+665, yysvec+74, yyvstop+794, yycrank+670, yysvec+74, yyvstop+796, yycrank+0, yysvec+74, yyvstop+798, yycrank+676, yysvec+74, yyvstop+801, yycrank+668, yysvec+74, yyvstop+803, yycrank+670, yysvec+74, yyvstop+805, yycrank+0, yysvec+74, yyvstop+807, yycrank+691, yysvec+74, yyvstop+810, yycrank+709, yysvec+74, yyvstop+812, yycrank+706, yysvec+74, yyvstop+814, yycrank+702, yysvec+74, yyvstop+816, yycrank+714, yysvec+74, yyvstop+818, yycrank+0, yysvec+74, yyvstop+820, yycrank+699, yysvec+74, yyvstop+823, yycrank+716, yysvec+74, yyvstop+825, yycrank+707, yysvec+74, yyvstop+827, yycrank+715, yysvec+74, yyvstop+829, yycrank+0, yysvec+74, yyvstop+831, yycrank+703, yysvec+74, yyvstop+834, yycrank+0, yysvec+39, yyvstop+836, yycrank+0, yysvec+39, yyvstop+839, yycrank+711, yysvec+39, yyvstop+842, yycrank+722, yysvec+39, yyvstop+844, yycrank+727, yysvec+39, yyvstop+846, yycrank+735, yysvec+39, yyvstop+848, yycrank+727, yysvec+39, yyvstop+850, yycrank+0, yysvec+39, yyvstop+852, yycrank+722, yysvec+39, yyvstop+855, yycrank+738, yysvec+39, yyvstop+857, yycrank+726, yysvec+39, yyvstop+859, yycrank+0, yysvec+39, yyvstop+861, yycrank+743, yysvec+39, yyvstop+864, yycrank+728, yysvec+39, yyvstop+866, yycrank+740, yysvec+39, yyvstop+868, yycrank+736, yysvec+39, yyvstop+870, yycrank+0, yysvec+39, yyvstop+872, yycrank+748, yysvec+39, yyvstop+875, yycrank+747, yysvec+39, yyvstop+877, yycrank+751, yysvec+39, yyvstop+879, yycrank+748, yysvec+39, yyvstop+881, yycrank+736, yysvec+39, yyvstop+883, yycrank+749, yysvec+39, yyvstop+885, yycrank+746, yysvec+39, yyvstop+887, yycrank+754, yysvec+39, yyvstop+889, yycrank+0, yysvec+39, yyvstop+891, yycrank+773, yysvec+39, yyvstop+894, yycrank+787, yysvec+39, yyvstop+896, yycrank+780, yysvec+39, yyvstop+898, yycrank+0, yysvec+39, yyvstop+900, yycrank+0, yysvec+39, yyvstop+903, yycrank+0, yysvec+74, yyvstop+906, yycrank+785, yysvec+74, yyvstop+909, yycrank+787, yysvec+74, yyvstop+911, yycrank+806, yysvec+74, yyvstop+913, yycrank+0, yysvec+74, yyvstop+915, yycrank+811, yysvec+74, yyvstop+918, yycrank+827, yysvec+74, yyvstop+920, yycrank+829, yysvec+74, yyvstop+922, yycrank+814, yysvec+74, yyvstop+924, yycrank+826, yysvec+74, yyvstop+926, yycrank+0, yysvec+74, yyvstop+928, yycrank+832, yysvec+74, yyvstop+931, yycrank+834, yysvec+74, yyvstop+933, yycrank+857, yysvec+74, yyvstop+935, yycrank+845, yysvec+74, yyvstop+937, yycrank+854, yysvec+74, yyvstop+939, yycrank+862, yysvec+74, yyvstop+941, yycrank+0, yysvec+74, yyvstop+943, yycrank+883, yysvec+74, yyvstop+946, yycrank+889, yysvec+74, yyvstop+948, yycrank+883, yysvec+39, yyvstop+950, yycrank+888, yysvec+39, yyvstop+952, yycrank+887, yysvec+39, yyvstop+954, yycrank+0, yysvec+39, yyvstop+956, yycrank+0, yysvec+39, yyvstop+959, yycrank+0, yysvec+39, yyvstop+962, yycrank+0, yysvec+39, yyvstop+965, yycrank+895, yysvec+39, yyvstop+968, yycrank+917, yysvec+39, yyvstop+970, yycrank+919, yysvec+39, yyvstop+972, yycrank+924, yysvec+39, yyvstop+974, yycrank+0, yysvec+39, yyvstop+976, yycrank+0, yysvec+39, yyvstop+979, yycrank+0, yysvec+39, yyvstop+982, yycrank+0, yysvec+39, yyvstop+985, yycrank+942, yysvec+39, yyvstop+988, yycrank+0, yysvec+39, yyvstop+991, yycrank+0, yysvec+39, yyvstop+994, yycrank+1000, yysvec+39, yyvstop+997, yycrank+996, yysvec+39, yyvstop+999, yycrank+998, yysvec+39, yyvstop+1001, yycrank+995, yysvec+39, yyvstop+1003, yycrank+1003, yysvec+39, yyvstop+1005, yycrank+998, yysvec+74, yyvstop+1007, yycrank+0, yysvec+74, yyvstop+1009, yycrank+0, yysvec+74, yyvstop+1012, yycrank+0, yysvec+74, yyvstop+1015, yycrank+0, yysvec+74, yyvstop+1018, yycrank+1012, yysvec+74, yyvstop+1021, yycrank+1013, yysvec+74, yyvstop+1023, yycrank+1016, yysvec+74, yyvstop+1025, yycrank+0, yysvec+74, yyvstop+1027, yycrank+0, yysvec+74, yyvstop+1030, yycrank+0, yysvec+74, yyvstop+1033, yycrank+0, yysvec+74, yyvstop+1036, yycrank+1020, yysvec+74, yyvstop+1039, yycrank+1018, yysvec+74, yyvstop+1041, yycrank+1020, yysvec+74, yyvstop+1043, yycrank+1019, yysvec+74, yyvstop+1045, yycrank+1027, yysvec+39, yyvstop+1047, yycrank+0, yysvec+39, yyvstop+1049, yycrank+0, yysvec+39, yyvstop+1052, yycrank+1031, yysvec+39, yyvstop+1055, yycrank+1022, yysvec+39, yyvstop+1057, yycrank+1026, yysvec+39, yyvstop+1059, yycrank+1025, yysvec+39, yyvstop+1061, yycrank+1041, yysvec+39, yyvstop+1063, yycrank+1028, yysvec+39, yyvstop+1065, yycrank+0, yysvec+39, yyvstop+1067, yycrank+1049, yysvec+39, yyvstop+1070, yycrank+1050, yysvec+39, yyvstop+1072, yycrank+1051, yysvec+39, yyvstop+1074, yycrank+0, yysvec+74, yyvstop+1076, yycrank+1039, yysvec+74, yyvstop+1079, yycrank+1041, yysvec+74, yyvstop+1081, yycrank+1041, yysvec+74, yyvstop+1083, yycrank+1047, yysvec+74, yyvstop+1085, yycrank+0, yysvec+74, yyvstop+1087, yycrank+1065, yysvec+74, yyvstop+1090, yycrank+1065, yysvec+74, yyvstop+1092, yycrank+0, yysvec+39, yyvstop+1094, yycrank+0, yysvec+39, yyvstop+1097, yycrank+0, yysvec+39, yyvstop+1100, yycrank+0, yysvec+39, yyvstop+1103, yycrank+0, yysvec+39, yyvstop+1106, yycrank+0, yysvec+39, yyvstop+1109, yycrank+1061, yysvec+39, yyvstop+1112, yycrank+0, yysvec+39, yyvstop+1114, yycrank+0, yysvec+39, yyvstop+1117, yycrank+0, yysvec+39, yyvstop+1120, yycrank+0, yysvec+74, yyvstop+1123, yycrank+0, yysvec+74, yyvstop+1126, yycrank+0, yysvec+74, yyvstop+1129, yycrank+1063, yysvec+74, yyvstop+1132, yycrank+0, yysvec+74, yyvstop+1134, yycrank+0, yysvec+74, yyvstop+1137, yycrank+1061, yysvec+39, yyvstop+1140, yycrank+1063, yysvec+74, yyvstop+1142, yycrank+0, yysvec+39, yyvstop+1144, yycrank+0, yysvec+74, yyvstop+1147, 0, 0, 0}; struct yywork *yytop = yycrank+2238; struct yysvf *yybgin = yysvec+1; char yymatch[] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 9, 10, 9, 9, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 33, 34, 1, 33, 1, 1, 39, 1, 1, 33, 1, 1, 33, 46, 1, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 33, 1, 1, 1, 1, 33, 1, 65, 65, 65, 65, 65, 70, 71, 71, 71, 71, 71, 76, 71, 71, 71, 71, 71, 71, 71, 71, 85, 71, 71, 88, 71, 71, 33, 92, 33, 1, 71, 96, 65, 65, 65, 65, 65, 70, 71, 71, 71, 71, 71, 76, 71, 71, 71, 71, 71, 71, 71, 71, 85, 71, 71, 88, 71, 71, 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, 0}; char yyextra[] = { 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 1,1,0,0,1,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0}; /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* Copyright (c) 1989 AT&T */ /* All Rights Reserved */ #pragma ident "%Z%%M% %I% %E% SMI" int yylineno =1; # define YYU(x) x # define NLSTATE yyprevious=YYNEWLINE struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp; char yysbuf[YYLMAX]; char *yysptr = yysbuf; int *yyfnd; extern struct yysvf *yyestate; int yyprevious = YYNEWLINE; #if defined(__cplusplus) || defined(__STDC__) int yylook(void) #else yylook() #endif { register struct yysvf *yystate, **lsp; register struct yywork *yyt; struct yysvf *yyz; int yych, yyfirst; struct yywork *yyr; # ifdef LEXDEBUG int debug; # endif char *yylastch; /* start off machines */ # ifdef LEXDEBUG debug = 0; # endif yyfirst=1; if (!yymorfg) yylastch = yytext; else { yymorfg=0; yylastch = yytext+yyleng; } for(;;){ lsp = yylstate; yyestate = yystate = yybgin; if (yyprevious==YYNEWLINE) yystate++; for (;;){ # ifdef LEXDEBUG if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1); # endif yyt = yystate->yystoff; if(yyt == yycrank && !yyfirst){ /* may not be any transitions */ yyz = yystate->yyother; if(yyz == 0)break; if(yyz->yystoff == yycrank)break; } #ifndef __cplusplus *yylastch++ = yych = input(); #else *yylastch++ = yych = lex_input(); #endif #ifdef YYISARRAY if(yylastch > &yytext[YYLMAX]) { fprintf(yyout,"Input string too long, limit %d\n",YYLMAX); exit(1); } #else if (yylastch >= &yytext[ yytextsz ]) { int x = yylastch - yytext; yytextsz += YYTEXTSZINC; if (yytext == yy_tbuf) { yytext = (char *) malloc(yytextsz); memcpy(yytext, yy_tbuf, sizeof (yy_tbuf)); } else yytext = (char *) realloc(yytext, yytextsz); if (!yytext) { fprintf(yyout, "Cannot realloc yytext\n"); exit(1); } yylastch = yytext + x; } #endif yyfirst=0; tryagain: # ifdef LEXDEBUG if(debug){ fprintf(yyout,"char "); allprint(yych); putchar('\n'); } # endif yyr = yyt; if ( (uintptr_t)yyt > (uintptr_t)yycrank){ yyt = yyr + yych; if (yyt <= yytop && yyt->verify+yysvec == yystate){ if(yyt->advance+yysvec == YYLERR) /* error transitions */ {unput(*--yylastch);break;} *lsp++ = yystate = yyt->advance+yysvec; if(lsp > &yylstate[YYLMAX]) { fprintf(yyout,"Input string too long, limit %d\n",YYLMAX); exit(1); } goto contin; } } # ifdef YYOPTIM else if((uintptr_t)yyt < (uintptr_t)yycrank) { /* r < yycrank */ yyt = yyr = yycrank+(yycrank-yyt); # ifdef LEXDEBUG if(debug)fprintf(yyout,"compressed state\n"); # endif yyt = yyt + yych; if(yyt <= yytop && yyt->verify+yysvec == yystate){ if(yyt->advance+yysvec == YYLERR) /* error transitions */ {unput(*--yylastch);break;} *lsp++ = yystate = yyt->advance+yysvec; if(lsp > &yylstate[YYLMAX]) { fprintf(yyout,"Input string too long, limit %d\n",YYLMAX); exit(1); } goto contin; } yyt = yyr + YYU(yymatch[yych]); # ifdef LEXDEBUG if(debug){ fprintf(yyout,"try fall back character "); allprint(YYU(yymatch[yych])); putchar('\n'); } # endif if(yyt <= yytop && yyt->verify+yysvec == yystate){ if(yyt->advance+yysvec == YYLERR) /* error transition */ {unput(*--yylastch);break;} *lsp++ = yystate = yyt->advance+yysvec; if(lsp > &yylstate[YYLMAX]) { fprintf(yyout,"Input string too long, limit %d\n",YYLMAX); exit(1); } goto contin; } } if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){ # ifdef LEXDEBUG if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1); # endif goto tryagain; } # endif else {unput(*--yylastch);break;} contin: # ifdef LEXDEBUG if(debug){ fprintf(yyout,"state %d char ",yystate-yysvec-1); allprint(yych); putchar('\n'); } # endif ; } # ifdef LEXDEBUG if(debug){ fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1); allprint(yych); putchar('\n'); } # endif while (lsp-- > yylstate){ *yylastch-- = 0; if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){ yyolsp = lsp; if(yyextra[*yyfnd]){ /* must backup */ while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){ lsp--; unput(*yylastch--); } } yyprevious = YYU(*yylastch); yylsp = lsp; yyleng = yylastch-yytext+1; yytext[yyleng] = 0; # ifdef LEXDEBUG if(debug){ fprintf(yyout,"\nmatch "); sprint(yytext); fprintf(yyout," action %d\n",*yyfnd); } # endif return(*yyfnd++); } unput(*yylastch); } if (yytext[0] == 0 /* && feof(yyin) */) { yysptr=yysbuf; return(0); } #ifndef __cplusplus yyprevious = yytext[0] = input(); if (yyprevious>0) output(yyprevious); #else yyprevious = yytext[0] = lex_input(); if (yyprevious>0) lex_output(yyprevious); #endif yylastch=yytext; # ifdef LEXDEBUG if(debug)putchar('\n'); # endif } } #if defined(__cplusplus) || defined(__STDC__) int yyback(int *p, int m) #else yyback(p, m) int *p; #endif { if (p==0) return(0); while (*p) { if (*p++ == m) return(1); } return(0); } /* the following are only used in the lex library */ #if defined(__cplusplus) || defined(__STDC__) int yyinput(void) #else yyinput() #endif { #ifndef __cplusplus return(input()); #else return(lex_input()); #endif } #if defined(__cplusplus) || defined(__STDC__) void yyoutput(int c) #else yyoutput(c) int c; #endif { #ifndef __cplusplus output(c); #else lex_output(c); #endif } #if defined(__cplusplus) || defined(__STDC__) void yyunput(int c) #else yyunput(c) int c; #endif { unput(c); }