![]() |
Home page |
Mailing list |
Docs
Asterisk developer's documentation :: Codename Pineapple
ast_expr2f.c
Go to the documentation of this file.
00001 #line 2 "ast_expr2f.c" 00002 00003 #line 4 "ast_expr2f.c" 00004 00005 #define YY_INT_ALIGNED short int 00006 00007 /* A lexical scanner generated by flex */ 00008 00009 #define FLEX_SCANNER 00010 #define YY_FLEX_MAJOR_VERSION 2 00011 #define YY_FLEX_MINOR_VERSION 5 00012 #define YY_FLEX_SUBMINOR_VERSION 31 00013 #if YY_FLEX_SUBMINOR_VERSION > 0 00014 #define FLEX_BETA 00015 #endif 00016 00017 /* First, we deal with platform-specific or compiler-specific issues. */ 00018 00019 /* begin standard C headers. */ 00020 #include <stdio.h> 00021 #include <string.h> 00022 #include <errno.h> 00023 #include <stdlib.h> 00024 00025 /* end standard C headers. */ 00026 00027 /* flex integer type definitions */ 00028 00029 #ifndef FLEXINT_H 00030 #define FLEXINT_H 00031 00032 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ 00033 00034 #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L 00035 #include <inttypes.h> 00036 typedef int8_t flex_int8_t; 00037 typedef uint8_t flex_uint8_t; 00038 typedef int16_t flex_int16_t; 00039 typedef uint16_t flex_uint16_t; 00040 typedef int32_t flex_int32_t; 00041 typedef uint32_t flex_uint32_t; 00042 #else 00043 typedef signed char flex_int8_t; 00044 typedef short int flex_int16_t; 00045 typedef int flex_int32_t; 00046 typedef unsigned char flex_uint8_t; 00047 typedef unsigned short int flex_uint16_t; 00048 typedef unsigned int flex_uint32_t; 00049 #endif /* ! C99 */ 00050 00051 /* Limits of integral types. */ 00052 #ifndef INT8_MIN 00053 #define INT8_MIN (-128) 00054 #endif 00055 #ifndef INT16_MIN 00056 #define INT16_MIN (-32767-1) 00057 #endif 00058 #ifndef INT32_MIN 00059 #define INT32_MIN (-2147483647-1) 00060 #endif 00061 #ifndef INT8_MAX 00062 #define INT8_MAX (127) 00063 #endif 00064 #ifndef INT16_MAX 00065 #define INT16_MAX (32767) 00066 #endif 00067 #ifndef INT32_MAX 00068 #define INT32_MAX (2147483647) 00069 #endif 00070 #ifndef UINT8_MAX 00071 #define UINT8_MAX (255U) 00072 #endif 00073 #ifndef UINT16_MAX 00074 #define UINT16_MAX (65535U) 00075 #endif 00076 #ifndef UINT32_MAX 00077 #define UINT32_MAX (4294967295U) 00078 #endif 00079 00080 #endif /* ! FLEXINT_H */ 00081 00082 #ifdef __cplusplus 00083 00084 /* The "const" storage-class-modifier is valid. */ 00085 #define YY_USE_CONST 00086 00087 #else /* ! __cplusplus */ 00088 00089 #if __STDC__ 00090 00091 #define YY_USE_CONST 00092 00093 #endif /* __STDC__ */ 00094 #endif /* ! __cplusplus */ 00095 00096 #ifdef YY_USE_CONST 00097 #define yyconst const 00098 #else 00099 #define yyconst 00100 #endif 00101 00102 /* Returned upon end-of-file. */ 00103 #define YY_NULL 0 00104 00105 /* Promotes a possibly negative, possibly signed char to an unsigned 00106 * integer for use as an array index. If the signed char is negative, 00107 * we want to instead treat it as an 8-bit unsigned char, hence the 00108 * double cast. 00109 */ 00110 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) 00111 00112 /* An opaque pointer. */ 00113 #ifndef YY_TYPEDEF_YY_SCANNER_T 00114 #define YY_TYPEDEF_YY_SCANNER_T 00115 typedef void* yyscan_t; 00116 #endif 00117 00118 /* For convenience, these vars (plus the bison vars far below) 00119 are macros in the reentrant scanner. */ 00120 #define yyin yyg->yyin_r 00121 #define yyout yyg->yyout_r 00122 #define yyextra yyg->yyextra_r 00123 #define yyleng yyg->yyleng_r 00124 #define yytext yyg->yytext_r 00125 #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) 00126 #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) 00127 #define yy_flex_debug yyg->yy_flex_debug_r 00128 00129 int ast_yylex_init (yyscan_t* scanner); 00130 00131 /* Enter a start condition. This macro really ought to take a parameter, 00132 * but we do it the disgusting crufty way forced on us by the ()-less 00133 * definition of BEGIN. 00134 */ 00135 #define BEGIN yyg->yy_start = 1 + 2 * 00136 00137 /* Translate the current start state into a value that can be later handed 00138 * to BEGIN to return to the state. The YYSTATE alias is for lex 00139 * compatibility. 00140 */ 00141 #define YY_START ((yyg->yy_start - 1) / 2) 00142 #define YYSTATE YY_START 00143 00144 /* Action number for EOF rule of a given start state. */ 00145 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) 00146 00147 /* Special action meaning "start processing a new file". */ 00148 #define YY_NEW_FILE ast_yyrestart(yyin ,yyscanner ) 00149 00150 #define YY_END_OF_BUFFER_CHAR 0 00151 00152 /* Size of default input buffer. */ 00153 #ifndef YY_BUF_SIZE 00154 #define YY_BUF_SIZE 16384 00155 #endif 00156 00157 #ifndef YY_TYPEDEF_YY_BUFFER_STATE 00158 #define YY_TYPEDEF_YY_BUFFER_STATE 00159 typedef struct yy_buffer_state *YY_BUFFER_STATE; 00160 #endif 00161 00162 #define EOB_ACT_CONTINUE_SCAN 0 00163 #define EOB_ACT_END_OF_FILE 1 00164 #define EOB_ACT_LAST_MATCH 2 00165 00166 #define YY_LESS_LINENO(n) 00167 00168 /* Return all but the first "n" matched characters back to the input stream. */ 00169 #define yyless(n) \ 00170 do \ 00171 { \ 00172 /* Undo effects of setting up yytext. */ \ 00173 int yyless_macro_arg = (n); \ 00174 YY_LESS_LINENO(yyless_macro_arg);\ 00175 *yy_cp = yyg->yy_hold_char; \ 00176 YY_RESTORE_YY_MORE_OFFSET \ 00177 yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ 00178 YY_DO_BEFORE_ACTION; /* set up yytext again */ \ 00179 } \ 00180 while ( 0 ) 00181 00182 #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) 00183 00184 /* The following is because we cannot portably get our hands on size_t 00185 * (without autoconf's help, which isn't available because we want 00186 * flex-generated scanners to compile on their own). 00187 */ 00188 00189 #ifndef YY_TYPEDEF_YY_SIZE_T 00190 #define YY_TYPEDEF_YY_SIZE_T 00191 typedef unsigned int yy_size_t; 00192 #endif 00193 00194 #ifndef YY_STRUCT_YY_BUFFER_STATE 00195 #define YY_STRUCT_YY_BUFFER_STATE 00196 struct yy_buffer_state 00197 { 00198 FILE *yy_input_file; 00199 00200 char *yy_ch_buf; /* input buffer */ 00201 char *yy_buf_pos; /* current position in input buffer */ 00202 00203 /* Size of input buffer in bytes, not including room for EOB 00204 * characters. 00205 */ 00206 yy_size_t yy_buf_size; 00207 00208 /* Number of characters read into yy_ch_buf, not including EOB 00209 * characters. 00210 */ 00211 int yy_n_chars; 00212 00213 /* Whether we "own" the buffer - i.e., we know we created it, 00214 * and can realloc() it to grow it, and should free() it to 00215 * delete it. 00216 */ 00217 int yy_is_our_buffer; 00218 00219 /* Whether this is an "interactive" input source; if so, and 00220 * if we're using stdio for input, then we want to use getc() 00221 * instead of fread(), to make sure we stop fetching input after 00222 * each newline. 00223 */ 00224 int yy_is_interactive; 00225 00226 /* Whether we're considered to be at the beginning of a line. 00227 * If so, '^' rules will be active on the next match, otherwise 00228 * not. 00229 */ 00230 int yy_at_bol; 00231 00232 int yy_bs_lineno; /**< The line count. */ 00233 int yy_bs_column; /**< The column count. */ 00234 00235 /* Whether to try to fill the input buffer when we reach the 00236 * end of it. 00237 */ 00238 int yy_fill_buffer; 00239 00240 int yy_buffer_status; 00241 00242 #define YY_BUFFER_NEW 0 00243 #define YY_BUFFER_NORMAL 1 00244 /* When an EOF's been seen but there's still some text to process 00245 * then we mark the buffer as YY_EOF_PENDING, to indicate that we 00246 * shouldn't try reading from the input source any more. We might 00247 * still have a bunch of tokens to match, though, because of 00248 * possible backing-up. 00249 * 00250 * When we actually see the EOF, we change the status to "new" 00251 * (via ast_yyrestart()), so that the user can continue scanning by 00252 * just pointing yyin at a new input file. 00253 */ 00254 #define YY_BUFFER_EOF_PENDING 2 00255 00256 }; 00257 #endif /* !YY_STRUCT_YY_BUFFER_STATE */ 00258 00259 /* We provide macros for accessing buffer states in case in the 00260 * future we want to put the buffer states in a more general 00261 * "scanner state". 00262 * 00263 * Returns the top of the stack, or NULL. 00264 */ 00265 #define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ 00266 ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ 00267 : NULL) 00268 00269 /* Same as previous macro, but useful when we know that the buffer stack is not 00270 * NULL or when we need an lvalue. For internal use only. 00271 */ 00272 #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] 00273 00274 void ast_yyrestart (FILE *input_file ,yyscan_t yyscanner ); 00275 void ast_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); 00276 YY_BUFFER_STATE ast_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); 00277 void ast_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); 00278 void ast_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); 00279 void ast_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); 00280 void ast_yypop_buffer_state (yyscan_t yyscanner ); 00281 00282 static void ast_yyensure_buffer_stack (yyscan_t yyscanner ); 00283 static void ast_yy_load_buffer_state (yyscan_t yyscanner ); 00284 static void ast_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner ); 00285 00286 #define YY_FLUSH_BUFFER ast_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner) 00287 00288 YY_BUFFER_STATE ast_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); 00289 YY_BUFFER_STATE ast_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); 00290 YY_BUFFER_STATE ast_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner ); 00291 00292 void *ast_yyalloc (yy_size_t ,yyscan_t yyscanner ); 00293 void *ast_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); 00294 void ast_yyfree (void * ,yyscan_t yyscanner ); 00295 00296 #define yy_new_buffer ast_yy_create_buffer 00297 00298 #define yy_set_interactive(is_interactive) \ 00299 { \ 00300 if ( ! YY_CURRENT_BUFFER ){ \ 00301 ast_yyensure_buffer_stack (yyscanner); \ 00302 YY_CURRENT_BUFFER_LVALUE = \ 00303 ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ 00304 } \ 00305 YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ 00306 } 00307 00308 #define yy_set_bol(at_bol) \ 00309 { \ 00310 if ( ! YY_CURRENT_BUFFER ){\ 00311 ast_yyensure_buffer_stack (yyscanner); \ 00312 YY_CURRENT_BUFFER_LVALUE = \ 00313 ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ 00314 } \ 00315 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ 00316 } 00317 00318 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) 00319 00320 /* Begin user sect3 */ 00321 00322 #define ast_yywrap(n) 1 00323 #define YY_SKIP_YYWRAP 00324 00325 typedef char YY_CHAR; 00326 00327 typedef int yy_state_type; 00328 00329 #define yytext_ptr yytext_r 00330 static yyconst flex_int16_t yy_nxt[][128] = 00331 { 00332 { 00333 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00334 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00335 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00336 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00337 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00338 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00339 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00340 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00341 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00342 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00343 00344 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00345 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00346 0, 0, 0, 0, 0, 0, 0, 0 00347 }, 00348 00349 { 00350 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 00351 10, 8, 8, 9, 8, 8, 8, 8, 8, 8, 00352 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 00353 8, 8, 9, 11, 12, 13, 14, 15, 16, 13, 00354 17, 18, 19, 20, 13, 21, 13, 22, 23, 23, 00355 23, 23, 23, 23, 23, 23, 23, 23, 24, 13, 00356 25, 26, 27, 28, 13, 13, 13, 13, 13, 13, 00357 00358 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 00359 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 00360 13, 8, 13, 8, 13, 13, 8, 13, 13, 13, 00361 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 00362 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 00363 13, 13, 13, 8, 29, 8, 8, 8 00364 }, 00365 00366 { 00367 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 00368 10, 8, 8, 9, 8, 8, 8, 8, 8, 8, 00369 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 00370 8, 8, 9, 11, 12, 13, 14, 15, 16, 13, 00371 00372 17, 18, 19, 20, 13, 21, 13, 22, 23, 23, 00373 23, 23, 23, 23, 23, 23, 23, 23, 24, 13, 00374 25, 26, 27, 28, 13, 13, 13, 13, 13, 13, 00375 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 00376 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 00377 13, 8, 13, 8, 13, 13, 8, 13, 13, 13, 00378 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 00379 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 00380 13, 13, 13, 8, 29, 8, 8, 8 00381 }, 00382 00383 { 00384 7, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00385 00386 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00387 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00388 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00389 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00390 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00391 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00392 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00393 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00394 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00395 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00396 00397 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00398 30, 30, 30, 31, 30, 32, 30, 30 00399 }, 00400 00401 { 00402 7, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00403 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00404 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00405 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00406 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00407 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00408 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00409 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00410 00411 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00412 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00413 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00414 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 00415 30, 30, 30, 31, 30, 32, 30, 30 00416 }, 00417 00418 { 00419 7, 33, 33, 33, 33, 33, 33, 33, 33, 34, 00420 34, 33, 33, 34, 33, 33, 33, 33, 33, 33, 00421 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 00422 33, 33, 34, 34, 33, 33, 35, 34, 34, 33, 00423 34, 34, 34, 34, 33, 34, 33, 34, 33, 33, 00424 00425 33, 33, 33, 33, 33, 33, 33, 33, 34, 33, 00426 34, 34, 34, 34, 33, 33, 33, 33, 33, 33, 00427 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 00428 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 00429 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 00430 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 00431 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 00432 33, 33, 33, 33, 34, 33, 33, 33 00433 }, 00434 00435 { 00436 7, 33, 33, 33, 33, 33, 33, 33, 33, 34, 00437 34, 33, 33, 34, 33, 33, 33, 33, 33, 33, 00438 00439 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 00440 33, 33, 34, 34, 33, 33, 35, 34, 34, 33, 00441 34, 34, 34, 34, 33, 34, 33, 34, 33, 33, 00442 33, 33, 33, 33, 33, 33, 33, 33, 34, 33, 00443 34, 34, 34, 34, 33, 33, 33, 33, 33, 33, 00444 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 00445 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 00446 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 00447 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 00448 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 00449 00450 33, 33, 33, 33, 34, 33, 33, 33 00451 }, 00452 00453 { 00454 -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 00455 -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 00456 -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 00457 -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 00458 -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 00459 -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 00460 -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 00461 -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 00462 -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 00463 00464 -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 00465 -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 00466 -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, 00467 -7, -7, -7, -7, -7, -7, -7, -7 00468 }, 00469 00470 { 00471 7, -8, -8, -8, -8, -8, -8, -8, -8, -8, 00472 -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 00473 -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 00474 -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 00475 -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 00476 -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 00477 00478 -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 00479 -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 00480 -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 00481 -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 00482 -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 00483 -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 00484 -8, -8, -8, -8, -8, -8, -8, -8 00485 }, 00486 00487 { 00488 7, -9, -9, -9, -9, -9, -9, -9, -9, -9, 00489 -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 00490 -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 00491 00492 -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 00493 -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 00494 -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 00495 -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 00496 -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 00497 -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 00498 -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 00499 -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 00500 -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 00501 -9, -9, -9, -9, -9, -9, -9, -9 00502 00503 }, 00504 00505 { 00506 7, -10, -10, -10, -10, -10, -10, -10, -10, -10, 00507 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 00508 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 00509 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 00510 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 00511 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 00512 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 00513 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 00514 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 00515 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 00516 00517 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 00518 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 00519 -10, -10, -10, -10, -10, -10, -10, -10 00520 }, 00521 00522 { 00523 7, -11, -11, -11, -11, -11, -11, -11, -11, -11, 00524 -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 00525 -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 00526 -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 00527 -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 00528 -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 00529 -11, 36, -11, -11, -11, -11, -11, -11, -11, -11, 00530 00531 -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 00532 -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 00533 -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 00534 -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 00535 -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 00536 -11, -11, -11, -11, -11, -11, -11, -11 00537 }, 00538 00539 { 00540 7, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00541 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00542 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00543 37, 37, 37, 37, 38, 37, 37, 37, 37, 37, 00544 00545 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00546 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00547 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00548 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00549 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00550 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00551 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00552 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00553 37, 37, 37, 37, 37, 37, 37, 37 00554 }, 00555 00556 { 00557 7, -13, -13, -13, -13, -13, -13, -13, -13, -13, 00558 00559 -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, 00560 -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, 00561 -13, -13, -13, -13, -13, 39, 39, -13, -13, 39, 00562 -13, -13, -13, -13, 39, -13, 39, -13, 39, 39, 00563 39, 39, 39, 39, 39, 39, 39, 39, -13, 39, 00564 -13, -13, -13, -13, 39, 39, 39, 39, 39, 39, 00565 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00566 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00567 39, -13, 39, -13, 39, 39, -13, 39, 39, 39, 00568 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00569 00570 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00571 39, 39, 39, -13, -13, -13, -13, -13 00572 }, 00573 00574 { 00575 7, -14, -14, -14, -14, -14, -14, -14, -14, -14, 00576 -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, 00577 -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, 00578 -14, -14, -14, -14, -14, 39, 39, -14, -14, 39, 00579 -14, -14, -14, -14, 39, -14, 39, -14, 39, 39, 00580 39, 39, 39, 39, 39, 39, 39, 39, -14, 39, 00581 -14, -14, -14, -14, 39, 39, 39, 39, 39, 39, 00582 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00583 00584 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00585 39, -14, 39, -14, 39, 39, -14, 39, 39, 39, 00586 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00587 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00588 39, 39, 39, 40, -14, -14, -14, -14 00589 }, 00590 00591 { 00592 7, -15, -15, -15, -15, -15, -15, -15, -15, -15, 00593 -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, 00594 -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, 00595 -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, 00596 -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, 00597 00598 -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, 00599 -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, 00600 -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, 00601 -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, 00602 -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, 00603 -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, 00604 -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, 00605 -15, -15, -15, -15, -15, -15, -15, -15 00606 }, 00607 00608 { 00609 7, -16, -16, -16, -16, -16, -16, -16, -16, -16, 00610 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 00611 00612 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 00613 -16, -16, -16, -16, -16, -16, -16, -16, 41, -16, 00614 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 00615 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 00616 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 00617 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 00618 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 00619 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 00620 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 00621 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 00622 00623 -16, -16, -16, -16, -16, -16, -16, -16 00624 }, 00625 00626 { 00627 7, -17, -17, -17, -17, -17, -17, -17, -17, -17, 00628 -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, 00629 -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, 00630 -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, 00631 -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, 00632 -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, 00633 -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, 00634 -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, 00635 -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, 00636 00637 -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, 00638 -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, 00639 -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, 00640 -17, -17, -17, -17, -17, -17, -17, -17 00641 }, 00642 00643 { 00644 7, -18, -18, -18, -18, -18, -18, -18, -18, -18, 00645 -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, 00646 -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, 00647 -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, 00648 -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, 00649 -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, 00650 00651 -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, 00652 -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, 00653 -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, 00654 -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, 00655 -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, 00656 -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, 00657 -18, -18, -18, -18, -18, -18, -18, -18 00658 }, 00659 00660 { 00661 7, -19, -19, -19, -19, -19, -19, -19, -19, -19, 00662 -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, 00663 -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, 00664 00665 -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, 00666 -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, 00667 -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, 00668 -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, 00669 -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, 00670 -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, 00671 -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, 00672 -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, 00673 -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, 00674 -19, -19, -19, -19, -19, -19, -19, -19 00675 00676 }, 00677 00678 { 00679 7, -20, -20, -20, -20, -20, -20, -20, -20, -20, 00680 -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 00681 -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 00682 -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 00683 -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 00684 -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 00685 -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 00686 -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 00687 -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 00688 -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 00689 00690 -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 00691 -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 00692 -20, -20, -20, -20, -20, -20, -20, -20 00693 }, 00694 00695 { 00696 7, -21, -21, -21, -21, -21, -21, -21, -21, -21, 00697 -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, 00698 -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, 00699 -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, 00700 -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, 00701 -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, 00702 -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, 00703 00704 -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, 00705 -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, 00706 -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, 00707 -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, 00708 -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, 00709 -21, -21, -21, -21, -21, -21, -21, -21 00710 }, 00711 00712 { 00713 7, -22, -22, -22, -22, -22, -22, -22, -22, -22, 00714 -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, 00715 -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, 00716 -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, 00717 00718 -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, 00719 -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, 00720 -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, 00721 -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, 00722 -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, 00723 -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, 00724 -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, 00725 -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, 00726 -22, -22, -22, -22, -22, -22, -22, -22 00727 }, 00728 00729 { 00730 7, -23, -23, -23, -23, -23, -23, -23, -23, -23, 00731 00732 -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, 00733 -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, 00734 -23, -23, -23, -23, -23, 39, 39, -23, -23, 39, 00735 -23, -23, -23, -23, 39, -23, 39, -23, 42, 42, 00736 42, 42, 42, 42, 42, 42, 42, 42, -23, 39, 00737 -23, -23, -23, -23, 39, 39, 39, 39, 39, 39, 00738 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00739 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00740 39, -23, 39, -23, 39, 39, -23, 39, 39, 39, 00741 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00742 00743 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 00744 39, 39, 39, -23, -23, -23, -23, -23 00745 }, 00746 00747 { 00748 7, -24, -24, -24, -24, -24, -24, -24, -24, -24, 00749 -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 00750 -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 00751 -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 00752 -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 00753 -24, -24, -24, -24, -24, -24, -24, -24, 43, -24, 00754 -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 00755 -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 00756 00757 -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 00758 -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 00759 -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 00760 -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 00761 -24, -24, -24, -24, -24, -24, -24, -24 00762 }, 00763 00764 { 00765 7, -25, -25, -25, -25, -25, -25, -25, -25, -25, 00766 -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, 00767 -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, 00768 -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, 00769 -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, 00770 00771 -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, 00772 -25, 44, -25, -25, -25, -25, -25, -25, -25, -25, 00773 -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, 00774 -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, 00775 -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, 00776 -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, 00777 -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, 00778 -25, -25, -25, -25, -25, -25, -25, -25 00779 }, 00780 00781 { 00782 7, -26, -26, -26, -26, -26, -26, -26, -26, -26, 00783 -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 00784 00785 -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 00786 -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 00787 -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 00788 -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 00789 -26, 45, -26, -26, -26, -26, -26, -26, -26, -26, 00790 -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 00791 -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 00792 -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 00793 -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 00794 -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 00795 00796 -26, -26, -26, -26, -26, -26, 46, -26 00797 }, 00798 00799 { 00800 7, -27, -27, -27, -27, -27, -27, -27, -27, -27, 00801 -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, 00802 -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, 00803 -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, 00804 -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, 00805 -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, 00806 -27, 47, -27, -27, -27, -27, -27, -27, -27, -27, 00807 -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, 00808 -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, 00809 00810 -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, 00811 -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, 00812 -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, 00813 -27, -27, -27, -27, -27, -27, -27, -27 00814 }, 00815 00816 { 00817 7, -28, -28, -28, -28, -28, -28, -28, -28, -28, 00818 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, 00819 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, 00820 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, 00821 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, 00822 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, 00823 00824 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, 00825 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, 00826 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, 00827 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, 00828 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, 00829 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, 00830 -28, -28, -28, -28, -28, -28, -28, -28 00831 }, 00832 00833 { 00834 7, -29, -29, -29, -29, -29, -29, -29, -29, -29, 00835 -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, 00836 -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, 00837 00838 -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, 00839 -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, 00840 -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, 00841 -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, 00842 -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, 00843 -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, 00844 -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, 00845 -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, 00846 -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, 00847 -29, -29, -29, -29, 48, -29, -29, -29 00848 00849 }, 00850 00851 { 00852 7, 49, 49, 49, 49, 49, 49, 49, 49, 49, 00853 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 00854 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 00855 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 00856 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 00857 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 00858 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 00859 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 00860 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 00861 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 00862 00863 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 00864 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 00865 49, 49, 49, 50, 49, 51, 49, 49 00866 }, 00867 00868 { 00869 7, -31, -31, -31, -31, -31, -31, -31, -31, -31, 00870 -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 00871 -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 00872 -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 00873 -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 00874 -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 00875 -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 00876 00877 -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 00878 -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 00879 -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 00880 -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 00881 -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 00882 -31, -31, -31, -31, -31, -31, -31, -31 00883 }, 00884 00885 { 00886 7, -32, -32, -32, -32, -32, -32, -32, -32, -32, 00887 -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 00888 -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 00889 -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 00890 00891 -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 00892 -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 00893 -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 00894 -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 00895 -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 00896 -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 00897 -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 00898 -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 00899 -32, -32, -32, -32, -32, -32, -32, -32 00900 }, 00901 00902 { 00903 7, 52, 52, 52, 52, 52, 52, 52, 52, -33, 00904 00905 -33, 52, 52, -33, 52, 52, 52, 52, 52, 52, 00906 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 00907 52, 52, -33, -33, 52, 52, -33, -33, -33, 52, 00908 -33, -33, -33, -33, 52, -33, 52, -33, 52, 52, 00909 52, 52, 52, 52, 52, 52, 52, 52, -33, 52, 00910 -33, -33, -33, -33, 52, 52, 52, 52, 52, 52, 00911 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 00912 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 00913 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 00914 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 00915 00916 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 00917 52, 52, 52, 52, -33, 52, 52, 52 00918 }, 00919 00920 { 00921 7, -34, -34, -34, -34, -34, -34, -34, -34, -34, 00922 -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, 00923 -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, 00924 -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, 00925 -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, 00926 -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, 00927 -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, 00928 -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, 00929 00930 -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, 00931 -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, 00932 -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, 00933 -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, 00934 -34, -34, -34, -34, -34, -34, -34, -34 00935 }, 00936 00937 { 00938 7, -35, -35, -35, -35, -35, -35, -35, -35, -35, 00939 -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 00940 -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 00941 -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 00942 -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 00943 00944 -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 00945 -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 00946 -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 00947 -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 00948 -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 00949 -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 00950 -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 00951 -35, -35, -35, 53, -35, -35, -35, -35 00952 }, 00953 00954 { 00955 7, -36, -36, -36, -36, -36, -36, -36, -36, -36, 00956 -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, 00957 00958 -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, 00959 -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, 00960 -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, 00961 -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, 00962 -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, 00963 -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, 00964 -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, 00965 -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, 00966 -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, 00967 -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, 00968 00969 -36, -36, -36, -36, -36, -36, -36, -36 00970 }, 00971 00972 { 00973 7, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00974 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00975 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00976 37, 37, 37, 37, 38, 37, 37, 37, 37, 37, 00977 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00978 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00979 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00980 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00981 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00982 00983 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00984 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00985 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 00986 37, 37, 37, 37, 37, 37, 37, 37 00987 }, 00988 00989 { 00990 7, -38, -38, -38, -38, -38, -38, -38, -38, -38, 00991 -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 00992 -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 00993 -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 00994 -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 00995 -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 00996 00997 -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 00998 -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 00999 -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 01000 -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 01001 -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 01002 -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 01003 -38, -38, -38, -38, -38, -38, -38, -38 01004 }, 01005 01006 { 01007 7, -39, -39, -39, -39, -39, -39, -39, -39, -39, 01008 -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, 01009 -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, 01010 01011 -39, -39, -39, -39, -39, 39, 39, -39, -39, 39, 01012 -39, -39, -39, -39, 39, -39, 39, -39, 39, 39, 01013 39, 39, 39, 39, 39, 39, 39, 39, -39, 39, 01014 -39, -39, -39, -39, 39, 39, 39, 39, 39, 39, 01015 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 01016 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 01017 39, -39, 39, -39, 39, 39, -39, 39, 39, 39, 01018 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 01019 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 01020 39, 39, 39, -39, -39, -39, -39, -39 01021 01022 }, 01023 01024 { 01025 7, -40, -40, -40, -40, -40, -40, -40, -40, -40, 01026 -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 01027 -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 01028 -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 01029 -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 01030 -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 01031 -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 01032 -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 01033 -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 01034 -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 01035 01036 -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 01037 -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 01038 -40, -40, -40, -40, -40, -40, -40, -40 01039 }, 01040 01041 { 01042 7, -41, -41, -41, -41, -41, -41, -41, -41, -41, 01043 -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, 01044 -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, 01045 -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, 01046 -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, 01047 -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, 01048 -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, 01049 01050 -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, 01051 -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, 01052 -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, 01053 -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, 01054 -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, 01055 -41, -41, -41, -41, -41, -41, -41, -41 01056 }, 01057 01058 { 01059 7, -42, -42, -42, -42, -42, -42, -42, -42, -42, 01060 -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, 01061 -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, 01062 -42, -42, -42, -42, -42, 39, 39, -42, -42, 39, 01063 01064 -42, -42, -42, -42, 39, -42, 39, -42, 42, 42, 01065 42, 42, 42, 42, 42, 42, 42, 42, -42, 39, 01066 -42, -42, -42, -42, 39, 39, 39, 39, 39, 39, 01067 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 01068 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 01069 39, -42, 39, -42, 39, 39, -42, 39, 39, 39, 01070 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 01071 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 01072 39, 39, 39, -42, -42, -42, -42, -42 01073 }, 01074 01075 { 01076 7, -43, -43, -43, -43, -43, -43, -43, -43, -43, 01077 01078 -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 01079 -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 01080 -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 01081 -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 01082 -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 01083 -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 01084 -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 01085 -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 01086 -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 01087 -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 01088 01089 -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 01090 -43, -43, -43, -43, -43, -43, -43, -43 01091 }, 01092 01093 { 01094 7, -44, -44, -44, -44, -44, -44, -44, -44, -44, 01095 -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, 01096 -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, 01097 -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, 01098 -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, 01099 -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, 01100 -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, 01101 -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, 01102 01103 -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, 01104 -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, 01105 -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, 01106 -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, 01107 -44, -44, -44, -44, -44, -44, -44, -44 01108 }, 01109 01110 { 01111 7, -45, -45, -45, -45, -45, -45, -45, -45, -45, 01112 -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, 01113 -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, 01114 -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, 01115 -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, 01116 01117 -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, 01118 -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, 01119 -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, 01120 -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, 01121 -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, 01122 -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, 01123 -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, 01124 -45, -45, -45, -45, -45, -45, -45, -45 01125 }, 01126 01127 { 01128 7, -46, -46, -46, -46, -46, -46, -46, -46, -46, 01129 -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, 01130 01131 -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, 01132 -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, 01133 -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, 01134 -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, 01135 -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, 01136 -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, 01137 -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, 01138 -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, 01139 -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, 01140 -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, 01141 01142 -46, -46, -46, -46, -46, -46, -46, -46 01143 }, 01144 01145 { 01146 7, -47, -47, -47, -47, -47, -47, -47, -47, -47, 01147 -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, 01148 -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, 01149 -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, 01150 -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, 01151 -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, 01152 -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, 01153 -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, 01154 -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, 01155 01156 -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, 01157 -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, 01158 -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, 01159 -47, -47, -47, -47, -47, -47, -47, -47 01160 }, 01161 01162 { 01163 7, -48, -48, -48, -48, -48, -48, -48, -48, -48, 01164 -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 01165 -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 01166 -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 01167 -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 01168 -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 01169 01170 -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 01171 -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 01172 -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 01173 -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 01174 -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 01175 -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 01176 -48, -48, -48, -48, -48, -48, -48, -48 01177 }, 01178 01179 { 01180 7, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01181 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01182 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01183 01184 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01185 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01186 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01187 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01188 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01189 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01190 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01191 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01192 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01193 49, 49, 49, 50, 49, 51, 49, 49 01194 01195 }, 01196 01197 { 01198 7, -50, -50, -50, -50, -50, -50, -50, -50, -50, 01199 -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 01200 -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 01201 -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 01202 -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 01203 -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 01204 -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 01205 -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 01206 -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 01207 -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 01208 01209 -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 01210 -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 01211 -50, -50, -50, -50, -50, -50, -50, -50 01212 }, 01213 01214 { 01215 7, -51, -51, -51, -51, -51, -51, -51, -51, -51, 01216 -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, 01217 -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, 01218 -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, 01219 -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, 01220 -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, 01221 -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, 01222 01223 -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, 01224 -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, 01225 -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, 01226 -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, 01227 -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, 01228 -51, -51, -51, -51, -51, -51, -51, -51 01229 }, 01230 01231 { 01232 7, 52, 52, 52, 52, 52, 52, 52, 52, -52, 01233 -52, 52, 52, -52, 52, 52, 52, 52, 52, 52, 01234 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 01235 52, 52, -52, -52, 52, 52, -52, -52, -52, 52, 01236 01237 -52, -52, -52, -52, 52, -52, 52, -52, 52, 52, 01238 52, 52, 52, 52, 52, 52, 52, 52, -52, 52, 01239 -52, -52, -52, -52, 52, 52, 52, 52, 52, 52, 01240 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 01241 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 01242 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 01243 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 01244 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 01245 52, 52, 52, 52, -52, 52, 52, 52 01246 }, 01247 01248 { 01249 7, -53, -53, -53, -53, -53, -53, -53, -53, -53, 01250 01251 -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 01252 -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 01253 -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 01254 -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 01255 -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 01256 -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 01257 -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 01258 -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 01259 -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 01260 -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 01261 01262 -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 01263 -53, -53, -53, -53, -53, -53, -53, -53 01264 }, 01265 01266 } ; 01267 01268 static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); 01269 static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner); 01270 static int yy_get_next_buffer (yyscan_t yyscanner ); 01271 static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); 01272 01273 /* Done after the current pattern has been matched and before the 01274 * corresponding action - sets up yytext. 01275 */ 01276 #define YY_DO_BEFORE_ACTION \ 01277 yyg->yytext_ptr = yy_bp; \ 01278 yyg->yytext_ptr -= yyg->yy_more_len; \ 01279 yyleng = (size_t) (yy_cp - yyg->yytext_ptr); \ 01280 yyg->yy_hold_char = *yy_cp; \ 01281 *yy_cp = '\0'; \ 01282 yyg->yy_c_buf_p = yy_cp; 01283 01284 #define YY_NUM_RULES 35 01285 #define YY_END_OF_BUFFER 36 01286 /* This struct is not used in this scanner, 01287 but its presence is necessary. */ 01288 struct yy_trans_info 01289 { 01290 flex_int32_t yy_verify; 01291 flex_int32_t yy_nxt; 01292 }; 01293 static yyconst flex_int16_t yy_accept[54] = 01294 { 0, 01295 0, 0, 0, 0, 32, 32, 36, 35, 25, 27, 01296 19, 35, 29, 29, 17, 2, 22, 23, 15, 13, 01297 14, 16, 28, 20, 9, 3, 8, 18, 1, 35, 01298 31, 30, 32, 33, 33, 12, 0, 26, 29, 24, 01299 5, 28, 21, 11, 6, 7, 10, 4, 0, 31, 01300 30, 32, 34 01301 } ; 01302 01303 static yyconst yy_state_type yy_NUL_trans[54] = 01304 { 0, 01305 8, 8, 30, 30, 33, 33, 0, 0, 0, 0, 01306 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 01307 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 01308 0, 0, 52, 0, 0, 0, 37, 0, 0, 0, 01309 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 01310 0, 52, 0 01311 } ; 01312 01313 /* The intent behind this definition is that it'll catch 01314 * any uses of REJECT which flex missed. 01315 */ 01316 #define REJECT reject_used_but_not_detected 01317 #define yymore() (yyg->yy_more_flag = 1) 01318 #define YY_MORE_ADJ yyg->yy_more_len 01319 #define YY_RESTORE_YY_MORE_OFFSET 01320 #line 1 "ast_expr2.fl" 01321 #line 2 "ast_expr2.fl" 01322 /* 01323 * Asterisk -- An open source telephony toolkit. 01324 * 01325 * Copyright (C) 1999 - 2006, Digium, Inc. 01326 * 01327 * Mark Spencer <markster@digium.com> 01328 * 01329 * See http://www.asterisk.org for more information about 01330 * the Asterisk project. Please do not directly contact 01331 * any of the maintainers of this project for assistance; 01332 * the project provides a web site, mailing lists and IRC 01333 * channels for your use. 01334 * 01335 * This program is free software, distributed under the terms of 01336 * the GNU General Public License Version 2. See the LICENSE file 01337 * at the top of the source tree. 01338 */ 01339 01340 /*! \file 01341 * 01342 * \brief Dialplan Expression Lexical Scanner 01343 */ 01344 01345 #include "asterisk.h" 01346 01347 #ifndef STANDALONE 01348 ASTERISK_FILE_VERSION(__FILE__, "$Revision: 49249 $") 01349 #endif 01350 01351 #include <sys/types.h> 01352 #include <stdio.h> 01353 #include <stdlib.h> 01354 #include <string.h> 01355 #include <locale.h> 01356 #include <ctype.h> 01357 #if !defined(SOLARIS) && !defined(__CYGWIN__) 01358 /* #include <err.h> */ 01359 #else 01360 #define quad_t int64_t 01361 #endif 01362 #include <errno.h> 01363 #include <regex.h> 01364 #include <limits.h> 01365 01366 #include "asterisk/ast_expr.h" 01367 #include "asterisk/logger.h" 01368 #include "asterisk/strings.h" 01369 01370 enum valtype { 01371 AST_EXPR_integer, AST_EXPR_numeric_string, AST_EXPR_string 01372 } ; 01373 01374 struct val { 01375 enum valtype type; 01376 union { 01377 char *s; 01378 quad_t i; 01379 } u; 01380 } ; 01381 01382 #include "ast_expr2.h" /* the o/p of the bison on ast_expr2.y */ 01383 01384 #define SET_COLUMNS do { \ 01385 yylloc_param->first_column = (int)(yyg->yytext_r - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf); \ 01386 yylloc_param->last_column += yyleng - 1; \ 01387 yylloc_param->first_line = yylloc_param->last_line = 1; \ 01388 } while (0) 01389 01390 #define SET_STRING do { \ 01391 yylval_param->val = calloc(1, sizeof(struct val)); \ 01392 yylval_param->val->type = AST_EXPR_string; \ 01393 yylval_param->val->u.s = strdup(yytext); \ 01394 } while (0) 01395 01396 #define SET_NUMERIC_STRING do { \ 01397 yylval_param->val = calloc(1, sizeof(struct val)); \ 01398 yylval_param->val->type = AST_EXPR_numeric_string; \ 01399 yylval_param->val->u.s = strdup(yytext); \ 01400 } while (0) 01401 01402 struct parse_io 01403 { 01404 char *string; 01405 struct val *val; 01406 yyscan_t scanner; 01407 }; 01408 01409 void ast_yyset_column(int column_no, yyscan_t yyscanner); 01410 int ast_yyget_column(yyscan_t yyscanner); 01411 static int curlycount = 0; 01412 static char *expr2_token_subst(char *mess); 01413 01414 #line 1415 "ast_expr2f.c" 01415 01416 #define INITIAL 0 01417 #define var 1 01418 #define trail 2 01419 01420 /* Special case for "unistd.h", since it is non-ANSI. We include it way 01421 * down here because we want the user's section 1 to have been scanned first. 01422 * The user has a chance to override it with an option. 01423 */ 01424 #include <unistd.h> 01425 01426 #ifndef YY_EXTRA_TYPE 01427 #define YY_EXTRA_TYPE void * 01428 #endif 01429 01430 /* Holds the entire state of the reentrant scanner. */ 01431 struct yyguts_t 01432 { 01433 01434 /* User-defined. Not touched by flex. */ 01435 YY_EXTRA_TYPE yyextra_r; 01436 01437 /* The rest are the same as the globals declared in the non-reentrant scanner. */ 01438 FILE *yyin_r, *yyout_r; 01439 size_t yy_buffer_stack_top; /**< index of top of stack. */ 01440 size_t yy_buffer_stack_max; /**< capacity of stack. */ 01441 YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ 01442 char yy_hold_char; 01443 int yy_n_chars; 01444 int yyleng_r; 01445 char *yy_c_buf_p; 01446 int yy_init; 01447 int yy_start; 01448 int yy_did_buffer_switch_on_eof; 01449 int yy_start_stack_ptr; 01450 int yy_start_stack_depth; 01451 int *yy_start_stack; 01452 yy_state_type yy_last_accepting_state; 01453 char* yy_last_accepting_cpos; 01454 01455 int yylineno_r; 01456 int yy_flex_debug_r; 01457 01458 char *yytext_r; 01459 int yy_more_flag; 01460 int yy_more_len; 01461 01462 YYSTYPE * yylval_r; 01463 01464 YYLTYPE * yylloc_r; 01465 01466 }; /* end struct yyguts_t */ 01467 01468 /* This must go here because YYSTYPE and YYLTYPE are included 01469 * from bison output in section 1.*/ 01470 # define yylval yyg->yylval_r 01471 01472 # define yylloc yyg->yylloc_r 01473 01474 /* Accessor methods to globals. 01475 These are made visible to non-reentrant scanners for convenience. */ 01476 01477 int ast_yylex_destroy (yyscan_t yyscanner ); 01478 01479 int ast_yyget_debug (yyscan_t yyscanner ); 01480 01481 void ast_yyset_debug (int debug_flag ,yyscan_t yyscanner ); 01482 01483 YY_EXTRA_TYPE ast_yyget_extra (yyscan_t yyscanner ); 01484 01485 void ast_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); 01486 01487 FILE *ast_yyget_in (yyscan_t yyscanner ); 01488 01489 void ast_yyset_in (FILE * in_str ,yyscan_t yyscanner ); 01490 01491 FILE *ast_yyget_out (yyscan_t yyscanner ); 01492 01493 void ast_yyset_out (FILE * out_str ,yyscan_t yyscanner ); 01494 01495 int ast_yyget_leng (yyscan_t yyscanner ); 01496 01497 char *ast_yyget_text (yyscan_t yyscanner ); 01498 01499 int ast_yyget_lineno (yyscan_t yyscanner ); 01500 01501 void ast_yyset_lineno (int line_number ,yyscan_t yyscanner ); 01502 01503 YYSTYPE * ast_yyget_lval (yyscan_t yyscanner ); 01504 01505 void ast_yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner ); 01506 01507 YYLTYPE *ast_yyget_lloc (yyscan_t yyscanner ); 01508 01509 void ast_yyset_lloc (YYLTYPE * yylloc_param ,yyscan_t yyscanner ); 01510 01511 /* Macros after this point can all be overridden by user definitions in 01512 * section 1. 01513 */ 01514 01515 #ifndef YY_SKIP_YYWRAP 01516 #ifdef __cplusplus 01517 extern "C" int ast_yywrap (yyscan_t yyscanner ); 01518 #else 01519 extern int ast_yywrap (yyscan_t yyscanner ); 01520 #endif 01521 #endif 01522 01523 static void yyunput (int c,char *buf_ptr ,yyscan_t yyscanner); 01524 01525 #ifndef yytext_ptr 01526 static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); 01527 #endif 01528 01529 #ifdef YY_NEED_STRLEN 01530 static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); 01531 #endif 01532 01533 #ifndef YY_NO_INPUT 01534 01535 #ifdef __cplusplus 01536 static int yyinput (yyscan_t yyscanner ); 01537 #else 01538 static int input (yyscan_t yyscanner ); 01539 #endif 01540 01541 #endif 01542 01543 /* Amount of stuff to slurp up with each read. */ 01544 #ifndef YY_READ_BUF_SIZE 01545 #define YY_READ_BUF_SIZE 8192 01546 #endif 01547 01548 /* Copy whatever the last rule matched to the standard output. */ 01549 #ifndef ECHO 01550 /* This used to be an fputs(), but since the string might contain NUL's, 01551 * we now use fwrite(). 01552 */ 01553 #define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) 01554 #endif 01555 01556 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, 01557 * is returned in "result". 01558 */ 01559 #ifndef YY_INPUT 01560 #define YY_INPUT(buf,result,max_size) \ 01561 errno=0; \ 01562 while ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) \ 01563 { \ 01564 if( errno != EINTR) \ 01565 { \ 01566 YY_FATAL_ERROR( "input in flex scanner failed" ); \ 01567 break; \ 01568 } \ 01569 errno=0; \ 01570 clearerr(yyin); \ 01571 }\ 01572 \ 01573 01574 #endif 01575 01576 /* No semi-colon after return; correct usage is to write "yyterminate();" - 01577 * we don't want an extra ';' after the "return" because that will cause 01578 * some compilers to complain about unreachable statements. 01579 */ 01580 #ifndef yyterminate 01581 #define yyterminate() return YY_NULL 01582 #endif 01583 01584 /* Number of entries by which start-condition stack grows. */ 01585 #ifndef YY_START_STACK_INCR 01586 #define YY_START_STACK_INCR 25 01587 #endif 01588 01589 /* Report a fatal error. */ 01590 #ifndef YY_FATAL_ERROR 01591 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) 01592 #endif 01593 01594 /* end tables serialization structures and prototypes */ 01595 01596 /* Default declaration of generated scanner - a define so the user can 01597 * easily add parameters. 01598 */ 01599 #ifndef YY_DECL 01600 #define YY_DECL_IS_OURS 1 01601 01602 extern int ast_yylex (YYSTYPE * yylval_param,YYLTYPE * yylloc_param ,yyscan_t yyscanner); 01603 01604 #define YY_DECL int ast_yylex (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner) 01605 #endif /* !YY_DECL */ 01606 01607 /* Code executed at the beginning of each rule, after yytext and yyleng 01608 * have been set up. 01609 */ 01610 #ifndef YY_USER_ACTION 01611 #define YY_USER_ACTION 01612 #endif 01613 01614 /* Code executed at the end of each rule. */ 01615 #ifndef YY_BREAK 01616 #define YY_BREAK break; 01617 #endif 01618 01619 #define YY_RULE_SETUP \ 01620 YY_USER_ACTION 01621 01622 /** The main scanner function which does all the work. 01623 */ 01624 YY_DECL 01625 { 01626 register yy_state_type yy_current_state; 01627 register char *yy_cp, *yy_bp; 01628 register int yy_act; 01629 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 01630 01631 #line 104 "ast_expr2.fl" 01632 01633 01634 #line 1635 "ast_expr2f.c" 01635 01636 yylval = yylval_param; 01637 01638 yylloc = yylloc_param; 01639 01640 if ( yyg->yy_init ) 01641 { 01642 yyg->yy_init = 0; 01643 01644 #ifdef YY_USER_INIT 01645 YY_USER_INIT; 01646 #endif 01647 01648 if ( ! yyg->yy_start ) 01649 yyg->yy_start = 1; /* first start state */ 01650 01651 if ( ! yyin ) 01652 yyin = stdin; 01653 01654 if ( ! yyout ) 01655 yyout = stdout; 01656 01657 if ( ! YY_CURRENT_BUFFER ) { 01658 ast_yyensure_buffer_stack (yyscanner); 01659 YY_CURRENT_BUFFER_LVALUE = 01660 ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); 01661 } 01662 01663 ast_yy_load_buffer_state(yyscanner ); 01664 } 01665 01666 while ( 1 ) /* loops until end-of-file is reached */ 01667 { 01668 yyg->yy_more_len = 0; 01669 if ( yyg->yy_more_flag ) 01670 { 01671 yyg->yy_more_len = yyg->yy_c_buf_p - yyg->yytext_ptr; 01672 yyg->yy_more_flag = 0; 01673 } 01674 yy_cp = yyg->yy_c_buf_p; 01675 01676 /* Support of yytext. */ 01677 *yy_cp = yyg->yy_hold_char; 01678 01679 /* yy_bp points to the position in yy_ch_buf of the start of 01680 * the current run. 01681 */ 01682 yy_bp = yy_cp; 01683 01684 yy_current_state = yyg->yy_start; 01685 yy_match: 01686 while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) 01687 { 01688 if ( yy_accept[yy_current_state] ) 01689 { 01690 yyg->yy_last_accepting_state = yy_current_state; 01691 yyg->yy_last_accepting_cpos = yy_cp; 01692 } 01693 01694 ++yy_cp; 01695 } 01696 01697 yy_current_state = -yy_current_state; 01698 01699 yy_find_action: 01700 yy_act = yy_accept[yy_current_state]; 01701 01702 YY_DO_BEFORE_ACTION; 01703 01704 do_action: /* This label is used only to access EOF actions. */ 01705 01706 switch ( yy_act ) 01707 { /* beginning of action switch */ 01708 case 0: /* must back up */ 01709 /* undo the effects of YY_DO_BEFORE_ACTION */ 01710 *yy_cp = yyg->yy_hold_char; 01711 yy_cp = yyg->yy_last_accepting_cpos + 1; 01712 yy_current_state = yyg->yy_last_accepting_state; 01713 goto yy_find_action; 01714 01715 case 1: 01716 YY_RULE_SETUP 01717 #line 106 "ast_expr2.fl" 01718 { SET_COLUMNS; SET_STRING; return TOK_OR;} 01719 YY_BREAK 01720 case 2: 01721 YY_RULE_SETUP 01722 #line 107 "ast_expr2.fl" 01723 { SET_COLUMNS; SET_STRING; return TOK_AND;} 01724 YY_BREAK 01725 case 3: 01726 YY_RULE_SETUP 01727 #line 108 "ast_expr2.fl" 01728 { SET_COLUMNS; SET_STRING; return TOK_EQ;} 01729 YY_BREAK 01730 case 4: 01731 YY_RULE_SETUP 01732 #line 109 "ast_expr2.fl" 01733 { SET_COLUMNS; SET_STRING; return TOK_OR;} 01734 YY_BREAK 01735 case 5: 01736 YY_RULE_SETUP 01737 #line 110 "ast_expr2.fl" 01738 { SET_COLUMNS; SET_STRING; return TOK_AND;} 01739 YY_BREAK 01740 case 6: 01741 YY_RULE_SETUP 01742 #line 111 "ast_expr2.fl" 01743 { SET_COLUMNS; SET_STRING; return TOK_EQ;} 01744 YY_BREAK 01745 case 7: 01746 YY_RULE_SETUP 01747 #line 112 "ast_expr2.fl" 01748 { SET_COLUMNS; SET_STRING; return TOK_EQTILDE;} 01749 YY_BREAK 01750 case 8: 01751 YY_RULE_SETUP 01752 #line 113 "ast_expr2.fl" 01753 { SET_COLUMNS; SET_STRING; return TOK_GT;} 01754 YY_BREAK 01755 case 9: 01756 YY_RULE_SETUP 01757 #line 114 "ast_expr2.fl" 01758 { SET_COLUMNS; SET_STRING; return TOK_LT;} 01759 YY_BREAK 01760 case 10: 01761 YY_RULE_SETUP 01762 #line 115 "ast_expr2.fl" 01763 { SET_COLUMNS; SET_STRING; return TOK_GE;} 01764 YY_BREAK 01765 case 11: 01766 YY_RULE_SETUP 01767 #line 116 "ast_expr2.fl" 01768 { SET_COLUMNS; SET_STRING; return TOK_LE;} 01769 YY_BREAK 01770 case 12: 01771 YY_RULE_SETUP 01772 #line 117 "ast_expr2.fl" 01773 { SET_COLUMNS; SET_STRING; return TOK_NE;} 01774 YY_BREAK 01775 case 13: 01776 YY_RULE_SETUP 01777 #line 118 "ast_expr2.fl" 01778 { SET_COLUMNS; SET_STRING; return TOK_PLUS;} 01779 YY_BREAK 01780 case 14: 01781 YY_RULE_SETUP 01782 #line 119 "ast_expr2.fl" 01783 { SET_COLUMNS; SET_STRING; return TOK_MINUS;} 01784 YY_BREAK 01785 case 15: 01786 YY_RULE_SETUP 01787 #line 120 "ast_expr2.fl" 01788 { SET_COLUMNS; SET_STRING; return TOK_MULT;} 01789 YY_BREAK 01790 case 16: 01791 YY_RULE_SETUP 01792 #line 121 "ast_expr2.fl" 01793 { SET_COLUMNS; SET_STRING; return TOK_DIV;} 01794 YY_BREAK 01795 case 17: 01796 YY_RULE_SETUP 01797 #line 122 "ast_expr2.fl" 01798 { SET_COLUMNS; SET_STRING; return TOK_MOD;} 01799 YY_BREAK 01800 case 18: 01801 YY_RULE_SETUP 01802 #line 123 "ast_expr2.fl" 01803 { SET_COLUMNS; SET_STRING; return TOK_COND;} 01804 YY_BREAK 01805 case 19: 01806 YY_RULE_SETUP 01807 #line 124 "ast_expr2.fl" 01808 { SET_COLUMNS; SET_STRING; return TOK_COMPL;} 01809 YY_BREAK 01810 case 20: 01811 YY_RULE_SETUP 01812 #line 125 "ast_expr2.fl" 01813 { SET_COLUMNS; SET_STRING; return TOK_COLON;} 01814 YY_BREAK 01815 case 21: 01816 YY_RULE_SETUP 01817 #line 126 "ast_expr2.fl" 01818 { SET_COLUMNS; SET_STRING; return TOK_COLONCOLON;} 01819 YY_BREAK 01820 case 22: 01821 YY_RULE_SETUP 01822 #line 127 "ast_expr2.fl" 01823 { SET_COLUMNS; SET_STRING; return TOK_LP;} 01824 YY_BREAK 01825 case 23: 01826 YY_RULE_SETUP 01827 #line 128 "ast_expr2.fl" 01828 { SET_COLUMNS; SET_STRING; return TOK_RP;} 01829 YY_BREAK 01830 case 24: 01831 YY_RULE_SETUP 01832 #line 129 "ast_expr2.fl" 01833 { 01834 /* gather the contents of ${} expressions, with trailing stuff, 01835 * into a single TOKEN. 01836 * They are much more complex now than they used to be 01837 */ 01838 curlycount = 0; 01839 BEGIN(var); 01840 yymore(); 01841 } 01842 YY_BREAK 01843 case 25: 01844 YY_RULE_SETUP 01845 #line 139 "ast_expr2.fl" 01846 {} 01847 YY_BREAK 01848 case 26: 01849 /* rule 26 can match eol */ 01850 YY_RULE_SETUP 01851 #line 140 "ast_expr2.fl" 01852 {SET_COLUMNS; SET_STRING; return TOKEN;} 01853 YY_BREAK 01854 case 27: 01855 /* rule 27 can match eol */ 01856 YY_RULE_SETUP 01857 #line 142 "ast_expr2.fl" 01858 {/* what to do with eol */} 01859 YY_BREAK 01860 case 28: 01861 YY_RULE_SETUP 01862 #line 143 "ast_expr2.fl" 01863 { 01864 SET_COLUMNS; 01865 /* the original behavior of the expression parser was 01866 * to bring in numbers as a numeric string 01867 */ 01868 SET_NUMERIC_STRING; 01869 return TOKEN; 01870 } 01871 YY_BREAK 01872 case 29: 01873 YY_RULE_SETUP 01874 #line 152 "ast_expr2.fl" 01875 { 01876 SET_COLUMNS; 01877 SET_STRING; 01878 return TOKEN; 01879 } 01880 YY_BREAK 01881 case 30: 01882 /* rule 30 can match eol */ 01883 YY_RULE_SETUP 01884 #line 159 "ast_expr2.fl" 01885 { 01886 curlycount--; 01887 if (curlycount < 0) { 01888 BEGIN(trail); 01889 yymore(); 01890 } else { 01891 yymore(); 01892 } 01893 } 01894 YY_BREAK 01895 case 31: 01896 /* rule 31 can match eol */ 01897 YY_RULE_SETUP 01898 #line 169 "ast_expr2.fl" 01899 { 01900 curlycount++; 01901 yymore(); 01902 } 01903 YY_BREAK 01904 case 32: 01905 YY_RULE_SETUP 01906 #line 175 "ast_expr2.fl" 01907 { 01908 BEGIN(0); 01909 SET_COLUMNS; 01910 SET_STRING; 01911 return TOKEN; 01912 } 01913 YY_BREAK 01914 case 33: 01915 /* rule 33 can match eol */ 01916 YY_RULE_SETUP 01917 #line 182 "ast_expr2.fl" 01918 { 01919 char c = yytext[yyleng-1]; 01920 BEGIN(0); 01921 unput(c); 01922 SET_COLUMNS; 01923 SET_STRING; 01924 return TOKEN; 01925 } 01926 YY_BREAK 01927 case 34: 01928 YY_RULE_SETUP 01929 #line 191 "ast_expr2.fl" 01930 { 01931 curlycount = 0; 01932 BEGIN(var); 01933 yymore(); 01934 } 01935 YY_BREAK 01936 case YY_STATE_EOF(trail): 01937 #line 197 "ast_expr2.fl" 01938 { 01939 BEGIN(0); 01940 SET_COLUMNS; 01941 SET_STRING; 01942 return TOKEN; 01943 /*actually, if an expr is only a variable ref, this could happen a LOT */ 01944 } 01945 YY_BREAK 01946 case 35: 01947 YY_RULE_SETUP 01948 #line 205 "ast_expr2.fl" 01949 ECHO; 01950 YY_BREAK 01951 #line 1952 "ast_expr2f.c" 01952 case YY_STATE_EOF(INITIAL): 01953 case YY_STATE_EOF(var): 01954 yyterminate(); 01955 01956 case YY_END_OF_BUFFER: 01957 { 01958 /* Amount of text matched not including the EOB char. */ 01959 int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; 01960 01961 /* Undo the effects of YY_DO_BEFORE_ACTION. */ 01962 *yy_cp = yyg->yy_hold_char; 01963 YY_RESTORE_YY_MORE_OFFSET 01964 01965 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) 01966 { 01967 /* We're scanning a new file or input source. It's 01968 * possible that this happened because the user 01969 * just pointed yyin at a new source and called 01970 * ast_yylex(). If so, then we have to assure 01971 * consistency between YY_CURRENT_BUFFER and our 01972 * globals. Here is the right place to do so, because 01973 * this is the first action (other than possibly a 01974 * back-up) that will match for the new input source. 01975 */ 01976 yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; 01977 YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; 01978 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; 01979 } 01980 01981 /* Note that here we test for yy_c_buf_p "<=" to the position 01982 * of the first EOB in the buffer, since yy_c_buf_p will 01983 * already have been incremented past the NUL character 01984 * (since all states make transitions on EOB to the 01985 * end-of-buffer state). Contrast this with the test 01986 * in input(). 01987 */ 01988 if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) 01989 { /* This was really a NUL. */ 01990 yy_state_type yy_next_state; 01991 01992 yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; 01993 01994 yy_current_state = yy_get_previous_state( yyscanner ); 01995 01996 /* Okay, we're now positioned to make the NUL 01997 * transition. We couldn't have 01998 * yy_get_previous_state() go ahead and do it 01999 * for us because it doesn't know how to deal 02000 * with the possibility of jamming (and we don't 02001 * want to build jamming into it because then it 02002 * will run more slowly). 02003 */ 02004 02005 yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); 02006 02007 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; 02008 02009 if ( yy_next_state ) 02010 { 02011 /* Consume the NUL. */ 02012 yy_cp = ++yyg->yy_c_buf_p; 02013 yy_current_state = yy_next_state; 02014 goto yy_match; 02015 } 02016 02017 else 02018 { 02019 yy_cp = yyg->yy_c_buf_p; 02020 goto yy_find_action; 02021 } 02022 } 02023 02024 else switch ( yy_get_next_buffer( yyscanner ) ) 02025 { 02026 case EOB_ACT_END_OF_FILE: 02027 { 02028 yyg->yy_did_buffer_switch_on_eof = 0; 02029 02030 if ( ast_yywrap(yyscanner ) ) 02031 { 02032 /* Note: because we've taken care in 02033 * yy_get_next_buffer() to have set up 02034 * yytext, we can now set up 02035 * yy_c_buf_p so that if some total 02036 * hoser (like flex itself) wants to 02037 * call the scanner after we return the 02038 * YY_NULL, it'll still work - another 02039 * YY_NULL will get returned. 02040 */ 02041 yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; 02042 02043 yy_act = YY_STATE_EOF(YY_START); 02044 goto do_action; 02045 } 02046 02047 else 02048 { 02049 if ( ! yyg->yy_did_buffer_switch_on_eof ) 02050 YY_NEW_FILE; 02051 } 02052 break; 02053 } 02054 02055 case EOB_ACT_CONTINUE_SCAN: 02056 yyg->yy_c_buf_p = 02057 yyg->yytext_ptr + yy_amount_of_matched_text; 02058 02059 yy_current_state = yy_get_previous_state( yyscanner ); 02060 02061 yy_cp = yyg->yy_c_buf_p; 02062 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; 02063 goto yy_match; 02064 02065 case EOB_ACT_LAST_MATCH: 02066 yyg->yy_c_buf_p = 02067 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; 02068 02069 yy_current_state = yy_get_previous_state( yyscanner ); 02070 02071 yy_cp = yyg->yy_c_buf_p; 02072 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; 02073 goto yy_find_action; 02074 } 02075 break; 02076 } 02077 02078 default: 02079 YY_FATAL_ERROR( 02080 "fatal flex scanner internal error--no action found" ); 02081 } /* end of action switch */ 02082 } /* end of scanning one token */ 02083 } /* end of ast_yylex */ 02084 02085 /* yy_get_next_buffer - try to read in a new buffer 02086 * 02087 * Returns a code representing an action: 02088 * EOB_ACT_LAST_MATCH - 02089 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position 02090 * EOB_ACT_END_OF_FILE - end of file 02091 */ 02092 static int yy_get_next_buffer (yyscan_t yyscanner) 02093 { 02094 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02095 register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; 02096 register char *source = yyg->yytext_ptr; 02097 register int number_to_move, i; 02098 int ret_val; 02099 02100 if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) 02101 YY_FATAL_ERROR( 02102 "fatal flex scanner internal error--end of buffer missed" ); 02103 02104 if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) 02105 { /* Don't try to fill the buffer, so this is an EOF. */ 02106 if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) 02107 { 02108 /* We matched a single character, the EOB, so 02109 * treat this as a final EOF. 02110 */ 02111 return EOB_ACT_END_OF_FILE; 02112 } 02113 02114 else 02115 { 02116 /* We matched some text prior to the EOB, first 02117 * process it. 02118 */ 02119 return EOB_ACT_LAST_MATCH; 02120 } 02121 } 02122 02123 /* Try to read more data. */ 02124 02125 /* First move last chars to start of buffer. */ 02126 number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1; 02127 02128 for ( i = 0; i < number_to_move; ++i ) 02129 *(dest++) = *(source++); 02130 02131 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) 02132 /* don't do the read, it's not guaranteed to return an EOF, 02133 * just force an EOF 02134 */ 02135 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; 02136 02137 else 02138 { 02139 size_t num_to_read = 02140 YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; 02141 02142 while ( num_to_read <= 0 ) 02143 { /* Not enough room in the buffer - grow it. */ 02144 02145 /* just a shorter name for the current buffer */ 02146 YY_BUFFER_STATE b = YY_CURRENT_BUFFER; 02147 02148 int yy_c_buf_p_offset = 02149 (int) (yyg->yy_c_buf_p - b->yy_ch_buf); 02150 02151 if ( b->yy_is_our_buffer ) 02152 { 02153 int new_size = b->yy_buf_size * 2; 02154 02155 if ( new_size <= 0 ) 02156 b->yy_buf_size += b->yy_buf_size / 8; 02157 else 02158 b->yy_buf_size *= 2; 02159 02160 b->yy_ch_buf = (char *) 02161 /* Include room in for 2 EOB chars. */ 02162 ast_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner ); 02163 } 02164 else 02165 /* Can't grow it, we don't own it. */ 02166 b->yy_ch_buf = 0; 02167 02168 if ( ! b->yy_ch_buf ) 02169 YY_FATAL_ERROR( 02170 "fatal error - scanner input buffer overflow" ); 02171 02172 yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; 02173 02174 num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - 02175 number_to_move - 1; 02176 02177 } 02178 02179 if ( num_to_read > YY_READ_BUF_SIZE ) 02180 num_to_read = YY_READ_BUF_SIZE; 02181 02182 /* Read in more data. */ 02183 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), 02184 yyg->yy_n_chars, num_to_read ); 02185 02186 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; 02187 } 02188 02189 if ( yyg->yy_n_chars == 0 ) 02190 { 02191 if ( number_to_move == YY_MORE_ADJ ) 02192 { 02193 ret_val = EOB_ACT_END_OF_FILE; 02194 ast_yyrestart(yyin ,yyscanner); 02195 } 02196 02197 else 02198 { 02199 ret_val = EOB_ACT_LAST_MATCH; 02200 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = 02201 YY_BUFFER_EOF_PENDING; 02202 } 02203 } 02204 02205 else 02206 ret_val = EOB_ACT_CONTINUE_SCAN; 02207 02208 yyg->yy_n_chars += number_to_move; 02209 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; 02210 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; 02211 02212 yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; 02213 02214 return ret_val; 02215 } 02216 02217 /* yy_get_previous_state - get the state just before the EOB char was reached */ 02218 02219 static yy_state_type yy_get_previous_state (yyscan_t yyscanner) 02220 { 02221 register yy_state_type yy_current_state; 02222 register char *yy_cp; 02223 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02224 02225 yy_current_state = yyg->yy_start; 02226 02227 for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) 02228 { 02229 if ( *yy_cp ) 02230 { 02231 yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; 02232 } 02233 else 02234 yy_current_state = yy_NUL_trans[yy_current_state]; 02235 if ( yy_accept[yy_current_state] ) 02236 { 02237 yyg->yy_last_accepting_state = yy_current_state; 02238 yyg->yy_last_accepting_cpos = yy_cp; 02239 } 02240 } 02241 02242 return yy_current_state; 02243 } 02244 02245 /* yy_try_NUL_trans - try to make a transition on the NUL character 02246 * 02247 * synopsis 02248 * next_state = yy_try_NUL_trans( current_state ); 02249 */ 02250 static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) 02251 { 02252 register int yy_is_jam; 02253 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02254 register char *yy_cp = yyg->yy_c_buf_p; 02255 02256 yy_current_state = yy_NUL_trans[yy_current_state]; 02257 yy_is_jam = (yy_current_state == 0); 02258 02259 if ( ! yy_is_jam ) 02260 { 02261 if ( yy_accept[yy_current_state] ) 02262 { 02263 yyg->yy_last_accepting_state = yy_current_state; 02264 yyg->yy_last_accepting_cpos = yy_cp; 02265 } 02266 } 02267 02268 return yy_is_jam ? 0 : yy_current_state; 02269 } 02270 02271 static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner) 02272 { 02273 register char *yy_cp; 02274 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02275 02276 yy_cp = yyg->yy_c_buf_p; 02277 02278 /* undo effects of setting up yytext */ 02279 *yy_cp = yyg->yy_hold_char; 02280 02281 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) 02282 { /* need to shift things up to make room */ 02283 /* +2 for EOB chars. */ 02284 register int number_to_move = yyg->yy_n_chars + 2; 02285 register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ 02286 YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; 02287 register char *source = 02288 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; 02289 02290 while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) 02291 *--dest = *--source; 02292 02293 yy_cp += (int) (dest - source); 02294 yy_bp += (int) (dest - source); 02295 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = 02296 yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; 02297 02298 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) 02299 YY_FATAL_ERROR( "flex scanner push-back overflow" ); 02300 } 02301 02302 *--yy_cp = (char) c; 02303 02304 yyg->yytext_ptr = yy_bp; 02305 yyg->yy_hold_char = *yy_cp; 02306 yyg->yy_c_buf_p = yy_cp; 02307 } 02308 02309 #ifndef YY_NO_INPUT 02310 #ifdef __cplusplus 02311 static int yyinput (yyscan_t yyscanner) 02312 #else 02313 static int input (yyscan_t yyscanner) 02314 #endif 02315 02316 { 02317 int c; 02318 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02319 02320 *yyg->yy_c_buf_p = yyg->yy_hold_char; 02321 02322 if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) 02323 { 02324 /* yy_c_buf_p now points to the character we want to return. 02325 * If this occurs *before* the EOB characters, then it's a 02326 * valid NUL; if not, then we've hit the end of the buffer. 02327 */ 02328 if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) 02329 /* This was really a NUL. */ 02330 *yyg->yy_c_buf_p = '\0'; 02331 02332 else 02333 { /* need more input */ 02334 int offset = yyg->yy_c_buf_p - yyg->yytext_ptr; 02335 ++yyg->yy_c_buf_p; 02336 02337 switch ( yy_get_next_buffer( yyscanner ) ) 02338 { 02339 case EOB_ACT_LAST_MATCH: 02340 /* This happens because yy_g_n_b() 02341 * sees that we've accumulated a 02342 * token and flags that we need to 02343 * try matching the token before 02344 * proceeding. But for input(), 02345 * there's no matching to consider. 02346 * So convert the EOB_ACT_LAST_MATCH 02347 * to EOB_ACT_END_OF_FILE. 02348 */ 02349 02350 /* Reset buffer status. */ 02351 ast_yyrestart(yyin ,yyscanner); 02352 02353 /*FALLTHROUGH*/ 02354 02355 case EOB_ACT_END_OF_FILE: 02356 { 02357 if ( ast_yywrap(yyscanner ) ) 02358 return EOF; 02359 02360 if ( ! yyg->yy_did_buffer_switch_on_eof ) 02361 YY_NEW_FILE; 02362 #ifdef __cplusplus 02363 return yyinput(yyscanner); 02364 #else 02365 return input(yyscanner); 02366 #endif 02367 } 02368 02369 case EOB_ACT_CONTINUE_SCAN: 02370 yyg->yy_c_buf_p = yyg->yytext_ptr + offset; 02371 break; 02372 } 02373 } 02374 } 02375 02376 c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ 02377 *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ 02378 yyg->yy_hold_char = *++yyg->yy_c_buf_p; 02379 02380 return c; 02381 } 02382 #endif /* ifndef YY_NO_INPUT */ 02383 02384 /** Immediately switch to a different input stream. 02385 * @param input_file A readable stream. 02386 * @param yyscanner The scanner object. 02387 * @note This function does not reset the start condition to @c INITIAL . 02388 */ 02389 void ast_yyrestart (FILE * input_file , yyscan_t yyscanner) 02390 { 02391 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02392 02393 if ( ! YY_CURRENT_BUFFER ){ 02394 ast_yyensure_buffer_stack (yyscanner); 02395 YY_CURRENT_BUFFER_LVALUE = 02396 ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); 02397 } 02398 02399 ast_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner); 02400 ast_yy_load_buffer_state(yyscanner ); 02401 } 02402 02403 /** Switch to a different input buffer. 02404 * @param new_buffer The new input buffer. 02405 * @param yyscanner The scanner object. 02406 */ 02407 void ast_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) 02408 { 02409 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02410 02411 /* TODO. We should be able to replace this entire function body 02412 * with 02413 * ast_yypop_buffer_state(); 02414 * ast_yypush_buffer_state(new_buffer); 02415 */ 02416 ast_yyensure_buffer_stack (yyscanner); 02417 if ( YY_CURRENT_BUFFER == new_buffer ) 02418 return; 02419 02420 if ( YY_CURRENT_BUFFER ) 02421 { 02422 /* Flush out information for old buffer. */ 02423 *yyg->yy_c_buf_p = yyg->yy_hold_char; 02424 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; 02425 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; 02426 } 02427 02428 YY_CURRENT_BUFFER_LVALUE = new_buffer; 02429 ast_yy_load_buffer_state(yyscanner ); 02430 02431 /* We don't actually know whether we did this switch during 02432 * EOF (ast_yywrap()) processing, but the only time this flag 02433 * is looked at is after ast_yywrap() is called, so it's safe 02434 * to go ahead and always set it. 02435 */ 02436 yyg->yy_did_buffer_switch_on_eof = 1; 02437 } 02438 02439 static void ast_yy_load_buffer_state (yyscan_t yyscanner) 02440 { 02441 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02442 yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; 02443 yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; 02444 yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; 02445 yyg->yy_hold_char = *yyg->yy_c_buf_p; 02446 } 02447 02448 /** Allocate and initialize an input buffer state. 02449 * @param file A readable stream. 02450 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. 02451 * @param yyscanner The scanner object. 02452 * @return the allocated buffer state. 02453 */ 02454 YY_BUFFER_STATE ast_yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) 02455 { 02456 YY_BUFFER_STATE b; 02457 02458 b = (YY_BUFFER_STATE) ast_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); 02459 if ( ! b ) 02460 YY_FATAL_ERROR( "out of dynamic memory in ast_yy_create_buffer()" ); 02461 02462 b->yy_buf_size = size; 02463 02464 /* yy_ch_buf has to be 2 characters longer than the size given because 02465 * we need to put in 2 end-of-buffer characters. 02466 */ 02467 b->yy_ch_buf = (char *) ast_yyalloc(b->yy_buf_size + 2 ,yyscanner ); 02468 if ( ! b->yy_ch_buf ) 02469 YY_FATAL_ERROR( "out of dynamic memory in ast_yy_create_buffer()" ); 02470 02471 b->yy_is_our_buffer = 1; 02472 02473 ast_yy_init_buffer(b,file ,yyscanner); 02474 02475 return b; 02476 } 02477 02478 /** Destroy the buffer. 02479 * @param b a buffer created with ast_yy_create_buffer() 02480 * @param yyscanner The scanner object. 02481 */ 02482 void ast_yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) 02483 { 02484 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02485 02486 if ( ! b ) 02487 return; 02488 02489 if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ 02490 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; 02491 02492 if ( b->yy_is_our_buffer ) 02493 ast_yyfree((void *) b->yy_ch_buf ,yyscanner ); 02494 02495 ast_yyfree((void *) b ,yyscanner ); 02496 } 02497 02498 #ifndef __cplusplus 02499 extern int isatty (int ); 02500 #endif /* __cplusplus */ 02501 02502 /* Initializes or reinitializes a buffer. 02503 * This function is sometimes called more than once on the same buffer, 02504 * such as during a ast_yyrestart() or at EOF. 02505 */ 02506 static void ast_yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) 02507 02508 { 02509 int oerrno = errno; 02510 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02511 02512 ast_yy_flush_buffer(b ,yyscanner); 02513 02514 b->yy_input_file = file; 02515 b->yy_fill_buffer = 1; 02516 02517 /* If b is the current buffer, then ast_yy_init_buffer was _probably_ 02518 * called from ast_yyrestart() or through yy_get_next_buffer. 02519 * In that case, we don't want to reset the lineno or column. 02520 */ 02521 if (b != YY_CURRENT_BUFFER){ 02522 b->yy_bs_lineno = 1; 02523 b->yy_bs_column = 0; 02524 } 02525 02526 b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; 02527 02528 errno = oerrno; 02529 } 02530 02531 /** Discard all buffered characters. On the next scan, YY_INPUT will be called. 02532 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. 02533 * @param yyscanner The scanner object. 02534 */ 02535 void ast_yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) 02536 { 02537 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02538 if ( ! b ) 02539 return; 02540 02541 b->yy_n_chars = 0; 02542 02543 /* We always need two end-of-buffer characters. The first causes 02544 * a transition to the end-of-buffer state. The second causes 02545 * a jam in that state. 02546 */ 02547 b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; 02548 b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; 02549 02550 b->yy_buf_pos = &b->yy_ch_buf[0]; 02551 02552 b->yy_at_bol = 1; 02553 b->yy_buffer_status = YY_BUFFER_NEW; 02554 02555 if ( b == YY_CURRENT_BUFFER ) 02556 ast_yy_load_buffer_state(yyscanner ); 02557 } 02558 02559 /** Pushes the new state onto the stack. The new state becomes 02560 * the current state. This function will allocate the stack 02561 * if necessary. 02562 * @param new_buffer The new state. 02563 * @param yyscanner The scanner object. 02564 */ 02565 void ast_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) 02566 { 02567 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02568 if (new_buffer == NULL) 02569 return; 02570 02571 ast_yyensure_buffer_stack(yyscanner); 02572 02573 /* This block is copied from ast_yy_switch_to_buffer. */ 02574 if ( YY_CURRENT_BUFFER ) 02575 { 02576 /* Flush out information for old buffer. */ 02577 *yyg->yy_c_buf_p = yyg->yy_hold_char; 02578 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; 02579 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; 02580 } 02581 02582 /* Only push if top exists. Otherwise, replace top. */ 02583 if (YY_CURRENT_BUFFER) 02584 yyg->yy_buffer_stack_top++; 02585 YY_CURRENT_BUFFER_LVALUE = new_buffer; 02586 02587 /* copied from ast_yy_switch_to_buffer. */ 02588 ast_yy_load_buffer_state(yyscanner ); 02589 yyg->yy_did_buffer_switch_on_eof = 1; 02590 } 02591 02592 /** Removes and deletes the top of the stack, if present. 02593 * The next element becomes the new top. 02594 * @param yyscanner The scanner object. 02595 */ 02596 void ast_yypop_buffer_state (yyscan_t yyscanner) 02597 { 02598 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02599 if (!YY_CURRENT_BUFFER) 02600 return; 02601 02602 ast_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner); 02603 YY_CURRENT_BUFFER_LVALUE = NULL; 02604 if (yyg->yy_buffer_stack_top > 0) 02605 --yyg->yy_buffer_stack_top; 02606 02607 if (YY_CURRENT_BUFFER) { 02608 ast_yy_load_buffer_state(yyscanner ); 02609 yyg->yy_did_buffer_switch_on_eof = 1; 02610 } 02611 } 02612 02613 /* Allocates the stack if it does not exist. 02614 * Guarantees space for at least one push. 02615 */ 02616 static void ast_yyensure_buffer_stack (yyscan_t yyscanner) 02617 { 02618 int num_to_alloc; 02619 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02620 02621 if (!yyg->yy_buffer_stack) { 02622 02623 /* First allocation is just for 2 elements, since we don't know if this 02624 * scanner will even need a stack. We use 2 instead of 1 to avoid an 02625 * immediate realloc on the next call. 02626 */ 02627 num_to_alloc = 1; 02628 yyg->yy_buffer_stack = (struct yy_buffer_state**)ast_yyalloc 02629 (num_to_alloc * sizeof(struct yy_buffer_state*) 02630 , yyscanner); 02631 02632 memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); 02633 02634 yyg->yy_buffer_stack_max = num_to_alloc; 02635 yyg->yy_buffer_stack_top = 0; 02636 return; 02637 } 02638 02639 if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ 02640 02641 /* Increase the buffer to prepare for a possible push. */ 02642 int grow_size = 8 /* arbitrary grow size */; 02643 02644 num_to_alloc = yyg->yy_buffer_stack_max + grow_size; 02645 yyg->yy_buffer_stack = (struct yy_buffer_state**)ast_yyrealloc 02646 (yyg->yy_buffer_stack, 02647 num_to_alloc * sizeof(struct yy_buffer_state*) 02648 , yyscanner); 02649 02650 /* zero only the new slots.*/ 02651 memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); 02652 yyg->yy_buffer_stack_max = num_to_alloc; 02653 } 02654 } 02655 02656 /** Setup the input buffer state to scan directly from a user-specified character buffer. 02657 * @param base the character buffer 02658 * @param size the size in bytes of the character buffer 02659 * @param yyscanner The scanner object. 02660 * @return the newly allocated buffer state object. 02661 */ 02662 YY_BUFFER_STATE ast_yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) 02663 { 02664 YY_BUFFER_STATE b; 02665 02666 if ( size < 2 || 02667 base[size-2] != YY_END_OF_BUFFER_CHAR || 02668 base[size-1] != YY_END_OF_BUFFER_CHAR ) 02669 /* They forgot to leave room for the EOB's. */ 02670 return 0; 02671 02672 b = (YY_BUFFER_STATE) ast_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); 02673 if ( ! b ) 02674 YY_FATAL_ERROR( "out of dynamic memory in ast_yy_scan_buffer()" ); 02675 02676 b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ 02677 b->yy_buf_pos = b->yy_ch_buf = base; 02678 b->yy_is_our_buffer = 0; 02679 b->yy_input_file = 0; 02680 b->yy_n_chars = b->yy_buf_size; 02681 b->yy_is_interactive = 0; 02682 b->yy_at_bol = 1; 02683 b->yy_fill_buffer = 0; 02684 b->yy_buffer_status = YY_BUFFER_NEW; 02685 02686 ast_yy_switch_to_buffer(b ,yyscanner ); 02687 02688 return b; 02689 } 02690 02691 /** Setup the input buffer state to scan a string. The next call to ast_yylex() will 02692 * scan from a @e copy of @a str. 02693 * @param str a NUL-terminated string to scan 02694 * @param yyscanner The scanner object. 02695 * @return the newly allocated buffer state object. 02696 * @note If you want to scan bytes that may contain NUL values, then use 02697 * ast_yy_scan_bytes() instead. 02698 */ 02699 YY_BUFFER_STATE ast_yy_scan_string (yyconst char * str , yyscan_t yyscanner) 02700 { 02701 02702 return ast_yy_scan_bytes(str,strlen(str) ,yyscanner); 02703 } 02704 02705 /** Setup the input buffer state to scan the given bytes. The next call to ast_yylex() will 02706 * scan from a @e copy of @a bytes. 02707 * @param bytes the byte buffer to scan 02708 * @param len the number of bytes in the buffer pointed to by @a bytes. 02709 * @param yyscanner The scanner object. 02710 * @return the newly allocated buffer state object. 02711 */ 02712 YY_BUFFER_STATE ast_yy_scan_bytes (yyconst char * bytes, int len , yyscan_t yyscanner) 02713 { 02714 YY_BUFFER_STATE b; 02715 char *buf; 02716 yy_size_t n; 02717 int i; 02718 02719 /* Get memory for full buffer, including space for trailing EOB's. */ 02720 n = len + 2; 02721 buf = (char *) ast_yyalloc(n ,yyscanner ); 02722 if ( ! buf ) 02723 YY_FATAL_ERROR( "out of dynamic memory in ast_yy_scan_bytes()" ); 02724 02725 for ( i = 0; i < len; ++i ) 02726 buf[i] = bytes[i]; 02727 02728 buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; 02729 02730 b = ast_yy_scan_buffer(buf,n ,yyscanner); 02731 if ( ! b ) 02732 YY_FATAL_ERROR( "bad buffer in ast_yy_scan_bytes()" ); 02733 02734 /* It's okay to grow etc. this buffer, and we should throw it 02735 * away when we're done. 02736 */ 02737 b->yy_is_our_buffer = 1; 02738 02739 return b; 02740 } 02741 02742 #ifndef YY_EXIT_FAILURE 02743 #define YY_EXIT_FAILURE 2 02744 #endif 02745 02746 static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner) 02747 { 02748 (void) fprintf( stderr, "%s\n", msg ); 02749 exit( YY_EXIT_FAILURE ); 02750 } 02751 02752 /* Redefine yyless() so it works in section 3 code. */ 02753 02754 #undef yyless 02755 #define yyless(n) \ 02756 do \ 02757 { \ 02758 /* Undo effects of setting up yytext. */ \ 02759 int yyless_macro_arg = (n); \ 02760 YY_LESS_LINENO(yyless_macro_arg);\ 02761 yytext[yyleng] = yyg->yy_hold_char; \ 02762 yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ 02763 yyg->yy_hold_char = *yyg->yy_c_buf_p; \ 02764 *yyg->yy_c_buf_p = '\0'; \ 02765 yyleng = yyless_macro_arg; \ 02766 } \ 02767 while ( 0 ) 02768 02769 /* Accessor methods (get/set functions) to struct members. */ 02770 02771 /** Get the user-defined data for this scanner. 02772 * @param yyscanner The scanner object. 02773 */ 02774 YY_EXTRA_TYPE ast_yyget_extra (yyscan_t yyscanner) 02775 { 02776 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02777 return yyextra; 02778 } 02779 02780 /** Get the current line number. 02781 * @param yyscanner The scanner object. 02782 */ 02783 int ast_yyget_lineno (yyscan_t yyscanner) 02784 { 02785 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02786 02787 if (! YY_CURRENT_BUFFER) 02788 return 0; 02789 02790 return yylineno; 02791 } 02792 02793 /** Get the current column number. 02794 * @param yyscanner The scanner object. 02795 */ 02796 int ast_yyget_column (yyscan_t yyscanner) 02797 { 02798 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02799 02800 if (! YY_CURRENT_BUFFER) 02801 return 0; 02802 02803 return yycolumn; 02804 } 02805 02806 /** Get the input stream. 02807 * @param yyscanner The scanner object. 02808 */ 02809 FILE *ast_yyget_in (yyscan_t yyscanner) 02810 { 02811 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02812 return yyin; 02813 } 02814 02815 /** Get the output stream. 02816 * @param yyscanner The scanner object. 02817 */ 02818 FILE *ast_yyget_out (yyscan_t yyscanner) 02819 { 02820 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02821 return yyout; 02822 } 02823 02824 /** Get the length of the current token. 02825 * @param yyscanner The scanner object. 02826 */ 02827 int ast_yyget_leng (yyscan_t yyscanner) 02828 { 02829 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02830 return yyleng; 02831 } 02832 02833 /** Get the current token. 02834 * @param yyscanner The scanner object. 02835 */ 02836 02837 char *ast_yyget_text (yyscan_t yyscanner) 02838 { 02839 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02840 return yytext; 02841 } 02842 02843 /** Set the user-defined data. This data is never touched by the scanner. 02844 * @param user_defined The data to be associated with this scanner. 02845 * @param yyscanner The scanner object. 02846 */ 02847 void ast_yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) 02848 { 02849 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02850 yyextra = user_defined ; 02851 } 02852 02853 /** Set the current line number. 02854 * @param line_number 02855 * @param yyscanner The scanner object. 02856 */ 02857 void ast_yyset_lineno (int line_number , yyscan_t yyscanner) 02858 { 02859 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02860 02861 /* lineno is only valid if an input buffer exists. */ 02862 if (! YY_CURRENT_BUFFER ) 02863 yy_fatal_error( "ast_yyset_lineno called with no buffer" , yyscanner); 02864 02865 yylineno = line_number; 02866 } 02867 02868 /** Set the current column. 02869 * @param line_number 02870 * @param yyscanner The scanner object. 02871 */ 02872 void ast_yyset_column (int column_no , yyscan_t yyscanner) 02873 { 02874 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02875 02876 /* column is only valid if an input buffer exists. */ 02877 if (! YY_CURRENT_BUFFER ) 02878 yy_fatal_error( "ast_yyset_column called with no buffer" , yyscanner); 02879 02880 yycolumn = column_no; 02881 } 02882 02883 /** Set the input stream. This does not discard the current 02884 * input buffer. 02885 * @param in_str A readable stream. 02886 * @param yyscanner The scanner object. 02887 * @see ast_yy_switch_to_buffer 02888 */ 02889 void ast_yyset_in (FILE * in_str , yyscan_t yyscanner) 02890 { 02891 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02892 yyin = in_str ; 02893 } 02894 02895 void ast_yyset_out (FILE * out_str , yyscan_t yyscanner) 02896 { 02897 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02898 yyout = out_str ; 02899 } 02900 02901 int ast_yyget_debug (yyscan_t yyscanner) 02902 { 02903 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02904 return yy_flex_debug; 02905 } 02906 02907 void ast_yyset_debug (int bdebug , yyscan_t yyscanner) 02908 { 02909 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02910 yy_flex_debug = bdebug ; 02911 } 02912 02913 /* Accessor methods for yylval and yylloc */ 02914 02915 YYSTYPE * ast_yyget_lval (yyscan_t yyscanner) 02916 { 02917 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02918 return yylval; 02919 } 02920 02921 void ast_yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner) 02922 { 02923 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02924 yylval = yylval_param; 02925 } 02926 02927 YYLTYPE *ast_yyget_lloc (yyscan_t yyscanner) 02928 { 02929 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02930 return yylloc; 02931 } 02932 02933 void ast_yyset_lloc (YYLTYPE * yylloc_param , yyscan_t yyscanner) 02934 { 02935 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02936 yylloc = yylloc_param; 02937 } 02938 02939 static int yy_init_globals (yyscan_t yyscanner) 02940 { 02941 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 02942 /* Initialization is the same as for the non-reentrant scanner. 02943 This function is called once per scanner lifetime. */ 02944 02945 yyg->yy_buffer_stack = 0; 02946 yyg->yy_buffer_stack_top = 0; 02947 yyg->yy_buffer_stack_max = 0; 02948 yyg->yy_c_buf_p = (char *) 0; 02949 yyg->yy_init = 1; 02950 yyg->yy_start = 0; 02951 yyg->yy_start_stack_ptr = 0; 02952 yyg->yy_start_stack_depth = 0; 02953 yyg->yy_start_stack = (int *) 0; 02954 02955 /* Defined in main.c */ 02956 #ifdef YY_STDINIT 02957 yyin = stdin; 02958 yyout = stdout; 02959 #else 02960 yyin = (FILE *) 0; 02961 yyout = (FILE *) 0; 02962 #endif 02963 02964 /* For future reference: Set errno on error, since we are called by 02965 * ast_yylex_init() 02966 */ 02967 return 0; 02968 } 02969 02970 /* User-visible API */ 02971 02972 /* ast_yylex_init is special because it creates the scanner itself, so it is 02973 * the ONLY reentrant function that doesn't take the scanner as the last argument. 02974 * That's why we explicitly handle the declaration, instead of using our macros. 02975 */ 02976 02977 int ast_yylex_init(yyscan_t* ptr_yy_globals) 02978 02979 { 02980 if (ptr_yy_globals == NULL){ 02981 errno = EINVAL; 02982 return 1; 02983 } 02984 02985 *ptr_yy_globals = (yyscan_t) ast_yyalloc ( sizeof( struct yyguts_t ), NULL ); 02986 02987 if (*ptr_yy_globals == NULL){ 02988 errno = ENOMEM; 02989 return 1; 02990 } 02991 02992 memset(*ptr_yy_globals,0,sizeof(struct yyguts_t)); 02993 02994 return yy_init_globals ( *ptr_yy_globals ); 02995 } 02996 02997 /* ast_yylex_destroy is for both reentrant and non-reentrant scanners. */ 02998 int ast_yylex_destroy (yyscan_t yyscanner) 02999 { 03000 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 03001 03002 /* Pop the buffer stack, destroying each element. */ 03003 while(YY_CURRENT_BUFFER){ 03004 ast_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner ); 03005 YY_CURRENT_BUFFER_LVALUE = NULL; 03006 ast_yypop_buffer_state(yyscanner); 03007 } 03008 03009 /* Destroy the stack itself. */ 03010 ast_yyfree(yyg->yy_buffer_stack ,yyscanner); 03011 yyg->yy_buffer_stack = NULL; 03012 03013 /* Destroy the start condition stack. */ 03014 ast_yyfree(yyg->yy_start_stack ,yyscanner ); 03015 yyg->yy_start_stack = NULL; 03016 03017 /* Destroy the main struct (reentrant only). */ 03018 ast_yyfree ( yyscanner , yyscanner ); 03019 return 0; 03020 } 03021 03022 /* 03023 * Internal utility routines. 03024 */ 03025 03026 #ifndef yytext_ptr 03027 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner) 03028 { 03029 register int i; 03030 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 03031 for ( i = 0; i < n; ++i ) 03032 s1[i] = s2[i]; 03033 } 03034 #endif 03035 03036 #ifdef YY_NEED_STRLEN 03037 static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) 03038 { 03039 register int n; 03040 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 03041 for ( n = 0; s[n]; ++n ) 03042 ; 03043 03044 return n; 03045 } 03046 #endif 03047 03048 void *ast_yyalloc (yy_size_t size , yyscan_t yyscanner) 03049 { 03050 return (void *) malloc( size ); 03051 } 03052 03053 void *ast_yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) 03054 { 03055 /* The cast to (char *) in the following accommodates both 03056 * implementations that use char* generic pointers, and those 03057 * that use void* generic pointers. It works with the latter 03058 * because both ANSI C and C++ allow castless assignment from 03059 * any pointer type to void*, and deal with argument conversions 03060 * as though doing an assignment. 03061 */ 03062 return (void *) realloc( (char *) ptr, size ); 03063 } 03064 03065 void ast_yyfree (void * ptr , yyscan_t yyscanner) 03066 { 03067 free( (char *) ptr ); /* see ast_yyrealloc() for (char *) cast */ 03068 } 03069 03070 #define YYTABLES_NAME "yytables" 03071 03072 #undef YY_NEW_FILE 03073 #undef YY_FLUSH_BUFFER 03074 #undef yy_set_bol 03075 #undef yy_new_buffer 03076 #undef yy_set_interactive 03077 #undef yytext_ptr 03078 #undef YY_DO_BEFORE_ACTION 03079 03080 #ifdef YY_DECL_IS_OURS 03081 #undef YY_DECL_IS_OURS 03082 #undef YY_DECL 03083 #endif 03084 #line 205 "ast_expr2.fl" 03085 03086 03087 03088 /* I'm putting the interface routine to the whole parse here in the flexer input file 03089 mainly because of all the flexer initialization that has to be done. Shouldn't matter 03090 where it is, as long as it's somewhere. I didn't want to define a prototype for the 03091 ast_yy_scan_string in the .y file, because then, I'd have to define YY_BUFFER_STATE there... 03092 UGH! that would be inappropriate. */ 03093 03094 int ast_yyparse(void *); /* need to/should define this prototype for the call to yyparse */ 03095 int ast_yyerror(const char *, YYLTYPE *, struct parse_io *); /* likewise */ 03096 03097 int ast_expr(char *expr, char *buf, int length) 03098 { 03099 struct parse_io io; 03100 int return_value = 0; 03101 03102 memset(&io, 0, sizeof(io)); 03103 io.string = expr; /* to pass to the error routine */ 03104 03105 ast_yylex_init(&io.scanner); 03106 03107 ast_yy_scan_string(expr, io.scanner); 03108 03109 ast_yyparse ((void *) &io); 03110 03111 ast_yylex_destroy(io.scanner); 03112 03113 if (!io.val) { 03114 if (length > 1) { 03115 strcpy(buf, "0"); 03116 return_value = 1; 03117 } 03118 } else { 03119 if (io.val->type == AST_EXPR_integer) { 03120 int res_length; 03121 03122 res_length = snprintf(buf, length, "%ld", (long int) io.val->u.i); 03123 return_value = (res_length <= length) ? res_length : length; 03124 } else { 03125 #if defined(STANDALONE) || defined(LOW_MEMORY) 03126 strncpy(buf, io.val->u.s, length - 1); 03127 #else /* !STANDALONE && !LOW_MEMORY */ 03128 ast_copy_string(buf, io.val->u.s, length); 03129 #endif /* STANDALONE || LOW_MEMORY */ 03130 return_value = strlen(buf); 03131 free(io.val->u.s); 03132 } 03133 free(io.val); 03134 } 03135 return return_value; 03136 } 03137 03138 03139 char extra_error_message[4095]; 03140 int extra_error_message_supplied = 0; 03141 void ast_expr_register_extra_error_info(char *message); 03142 void ast_expr_clear_extra_error_info(void); 03143 03144 void ast_expr_register_extra_error_info(char *message) 03145 { 03146 extra_error_message_supplied=1; 03147 strcpy(extra_error_message, message); 03148 } 03149 03150 void ast_expr_clear_extra_error_info(void) 03151 { 03152 extra_error_message_supplied=0; 03153 extra_error_message[0] = 0; 03154 } 03155 03156 static char *expr2_token_equivs1[] = 03157 { 03158 "TOKEN", 03159 "TOK_COND", 03160 "TOK_COLONCOLON", 03161 "TOK_OR", 03162 "TOK_AND", 03163 "TOK_EQ", 03164 "TOK_GT", 03165 "TOK_LT", 03166 "TOK_GE", 03167 "TOK_LE", 03168 "TOK_NE", 03169 "TOK_PLUS", 03170 "TOK_MINUS", 03171 "TOK_MULT", 03172 "TOK_DIV", 03173 "TOK_MOD", 03174 "TOK_COMPL", 03175 "TOK_COLON", 03176 "TOK_EQTILDE", 03177 "TOK_RP", 03178 "TOK_LP" 03179 }; 03180 03181 static char *expr2_token_equivs2[] = 03182 { 03183 "<token>", 03184 "?", 03185 "::", 03186 "|", 03187 "&", 03188 "=", 03189 ">", 03190 "<", 03191 ">=", 03192 "<=", 03193 "!=", 03194 "+", 03195 "-", 03196 "*", 03197 "/", 03198 "%", 03199 "!", 03200 ":", 03201 "=~", 03202 ")", 03203 "(" 03204 }; 03205 03206 03207 static char *expr2_token_subst(char *mess) 03208 { 03209 /* calc a length, malloc, fill, and return; yyerror had better free it! */ 03210 int len=0,i; 03211 char *p; 03212 char *res, *s,*t; 03213 int expr2_token_equivs_entries = sizeof(expr2_token_equivs1)/sizeof(char*); 03214 03215 for (p=mess; *p; p++) { 03216 for (i=0; i<expr2_token_equivs_entries; i++) { 03217 if ( strncmp(p,expr2_token_equivs1[i],strlen(expr2_token_equivs1[i])) == 0 ) 03218 { 03219 len+=strlen(expr2_token_equivs2[i])+2; 03220 p += strlen(expr2_token_equivs1[i])-1; 03221 break; 03222 } 03223 } 03224 len++; 03225 } 03226 res = (char*)malloc(len+1); 03227 res[0] = 0; 03228 s = res; 03229 for (p=mess; *p;) { 03230 int found = 0; 03231 for (i=0; i<expr2_token_equivs_entries; i++) { 03232 if ( strncmp(p,expr2_token_equivs1[i],strlen(expr2_token_equivs1[i])) == 0 ) { 03233 *s++ = '\''; 03234 for (t=expr2_token_equivs2[i]; *t;) { 03235 *s++ = *t++; 03236 } 03237 *s++ = '\''; 03238 p += strlen(expr2_token_equivs1[i]); 03239 found = 1; 03240 break; 03241 } 03242 } 03243 if( !found ) 03244 *s++ = *p++; 03245 } 03246 *s++ = 0; 03247 return res; 03248 } 03249 03250 int ast_yyerror (const char *s, yyltype *loc, struct parse_io *parseio ) 03251 { 03252 struct yyguts_t * yyg = (struct yyguts_t*)(parseio->scanner); 03253 char spacebuf[8000]; /* best safe than sorry */ 03254 char spacebuf2[8000]; /* best safe than sorry */ 03255 int i=0; 03256 char *s2 = expr2_token_subst((char *)s); 03257 spacebuf[0] = 0; 03258 03259 for(i=0;i< (int)(yytext - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf);i++) spacebuf2[i] = ' '; /* uh... assuming yyg is defined, then I can use the yycolumn macro, 03260 which is the same thing as... get this: 03261 yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]->yy_bs_column 03262 I was tempted to just use yy_buf_pos in the STATE, but..., well: 03263 a. the yy_buf_pos is the current position in the buffer, which 03264 may not relate to the entire string/buffer because of the 03265 buffering. 03266 b. but, analysis of the situation is that when you use the 03267 ast_yy_scan_string func, it creates a single buffer the size of 03268 string, so the two would be the same... 03269 so, in the end, the yycolumn macro is available, shorter, therefore easier. */ 03270 spacebuf2[i++]='^'; 03271 spacebuf2[i]= 0; 03272 03273 #ifdef STANDALONE3 03274 /* easier to read in the standalone version */ 03275 printf("ast_yyerror(): %s syntax error: %s; Input:\n%s\n%s\n", 03276 (extra_error_message_supplied?extra_error_message:""), s2, parseio->string,spacebuf2); 03277 #else 03278 ast_log(LOG_WARNING,"ast_yyerror(): %s syntax error: %s; Input:\n%s\n%s\n", 03279 (extra_error_message_supplied?extra_error_message:""), s2, parseio->string,spacebuf2); 03280 #endif 03281 #ifndef STANDALONE 03282 ast_log(LOG_WARNING,"If you have questions, please refer to doc/channelvariables.txt in the asterisk source.\n"); 03283 #endif 03284 free(s2); 03285 return(0); 03286 } 03287