1*53ee8cc1Swenshuai.xi#line 2 "scripts/genksyms/lex.c" 2*53ee8cc1Swenshuai.xi 3*53ee8cc1Swenshuai.xi#line 4 "scripts/genksyms/lex.c" 4*53ee8cc1Swenshuai.xi 5*53ee8cc1Swenshuai.xi#define YY_INT_ALIGNED short int 6*53ee8cc1Swenshuai.xi 7*53ee8cc1Swenshuai.xi/* A lexical scanner generated by flex */ 8*53ee8cc1Swenshuai.xi 9*53ee8cc1Swenshuai.xi/* %not-for-header */ 10*53ee8cc1Swenshuai.xi 11*53ee8cc1Swenshuai.xi/* %if-c-only */ 12*53ee8cc1Swenshuai.xi/* %if-not-reentrant */ 13*53ee8cc1Swenshuai.xi 14*53ee8cc1Swenshuai.xi/* %endif */ 15*53ee8cc1Swenshuai.xi/* %endif */ 16*53ee8cc1Swenshuai.xi/* %ok-for-header */ 17*53ee8cc1Swenshuai.xi 18*53ee8cc1Swenshuai.xi#define FLEX_SCANNER 19*53ee8cc1Swenshuai.xi#define YY_FLEX_MAJOR_VERSION 2 20*53ee8cc1Swenshuai.xi#define YY_FLEX_MINOR_VERSION 5 21*53ee8cc1Swenshuai.xi#define YY_FLEX_SUBMINOR_VERSION 35 22*53ee8cc1Swenshuai.xi#if YY_FLEX_SUBMINOR_VERSION > 0 23*53ee8cc1Swenshuai.xi#define FLEX_BETA 24*53ee8cc1Swenshuai.xi#endif 25*53ee8cc1Swenshuai.xi 26*53ee8cc1Swenshuai.xi/* %if-c++-only */ 27*53ee8cc1Swenshuai.xi/* %endif */ 28*53ee8cc1Swenshuai.xi 29*53ee8cc1Swenshuai.xi/* %if-c-only */ 30*53ee8cc1Swenshuai.xi 31*53ee8cc1Swenshuai.xi/* %endif */ 32*53ee8cc1Swenshuai.xi 33*53ee8cc1Swenshuai.xi/* %if-c-only */ 34*53ee8cc1Swenshuai.xi 35*53ee8cc1Swenshuai.xi/* %endif */ 36*53ee8cc1Swenshuai.xi 37*53ee8cc1Swenshuai.xi/* First, we deal with platform-specific or compiler-specific issues. */ 38*53ee8cc1Swenshuai.xi 39*53ee8cc1Swenshuai.xi/* begin standard C headers. */ 40*53ee8cc1Swenshuai.xi/* %if-c-only */ 41*53ee8cc1Swenshuai.xi#include <stdio.h> 42*53ee8cc1Swenshuai.xi#include <string.h> 43*53ee8cc1Swenshuai.xi#include <errno.h> 44*53ee8cc1Swenshuai.xi#include <stdlib.h> 45*53ee8cc1Swenshuai.xi/* %endif */ 46*53ee8cc1Swenshuai.xi 47*53ee8cc1Swenshuai.xi/* %if-tables-serialization */ 48*53ee8cc1Swenshuai.xi/* %endif */ 49*53ee8cc1Swenshuai.xi/* end standard C headers. */ 50*53ee8cc1Swenshuai.xi 51*53ee8cc1Swenshuai.xi/* %if-c-or-c++ */ 52*53ee8cc1Swenshuai.xi/* flex integer type definitions */ 53*53ee8cc1Swenshuai.xi 54*53ee8cc1Swenshuai.xi#ifndef FLEXINT_H 55*53ee8cc1Swenshuai.xi#define FLEXINT_H 56*53ee8cc1Swenshuai.xi 57*53ee8cc1Swenshuai.xi/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ 58*53ee8cc1Swenshuai.xi 59*53ee8cc1Swenshuai.xi#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 60*53ee8cc1Swenshuai.xi 61*53ee8cc1Swenshuai.xi/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, 62*53ee8cc1Swenshuai.xi * if you want the limit (max/min) macros for int types. 63*53ee8cc1Swenshuai.xi */ 64*53ee8cc1Swenshuai.xi#ifndef __STDC_LIMIT_MACROS 65*53ee8cc1Swenshuai.xi#define __STDC_LIMIT_MACROS 1 66*53ee8cc1Swenshuai.xi#endif 67*53ee8cc1Swenshuai.xi 68*53ee8cc1Swenshuai.xi#include <inttypes.h> 69*53ee8cc1Swenshuai.xitypedef int8_t flex_int8_t; 70*53ee8cc1Swenshuai.xitypedef uint8_t flex_uint8_t; 71*53ee8cc1Swenshuai.xitypedef int16_t flex_int16_t; 72*53ee8cc1Swenshuai.xitypedef uint16_t flex_uint16_t; 73*53ee8cc1Swenshuai.xitypedef int32_t flex_int32_t; 74*53ee8cc1Swenshuai.xitypedef uint32_t flex_uint32_t; 75*53ee8cc1Swenshuai.xi#else 76*53ee8cc1Swenshuai.xitypedef signed char flex_int8_t; 77*53ee8cc1Swenshuai.xitypedef short int flex_int16_t; 78*53ee8cc1Swenshuai.xitypedef int flex_int32_t; 79*53ee8cc1Swenshuai.xitypedef unsigned char flex_uint8_t; 80*53ee8cc1Swenshuai.xitypedef unsigned short int flex_uint16_t; 81*53ee8cc1Swenshuai.xitypedef unsigned int flex_uint32_t; 82*53ee8cc1Swenshuai.xi#endif /* ! C99 */ 83*53ee8cc1Swenshuai.xi 84*53ee8cc1Swenshuai.xi/* Limits of integral types. */ 85*53ee8cc1Swenshuai.xi#ifndef INT8_MIN 86*53ee8cc1Swenshuai.xi#define INT8_MIN (-128) 87*53ee8cc1Swenshuai.xi#endif 88*53ee8cc1Swenshuai.xi#ifndef INT16_MIN 89*53ee8cc1Swenshuai.xi#define INT16_MIN (-32767-1) 90*53ee8cc1Swenshuai.xi#endif 91*53ee8cc1Swenshuai.xi#ifndef INT32_MIN 92*53ee8cc1Swenshuai.xi#define INT32_MIN (-2147483647-1) 93*53ee8cc1Swenshuai.xi#endif 94*53ee8cc1Swenshuai.xi#ifndef INT8_MAX 95*53ee8cc1Swenshuai.xi#define INT8_MAX (127) 96*53ee8cc1Swenshuai.xi#endif 97*53ee8cc1Swenshuai.xi#ifndef INT16_MAX 98*53ee8cc1Swenshuai.xi#define INT16_MAX (32767) 99*53ee8cc1Swenshuai.xi#endif 100*53ee8cc1Swenshuai.xi#ifndef INT32_MAX 101*53ee8cc1Swenshuai.xi#define INT32_MAX (2147483647) 102*53ee8cc1Swenshuai.xi#endif 103*53ee8cc1Swenshuai.xi#ifndef UINT8_MAX 104*53ee8cc1Swenshuai.xi#define UINT8_MAX (255U) 105*53ee8cc1Swenshuai.xi#endif 106*53ee8cc1Swenshuai.xi#ifndef UINT16_MAX 107*53ee8cc1Swenshuai.xi#define UINT16_MAX (65535U) 108*53ee8cc1Swenshuai.xi#endif 109*53ee8cc1Swenshuai.xi#ifndef UINT32_MAX 110*53ee8cc1Swenshuai.xi#define UINT32_MAX (4294967295U) 111*53ee8cc1Swenshuai.xi#endif 112*53ee8cc1Swenshuai.xi 113*53ee8cc1Swenshuai.xi#endif /* ! FLEXINT_H */ 114*53ee8cc1Swenshuai.xi 115*53ee8cc1Swenshuai.xi/* %endif */ 116*53ee8cc1Swenshuai.xi 117*53ee8cc1Swenshuai.xi/* %if-c++-only */ 118*53ee8cc1Swenshuai.xi/* %endif */ 119*53ee8cc1Swenshuai.xi 120*53ee8cc1Swenshuai.xi#ifdef __cplusplus 121*53ee8cc1Swenshuai.xi 122*53ee8cc1Swenshuai.xi/* The "const" storage-class-modifier is valid. */ 123*53ee8cc1Swenshuai.xi#define YY_USE_CONST 124*53ee8cc1Swenshuai.xi 125*53ee8cc1Swenshuai.xi#else /* ! __cplusplus */ 126*53ee8cc1Swenshuai.xi 127*53ee8cc1Swenshuai.xi/* C99 requires __STDC__ to be defined as 1. */ 128*53ee8cc1Swenshuai.xi#if defined (__STDC__) 129*53ee8cc1Swenshuai.xi 130*53ee8cc1Swenshuai.xi#define YY_USE_CONST 131*53ee8cc1Swenshuai.xi 132*53ee8cc1Swenshuai.xi#endif /* defined (__STDC__) */ 133*53ee8cc1Swenshuai.xi#endif /* ! __cplusplus */ 134*53ee8cc1Swenshuai.xi 135*53ee8cc1Swenshuai.xi#ifdef YY_USE_CONST 136*53ee8cc1Swenshuai.xi#define yyconst const 137*53ee8cc1Swenshuai.xi#else 138*53ee8cc1Swenshuai.xi#define yyconst 139*53ee8cc1Swenshuai.xi#endif 140*53ee8cc1Swenshuai.xi 141*53ee8cc1Swenshuai.xi/* %not-for-header */ 142*53ee8cc1Swenshuai.xi 143*53ee8cc1Swenshuai.xi/* Returned upon end-of-file. */ 144*53ee8cc1Swenshuai.xi#define YY_NULL 0 145*53ee8cc1Swenshuai.xi/* %ok-for-header */ 146*53ee8cc1Swenshuai.xi 147*53ee8cc1Swenshuai.xi/* %not-for-header */ 148*53ee8cc1Swenshuai.xi 149*53ee8cc1Swenshuai.xi/* Promotes a possibly negative, possibly signed char to an unsigned 150*53ee8cc1Swenshuai.xi * integer for use as an array index. If the signed char is negative, 151*53ee8cc1Swenshuai.xi * we want to instead treat it as an 8-bit unsigned char, hence the 152*53ee8cc1Swenshuai.xi * double cast. 153*53ee8cc1Swenshuai.xi */ 154*53ee8cc1Swenshuai.xi#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) 155*53ee8cc1Swenshuai.xi/* %ok-for-header */ 156*53ee8cc1Swenshuai.xi 157*53ee8cc1Swenshuai.xi/* %if-reentrant */ 158*53ee8cc1Swenshuai.xi/* %endif */ 159*53ee8cc1Swenshuai.xi 160*53ee8cc1Swenshuai.xi/* %if-not-reentrant */ 161*53ee8cc1Swenshuai.xi 162*53ee8cc1Swenshuai.xi/* %endif */ 163*53ee8cc1Swenshuai.xi 164*53ee8cc1Swenshuai.xi/* Enter a start condition. This macro really ought to take a parameter, 165*53ee8cc1Swenshuai.xi * but we do it the disgusting crufty way forced on us by the ()-less 166*53ee8cc1Swenshuai.xi * definition of BEGIN. 167*53ee8cc1Swenshuai.xi */ 168*53ee8cc1Swenshuai.xi#define BEGIN (yy_start) = 1 + 2 * 169*53ee8cc1Swenshuai.xi 170*53ee8cc1Swenshuai.xi/* Translate the current start state into a value that can be later handed 171*53ee8cc1Swenshuai.xi * to BEGIN to return to the state. The YYSTATE alias is for lex 172*53ee8cc1Swenshuai.xi * compatibility. 173*53ee8cc1Swenshuai.xi */ 174*53ee8cc1Swenshuai.xi#define YY_START (((yy_start) - 1) / 2) 175*53ee8cc1Swenshuai.xi#define YYSTATE YY_START 176*53ee8cc1Swenshuai.xi 177*53ee8cc1Swenshuai.xi/* Action number for EOF rule of a given start state. */ 178*53ee8cc1Swenshuai.xi#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) 179*53ee8cc1Swenshuai.xi 180*53ee8cc1Swenshuai.xi/* Special action meaning "start processing a new file". */ 181*53ee8cc1Swenshuai.xi#define YY_NEW_FILE yyrestart(yyin ) 182*53ee8cc1Swenshuai.xi 183*53ee8cc1Swenshuai.xi#define YY_END_OF_BUFFER_CHAR 0 184*53ee8cc1Swenshuai.xi 185*53ee8cc1Swenshuai.xi/* Size of default input buffer. */ 186*53ee8cc1Swenshuai.xi#ifndef YY_BUF_SIZE 187*53ee8cc1Swenshuai.xi#define YY_BUF_SIZE 16384 188*53ee8cc1Swenshuai.xi#endif 189*53ee8cc1Swenshuai.xi 190*53ee8cc1Swenshuai.xi/* The state buf must be large enough to hold one state per character in the main buffer. 191*53ee8cc1Swenshuai.xi */ 192*53ee8cc1Swenshuai.xi#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) 193*53ee8cc1Swenshuai.xi 194*53ee8cc1Swenshuai.xi#ifndef YY_TYPEDEF_YY_BUFFER_STATE 195*53ee8cc1Swenshuai.xi#define YY_TYPEDEF_YY_BUFFER_STATE 196*53ee8cc1Swenshuai.xitypedef struct yy_buffer_state *YY_BUFFER_STATE; 197*53ee8cc1Swenshuai.xi#endif 198*53ee8cc1Swenshuai.xi 199*53ee8cc1Swenshuai.xi/* %if-not-reentrant */ 200*53ee8cc1Swenshuai.xiextern int yyleng; 201*53ee8cc1Swenshuai.xi/* %endif */ 202*53ee8cc1Swenshuai.xi 203*53ee8cc1Swenshuai.xi/* %if-c-only */ 204*53ee8cc1Swenshuai.xi/* %if-not-reentrant */ 205*53ee8cc1Swenshuai.xiextern FILE *yyin, *yyout; 206*53ee8cc1Swenshuai.xi/* %endif */ 207*53ee8cc1Swenshuai.xi/* %endif */ 208*53ee8cc1Swenshuai.xi 209*53ee8cc1Swenshuai.xi#define EOB_ACT_CONTINUE_SCAN 0 210*53ee8cc1Swenshuai.xi#define EOB_ACT_END_OF_FILE 1 211*53ee8cc1Swenshuai.xi#define EOB_ACT_LAST_MATCH 2 212*53ee8cc1Swenshuai.xi 213*53ee8cc1Swenshuai.xi #define YY_LESS_LINENO(n) 214*53ee8cc1Swenshuai.xi 215*53ee8cc1Swenshuai.xi/* Return all but the first "n" matched characters back to the input stream. */ 216*53ee8cc1Swenshuai.xi#define yyless(n) \ 217*53ee8cc1Swenshuai.xi do \ 218*53ee8cc1Swenshuai.xi { \ 219*53ee8cc1Swenshuai.xi /* Undo effects of setting up yytext. */ \ 220*53ee8cc1Swenshuai.xi int yyless_macro_arg = (n); \ 221*53ee8cc1Swenshuai.xi YY_LESS_LINENO(yyless_macro_arg);\ 222*53ee8cc1Swenshuai.xi *yy_cp = (yy_hold_char); \ 223*53ee8cc1Swenshuai.xi YY_RESTORE_YY_MORE_OFFSET \ 224*53ee8cc1Swenshuai.xi (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ 225*53ee8cc1Swenshuai.xi YY_DO_BEFORE_ACTION; /* set up yytext again */ \ 226*53ee8cc1Swenshuai.xi } \ 227*53ee8cc1Swenshuai.xi while ( 0 ) 228*53ee8cc1Swenshuai.xi 229*53ee8cc1Swenshuai.xi#define unput(c) yyunput( c, (yytext_ptr) ) 230*53ee8cc1Swenshuai.xi 231*53ee8cc1Swenshuai.xi#ifndef YY_TYPEDEF_YY_SIZE_T 232*53ee8cc1Swenshuai.xi#define YY_TYPEDEF_YY_SIZE_T 233*53ee8cc1Swenshuai.xitypedef size_t yy_size_t; 234*53ee8cc1Swenshuai.xi#endif 235*53ee8cc1Swenshuai.xi 236*53ee8cc1Swenshuai.xi#ifndef YY_STRUCT_YY_BUFFER_STATE 237*53ee8cc1Swenshuai.xi#define YY_STRUCT_YY_BUFFER_STATE 238*53ee8cc1Swenshuai.xistruct yy_buffer_state 239*53ee8cc1Swenshuai.xi { 240*53ee8cc1Swenshuai.xi/* %if-c-only */ 241*53ee8cc1Swenshuai.xi FILE *yy_input_file; 242*53ee8cc1Swenshuai.xi/* %endif */ 243*53ee8cc1Swenshuai.xi 244*53ee8cc1Swenshuai.xi/* %if-c++-only */ 245*53ee8cc1Swenshuai.xi/* %endif */ 246*53ee8cc1Swenshuai.xi 247*53ee8cc1Swenshuai.xi char *yy_ch_buf; /* input buffer */ 248*53ee8cc1Swenshuai.xi char *yy_buf_pos; /* current position in input buffer */ 249*53ee8cc1Swenshuai.xi 250*53ee8cc1Swenshuai.xi /* Size of input buffer in bytes, not including room for EOB 251*53ee8cc1Swenshuai.xi * characters. 252*53ee8cc1Swenshuai.xi */ 253*53ee8cc1Swenshuai.xi yy_size_t yy_buf_size; 254*53ee8cc1Swenshuai.xi 255*53ee8cc1Swenshuai.xi /* Number of characters read into yy_ch_buf, not including EOB 256*53ee8cc1Swenshuai.xi * characters. 257*53ee8cc1Swenshuai.xi */ 258*53ee8cc1Swenshuai.xi int yy_n_chars; 259*53ee8cc1Swenshuai.xi 260*53ee8cc1Swenshuai.xi /* Whether we "own" the buffer - i.e., we know we created it, 261*53ee8cc1Swenshuai.xi * and can realloc() it to grow it, and should free() it to 262*53ee8cc1Swenshuai.xi * delete it. 263*53ee8cc1Swenshuai.xi */ 264*53ee8cc1Swenshuai.xi int yy_is_our_buffer; 265*53ee8cc1Swenshuai.xi 266*53ee8cc1Swenshuai.xi /* Whether this is an "interactive" input source; if so, and 267*53ee8cc1Swenshuai.xi * if we're using stdio for input, then we want to use getc() 268*53ee8cc1Swenshuai.xi * instead of fread(), to make sure we stop fetching input after 269*53ee8cc1Swenshuai.xi * each newline. 270*53ee8cc1Swenshuai.xi */ 271*53ee8cc1Swenshuai.xi int yy_is_interactive; 272*53ee8cc1Swenshuai.xi 273*53ee8cc1Swenshuai.xi /* Whether we're considered to be at the beginning of a line. 274*53ee8cc1Swenshuai.xi * If so, '^' rules will be active on the next match, otherwise 275*53ee8cc1Swenshuai.xi * not. 276*53ee8cc1Swenshuai.xi */ 277*53ee8cc1Swenshuai.xi int yy_at_bol; 278*53ee8cc1Swenshuai.xi 279*53ee8cc1Swenshuai.xi int yy_bs_lineno; /**< The line count. */ 280*53ee8cc1Swenshuai.xi int yy_bs_column; /**< The column count. */ 281*53ee8cc1Swenshuai.xi 282*53ee8cc1Swenshuai.xi /* Whether to try to fill the input buffer when we reach the 283*53ee8cc1Swenshuai.xi * end of it. 284*53ee8cc1Swenshuai.xi */ 285*53ee8cc1Swenshuai.xi int yy_fill_buffer; 286*53ee8cc1Swenshuai.xi 287*53ee8cc1Swenshuai.xi int yy_buffer_status; 288*53ee8cc1Swenshuai.xi 289*53ee8cc1Swenshuai.xi#define YY_BUFFER_NEW 0 290*53ee8cc1Swenshuai.xi#define YY_BUFFER_NORMAL 1 291*53ee8cc1Swenshuai.xi /* When an EOF's been seen but there's still some text to process 292*53ee8cc1Swenshuai.xi * then we mark the buffer as YY_EOF_PENDING, to indicate that we 293*53ee8cc1Swenshuai.xi * shouldn't try reading from the input source any more. We might 294*53ee8cc1Swenshuai.xi * still have a bunch of tokens to match, though, because of 295*53ee8cc1Swenshuai.xi * possible backing-up. 296*53ee8cc1Swenshuai.xi * 297*53ee8cc1Swenshuai.xi * When we actually see the EOF, we change the status to "new" 298*53ee8cc1Swenshuai.xi * (via yyrestart()), so that the user can continue scanning by 299*53ee8cc1Swenshuai.xi * just pointing yyin at a new input file. 300*53ee8cc1Swenshuai.xi */ 301*53ee8cc1Swenshuai.xi#define YY_BUFFER_EOF_PENDING 2 302*53ee8cc1Swenshuai.xi 303*53ee8cc1Swenshuai.xi }; 304*53ee8cc1Swenshuai.xi#endif /* !YY_STRUCT_YY_BUFFER_STATE */ 305*53ee8cc1Swenshuai.xi 306*53ee8cc1Swenshuai.xi/* %if-c-only Standard (non-C++) definition */ 307*53ee8cc1Swenshuai.xi/* %not-for-header */ 308*53ee8cc1Swenshuai.xi 309*53ee8cc1Swenshuai.xi/* %if-not-reentrant */ 310*53ee8cc1Swenshuai.xi 311*53ee8cc1Swenshuai.xi/* Stack of input buffers. */ 312*53ee8cc1Swenshuai.xistatic size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ 313*53ee8cc1Swenshuai.xistatic size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ 314*53ee8cc1Swenshuai.xistatic YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ 315*53ee8cc1Swenshuai.xi/* %endif */ 316*53ee8cc1Swenshuai.xi/* %ok-for-header */ 317*53ee8cc1Swenshuai.xi 318*53ee8cc1Swenshuai.xi/* %endif */ 319*53ee8cc1Swenshuai.xi 320*53ee8cc1Swenshuai.xi/* We provide macros for accessing buffer states in case in the 321*53ee8cc1Swenshuai.xi * future we want to put the buffer states in a more general 322*53ee8cc1Swenshuai.xi * "scanner state". 323*53ee8cc1Swenshuai.xi * 324*53ee8cc1Swenshuai.xi * Returns the top of the stack, or NULL. 325*53ee8cc1Swenshuai.xi */ 326*53ee8cc1Swenshuai.xi#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ 327*53ee8cc1Swenshuai.xi ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ 328*53ee8cc1Swenshuai.xi : NULL) 329*53ee8cc1Swenshuai.xi 330*53ee8cc1Swenshuai.xi/* Same as previous macro, but useful when we know that the buffer stack is not 331*53ee8cc1Swenshuai.xi * NULL or when we need an lvalue. For internal use only. 332*53ee8cc1Swenshuai.xi */ 333*53ee8cc1Swenshuai.xi#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] 334*53ee8cc1Swenshuai.xi 335*53ee8cc1Swenshuai.xi/* %if-c-only Standard (non-C++) definition */ 336*53ee8cc1Swenshuai.xi 337*53ee8cc1Swenshuai.xi/* %if-not-reentrant */ 338*53ee8cc1Swenshuai.xi/* %not-for-header */ 339*53ee8cc1Swenshuai.xi 340*53ee8cc1Swenshuai.xi/* yy_hold_char holds the character lost when yytext is formed. */ 341*53ee8cc1Swenshuai.xistatic char yy_hold_char; 342*53ee8cc1Swenshuai.xistatic int yy_n_chars; /* number of characters read into yy_ch_buf */ 343*53ee8cc1Swenshuai.xiint yyleng; 344*53ee8cc1Swenshuai.xi 345*53ee8cc1Swenshuai.xi/* Points to current character in buffer. */ 346*53ee8cc1Swenshuai.xistatic char *yy_c_buf_p = (char *) 0; 347*53ee8cc1Swenshuai.xistatic int yy_init = 0; /* whether we need to initialize */ 348*53ee8cc1Swenshuai.xistatic int yy_start = 0; /* start state number */ 349*53ee8cc1Swenshuai.xi 350*53ee8cc1Swenshuai.xi/* Flag which is used to allow yywrap()'s to do buffer switches 351*53ee8cc1Swenshuai.xi * instead of setting up a fresh yyin. A bit of a hack ... 352*53ee8cc1Swenshuai.xi */ 353*53ee8cc1Swenshuai.xistatic int yy_did_buffer_switch_on_eof; 354*53ee8cc1Swenshuai.xi/* %ok-for-header */ 355*53ee8cc1Swenshuai.xi 356*53ee8cc1Swenshuai.xi/* %endif */ 357*53ee8cc1Swenshuai.xi 358*53ee8cc1Swenshuai.xivoid yyrestart (FILE *input_file ); 359*53ee8cc1Swenshuai.xivoid yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); 360*53ee8cc1Swenshuai.xiYY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); 361*53ee8cc1Swenshuai.xivoid yy_delete_buffer (YY_BUFFER_STATE b ); 362*53ee8cc1Swenshuai.xivoid yy_flush_buffer (YY_BUFFER_STATE b ); 363*53ee8cc1Swenshuai.xivoid yypush_buffer_state (YY_BUFFER_STATE new_buffer ); 364*53ee8cc1Swenshuai.xivoid yypop_buffer_state (void ); 365*53ee8cc1Swenshuai.xi 366*53ee8cc1Swenshuai.xistatic void yyensure_buffer_stack (void ); 367*53ee8cc1Swenshuai.xistatic void yy_load_buffer_state (void ); 368*53ee8cc1Swenshuai.xistatic void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); 369*53ee8cc1Swenshuai.xi 370*53ee8cc1Swenshuai.xi#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) 371*53ee8cc1Swenshuai.xi 372*53ee8cc1Swenshuai.xiYY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); 373*53ee8cc1Swenshuai.xiYY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); 374*53ee8cc1Swenshuai.xiYY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); 375*53ee8cc1Swenshuai.xi 376*53ee8cc1Swenshuai.xi/* %endif */ 377*53ee8cc1Swenshuai.xi 378*53ee8cc1Swenshuai.xivoid *yyalloc (yy_size_t ); 379*53ee8cc1Swenshuai.xivoid *yyrealloc (void *,yy_size_t ); 380*53ee8cc1Swenshuai.xivoid yyfree (void * ); 381*53ee8cc1Swenshuai.xi 382*53ee8cc1Swenshuai.xi#define yy_new_buffer yy_create_buffer 383*53ee8cc1Swenshuai.xi 384*53ee8cc1Swenshuai.xi#define yy_set_interactive(is_interactive) \ 385*53ee8cc1Swenshuai.xi { \ 386*53ee8cc1Swenshuai.xi if ( ! YY_CURRENT_BUFFER ){ \ 387*53ee8cc1Swenshuai.xi yyensure_buffer_stack (); \ 388*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE = \ 389*53ee8cc1Swenshuai.xi yy_create_buffer(yyin,YY_BUF_SIZE ); \ 390*53ee8cc1Swenshuai.xi } \ 391*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ 392*53ee8cc1Swenshuai.xi } 393*53ee8cc1Swenshuai.xi 394*53ee8cc1Swenshuai.xi#define yy_set_bol(at_bol) \ 395*53ee8cc1Swenshuai.xi { \ 396*53ee8cc1Swenshuai.xi if ( ! YY_CURRENT_BUFFER ){\ 397*53ee8cc1Swenshuai.xi yyensure_buffer_stack (); \ 398*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE = \ 399*53ee8cc1Swenshuai.xi yy_create_buffer(yyin,YY_BUF_SIZE ); \ 400*53ee8cc1Swenshuai.xi } \ 401*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ 402*53ee8cc1Swenshuai.xi } 403*53ee8cc1Swenshuai.xi 404*53ee8cc1Swenshuai.xi#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) 405*53ee8cc1Swenshuai.xi 406*53ee8cc1Swenshuai.xi/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */ 407*53ee8cc1Swenshuai.xi/* Begin user sect3 */ 408*53ee8cc1Swenshuai.xi 409*53ee8cc1Swenshuai.xi#define yywrap(n) 1 410*53ee8cc1Swenshuai.xi#define YY_SKIP_YYWRAP 411*53ee8cc1Swenshuai.xi 412*53ee8cc1Swenshuai.xi#define FLEX_DEBUG 413*53ee8cc1Swenshuai.xi 414*53ee8cc1Swenshuai.xitypedef unsigned char YY_CHAR; 415*53ee8cc1Swenshuai.xi 416*53ee8cc1Swenshuai.xiFILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; 417*53ee8cc1Swenshuai.xi 418*53ee8cc1Swenshuai.xitypedef int yy_state_type; 419*53ee8cc1Swenshuai.xi 420*53ee8cc1Swenshuai.xiextern int yylineno; 421*53ee8cc1Swenshuai.xi 422*53ee8cc1Swenshuai.xiint yylineno = 1; 423*53ee8cc1Swenshuai.xi 424*53ee8cc1Swenshuai.xiextern char *yytext; 425*53ee8cc1Swenshuai.xi#define yytext_ptr yytext 426*53ee8cc1Swenshuai.xi 427*53ee8cc1Swenshuai.xi/* %if-c-only Standard (non-C++) definition */ 428*53ee8cc1Swenshuai.xi 429*53ee8cc1Swenshuai.xistatic yy_state_type yy_get_previous_state (void ); 430*53ee8cc1Swenshuai.xistatic yy_state_type yy_try_NUL_trans (yy_state_type current_state ); 431*53ee8cc1Swenshuai.xistatic int yy_get_next_buffer (void ); 432*53ee8cc1Swenshuai.xistatic void yy_fatal_error (yyconst char msg[] ); 433*53ee8cc1Swenshuai.xi 434*53ee8cc1Swenshuai.xi/* %endif */ 435*53ee8cc1Swenshuai.xi 436*53ee8cc1Swenshuai.xi/* Done after the current pattern has been matched and before the 437*53ee8cc1Swenshuai.xi * corresponding action - sets up yytext. 438*53ee8cc1Swenshuai.xi */ 439*53ee8cc1Swenshuai.xi#define YY_DO_BEFORE_ACTION \ 440*53ee8cc1Swenshuai.xi (yytext_ptr) = yy_bp; \ 441*53ee8cc1Swenshuai.xi/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\ 442*53ee8cc1Swenshuai.xi yyleng = (size_t) (yy_cp - yy_bp); \ 443*53ee8cc1Swenshuai.xi (yy_hold_char) = *yy_cp; \ 444*53ee8cc1Swenshuai.xi *yy_cp = '\0'; \ 445*53ee8cc1Swenshuai.xi/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\ 446*53ee8cc1Swenshuai.xi (yy_c_buf_p) = yy_cp; 447*53ee8cc1Swenshuai.xi 448*53ee8cc1Swenshuai.xi/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ 449*53ee8cc1Swenshuai.xi#define YY_NUM_RULES 13 450*53ee8cc1Swenshuai.xi#define YY_END_OF_BUFFER 14 451*53ee8cc1Swenshuai.xi/* This struct is not used in this scanner, 452*53ee8cc1Swenshuai.xi but its presence is necessary. */ 453*53ee8cc1Swenshuai.xistruct yy_trans_info 454*53ee8cc1Swenshuai.xi { 455*53ee8cc1Swenshuai.xi flex_int32_t yy_verify; 456*53ee8cc1Swenshuai.xi flex_int32_t yy_nxt; 457*53ee8cc1Swenshuai.xi }; 458*53ee8cc1Swenshuai.xistatic yyconst flex_int16_t yy_accept[73] = 459*53ee8cc1Swenshuai.xi { 0, 460*53ee8cc1Swenshuai.xi 0, 0, 14, 12, 4, 3, 12, 7, 12, 12, 461*53ee8cc1Swenshuai.xi 12, 12, 12, 9, 9, 12, 12, 7, 12, 12, 462*53ee8cc1Swenshuai.xi 4, 0, 5, 0, 7, 8, 0, 6, 0, 0, 463*53ee8cc1Swenshuai.xi 10, 10, 9, 0, 0, 9, 9, 0, 9, 0, 464*53ee8cc1Swenshuai.xi 0, 0, 0, 2, 0, 0, 11, 0, 10, 0, 465*53ee8cc1Swenshuai.xi 10, 9, 9, 0, 0, 0, 10, 10, 0, 0, 466*53ee8cc1Swenshuai.xi 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467*53ee8cc1Swenshuai.xi 1, 0 468*53ee8cc1Swenshuai.xi } ; 469*53ee8cc1Swenshuai.xi 470*53ee8cc1Swenshuai.xistatic yyconst flex_int32_t yy_ec[256] = 471*53ee8cc1Swenshuai.xi { 0, 472*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 473*53ee8cc1Swenshuai.xi 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 474*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 475*53ee8cc1Swenshuai.xi 1, 2, 1, 5, 6, 7, 8, 9, 10, 1, 476*53ee8cc1Swenshuai.xi 1, 8, 11, 1, 12, 13, 8, 14, 15, 15, 477*53ee8cc1Swenshuai.xi 15, 15, 15, 15, 15, 16, 16, 1, 1, 17, 478*53ee8cc1Swenshuai.xi 18, 19, 1, 1, 20, 20, 20, 20, 21, 22, 479*53ee8cc1Swenshuai.xi 7, 7, 7, 7, 7, 23, 7, 7, 7, 7, 480*53ee8cc1Swenshuai.xi 7, 7, 7, 7, 24, 7, 7, 25, 7, 7, 481*53ee8cc1Swenshuai.xi 1, 26, 1, 8, 7, 1, 20, 20, 20, 20, 482*53ee8cc1Swenshuai.xi 483*53ee8cc1Swenshuai.xi 21, 22, 7, 7, 7, 7, 7, 27, 7, 7, 484*53ee8cc1Swenshuai.xi 7, 7, 7, 7, 7, 7, 24, 7, 7, 25, 485*53ee8cc1Swenshuai.xi 7, 7, 1, 28, 1, 8, 1, 1, 1, 1, 486*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 487*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 488*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 489*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 490*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 491*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 492*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 493*53ee8cc1Swenshuai.xi 494*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 495*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 496*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 497*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 498*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 499*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1 500*53ee8cc1Swenshuai.xi } ; 501*53ee8cc1Swenshuai.xi 502*53ee8cc1Swenshuai.xistatic yyconst flex_int32_t yy_meta[29] = 503*53ee8cc1Swenshuai.xi { 0, 504*53ee8cc1Swenshuai.xi 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 505*53ee8cc1Swenshuai.xi 4, 4, 5, 6, 6, 6, 1, 1, 1, 7, 506*53ee8cc1Swenshuai.xi 8, 7, 3, 3, 3, 1, 3, 1 507*53ee8cc1Swenshuai.xi } ; 508*53ee8cc1Swenshuai.xi 509*53ee8cc1Swenshuai.xistatic yyconst flex_int16_t yy_base[85] = 510*53ee8cc1Swenshuai.xi { 0, 511*53ee8cc1Swenshuai.xi 0, 145, 150, 266, 27, 266, 25, 0, 131, 23, 512*53ee8cc1Swenshuai.xi 23, 16, 23, 39, 31, 25, 39, 60, 22, 65, 513*53ee8cc1Swenshuai.xi 57, 43, 266, 0, 0, 266, 61, 266, 0, 128, 514*53ee8cc1Swenshuai.xi 74, 0, 113, 59, 62, 113, 52, 0, 0, 72, 515*53ee8cc1Swenshuai.xi 66, 110, 100, 266, 73, 74, 266, 70, 266, 90, 516*53ee8cc1Swenshuai.xi 103, 266, 84, 129, 108, 113, 143, 266, 107, 66, 517*53ee8cc1Swenshuai.xi 118, 137, 168, 120, 80, 91, 145, 143, 83, 41, 518*53ee8cc1Swenshuai.xi 266, 266, 190, 196, 204, 212, 220, 228, 232, 237, 519*53ee8cc1Swenshuai.xi 238, 243, 249, 257 520*53ee8cc1Swenshuai.xi } ; 521*53ee8cc1Swenshuai.xi 522*53ee8cc1Swenshuai.xistatic yyconst flex_int16_t yy_def[85] = 523*53ee8cc1Swenshuai.xi { 0, 524*53ee8cc1Swenshuai.xi 72, 1, 72, 72, 72, 72, 73, 74, 72, 72, 525*53ee8cc1Swenshuai.xi 75, 72, 72, 72, 14, 72, 72, 74, 72, 76, 526*53ee8cc1Swenshuai.xi 72, 73, 72, 77, 74, 72, 75, 72, 78, 72, 527*53ee8cc1Swenshuai.xi 72, 31, 14, 79, 80, 72, 72, 81, 15, 73, 528*53ee8cc1Swenshuai.xi 75, 76, 76, 72, 73, 75, 72, 82, 72, 72, 529*53ee8cc1Swenshuai.xi 72, 72, 81, 76, 54, 72, 72, 72, 76, 54, 530*53ee8cc1Swenshuai.xi 76, 76, 76, 54, 83, 76, 63, 83, 84, 84, 531*53ee8cc1Swenshuai.xi 72, 0, 72, 72, 72, 72, 72, 72, 72, 72, 532*53ee8cc1Swenshuai.xi 72, 72, 72, 72 533*53ee8cc1Swenshuai.xi } ; 534*53ee8cc1Swenshuai.xi 535*53ee8cc1Swenshuai.xistatic yyconst flex_int16_t yy_nxt[295] = 536*53ee8cc1Swenshuai.xi { 0, 537*53ee8cc1Swenshuai.xi 4, 5, 6, 5, 7, 4, 8, 9, 10, 11, 538*53ee8cc1Swenshuai.xi 9, 12, 13, 14, 15, 15, 16, 9, 17, 8, 539*53ee8cc1Swenshuai.xi 8, 8, 18, 8, 8, 4, 8, 19, 21, 23, 540*53ee8cc1Swenshuai.xi 21, 26, 28, 26, 26, 30, 31, 31, 31, 26, 541*53ee8cc1Swenshuai.xi 26, 26, 26, 71, 39, 39, 39, 23, 29, 26, 542*53ee8cc1Swenshuai.xi 24, 32, 33, 33, 34, 72, 26, 26, 21, 35, 543*53ee8cc1Swenshuai.xi 21, 36, 37, 38, 40, 36, 43, 44, 24, 41, 544*53ee8cc1Swenshuai.xi 28, 32, 50, 50, 52, 28, 23, 23, 52, 35, 545*53ee8cc1Swenshuai.xi 56, 56, 44, 28, 42, 71, 29, 31, 31, 31, 546*53ee8cc1Swenshuai.xi 42, 29, 59, 44, 48, 49, 49, 24, 24, 29, 547*53ee8cc1Swenshuai.xi 548*53ee8cc1Swenshuai.xi 49, 43, 44, 51, 51, 51, 36, 37, 59, 44, 549*53ee8cc1Swenshuai.xi 36, 65, 44, 54, 55, 55, 51, 51, 51, 59, 550*53ee8cc1Swenshuai.xi 44, 64, 64, 64, 58, 58, 57, 57, 57, 58, 551*53ee8cc1Swenshuai.xi 59, 44, 42, 64, 64, 64, 52, 72, 59, 44, 552*53ee8cc1Swenshuai.xi 47, 66, 60, 60, 42, 44, 59, 69, 26, 72, 553*53ee8cc1Swenshuai.xi 20, 61, 62, 63, 72, 61, 57, 57, 57, 66, 554*53ee8cc1Swenshuai.xi 72, 72, 72, 66, 49, 49, 72, 61, 62, 49, 555*53ee8cc1Swenshuai.xi 44, 61, 72, 72, 72, 72, 72, 72, 72, 72, 556*53ee8cc1Swenshuai.xi 72, 67, 67, 67, 72, 72, 72, 67, 67, 67, 557*53ee8cc1Swenshuai.xi 22, 22, 22, 22, 22, 22, 22, 22, 25, 72, 558*53ee8cc1Swenshuai.xi 559*53ee8cc1Swenshuai.xi 72, 25, 25, 25, 27, 27, 27, 27, 27, 27, 560*53ee8cc1Swenshuai.xi 27, 27, 42, 42, 42, 42, 42, 42, 42, 42, 561*53ee8cc1Swenshuai.xi 45, 72, 45, 45, 45, 45, 45, 45, 46, 72, 562*53ee8cc1Swenshuai.xi 46, 46, 46, 46, 46, 46, 34, 34, 72, 34, 563*53ee8cc1Swenshuai.xi 51, 72, 51, 53, 53, 53, 57, 72, 57, 68, 564*53ee8cc1Swenshuai.xi 68, 68, 68, 68, 68, 68, 68, 70, 70, 70, 565*53ee8cc1Swenshuai.xi 70, 70, 70, 70, 70, 3, 72, 72, 72, 72, 566*53ee8cc1Swenshuai.xi 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 567*53ee8cc1Swenshuai.xi 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 568*53ee8cc1Swenshuai.xi 72, 72, 72, 72 569*53ee8cc1Swenshuai.xi 570*53ee8cc1Swenshuai.xi } ; 571*53ee8cc1Swenshuai.xi 572*53ee8cc1Swenshuai.xistatic yyconst flex_int16_t yy_chk[295] = 573*53ee8cc1Swenshuai.xi { 0, 574*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 575*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 576*53ee8cc1Swenshuai.xi 1, 1, 1, 1, 1, 1, 1, 1, 5, 7, 577*53ee8cc1Swenshuai.xi 5, 10, 11, 12, 12, 13, 13, 13, 13, 19, 578*53ee8cc1Swenshuai.xi 10, 16, 16, 70, 15, 15, 15, 22, 11, 19, 579*53ee8cc1Swenshuai.xi 7, 14, 14, 14, 14, 15, 17, 17, 21, 14, 580*53ee8cc1Swenshuai.xi 21, 14, 14, 14, 18, 14, 20, 20, 22, 18, 581*53ee8cc1Swenshuai.xi 27, 34, 35, 35, 37, 41, 40, 45, 37, 34, 582*53ee8cc1Swenshuai.xi 48, 48, 65, 46, 65, 69, 27, 31, 31, 31, 583*53ee8cc1Swenshuai.xi 60, 41, 66, 66, 31, 31, 31, 40, 45, 46, 584*53ee8cc1Swenshuai.xi 585*53ee8cc1Swenshuai.xi 31, 43, 43, 50, 50, 50, 53, 53, 59, 59, 586*53ee8cc1Swenshuai.xi 53, 59, 42, 43, 43, 43, 51, 51, 51, 61, 587*53ee8cc1Swenshuai.xi 61, 55, 55, 55, 51, 51, 56, 56, 56, 51, 588*53ee8cc1Swenshuai.xi 54, 54, 55, 64, 64, 64, 36, 33, 62, 62, 589*53ee8cc1Swenshuai.xi 30, 61, 54, 54, 64, 68, 67, 68, 9, 3, 590*53ee8cc1Swenshuai.xi 2, 54, 54, 54, 0, 54, 57, 57, 57, 62, 591*53ee8cc1Swenshuai.xi 0, 0, 0, 62, 57, 57, 0, 67, 67, 57, 592*53ee8cc1Swenshuai.xi 63, 67, 0, 0, 0, 0, 0, 0, 0, 0, 593*53ee8cc1Swenshuai.xi 0, 63, 63, 63, 0, 0, 0, 63, 63, 63, 594*53ee8cc1Swenshuai.xi 73, 73, 73, 73, 73, 73, 73, 73, 74, 0, 595*53ee8cc1Swenshuai.xi 596*53ee8cc1Swenshuai.xi 0, 74, 74, 74, 75, 75, 75, 75, 75, 75, 597*53ee8cc1Swenshuai.xi 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 598*53ee8cc1Swenshuai.xi 77, 0, 77, 77, 77, 77, 77, 77, 78, 0, 599*53ee8cc1Swenshuai.xi 78, 78, 78, 78, 78, 78, 79, 79, 0, 79, 600*53ee8cc1Swenshuai.xi 80, 0, 80, 81, 81, 81, 82, 0, 82, 83, 601*53ee8cc1Swenshuai.xi 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 602*53ee8cc1Swenshuai.xi 84, 84, 84, 84, 84, 72, 72, 72, 72, 72, 603*53ee8cc1Swenshuai.xi 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 604*53ee8cc1Swenshuai.xi 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 605*53ee8cc1Swenshuai.xi 72, 72, 72, 72 606*53ee8cc1Swenshuai.xi 607*53ee8cc1Swenshuai.xi } ; 608*53ee8cc1Swenshuai.xi 609*53ee8cc1Swenshuai.xistatic yy_state_type yy_last_accepting_state; 610*53ee8cc1Swenshuai.xistatic char *yy_last_accepting_cpos; 611*53ee8cc1Swenshuai.xi 612*53ee8cc1Swenshuai.xiextern int yy_flex_debug; 613*53ee8cc1Swenshuai.xiint yy_flex_debug = 1; 614*53ee8cc1Swenshuai.xi 615*53ee8cc1Swenshuai.xistatic yyconst flex_int16_t yy_rule_linenum[13] = 616*53ee8cc1Swenshuai.xi { 0, 617*53ee8cc1Swenshuai.xi 67, 68, 69, 72, 75, 76, 77, 83, 84, 85, 618*53ee8cc1Swenshuai.xi 87, 90 619*53ee8cc1Swenshuai.xi } ; 620*53ee8cc1Swenshuai.xi 621*53ee8cc1Swenshuai.xi/* The intent behind this definition is that it'll catch 622*53ee8cc1Swenshuai.xi * any uses of REJECT which flex missed. 623*53ee8cc1Swenshuai.xi */ 624*53ee8cc1Swenshuai.xi#define REJECT reject_used_but_not_detected 625*53ee8cc1Swenshuai.xi#define yymore() yymore_used_but_not_detected 626*53ee8cc1Swenshuai.xi#define YY_MORE_ADJ 0 627*53ee8cc1Swenshuai.xi#define YY_RESTORE_YY_MORE_OFFSET 628*53ee8cc1Swenshuai.xichar *yytext; 629*53ee8cc1Swenshuai.xi#line 1 "scripts/genksyms/lex.l" 630*53ee8cc1Swenshuai.xi/* Lexical analysis for genksyms. 631*53ee8cc1Swenshuai.xi Copyright 1996, 1997 Linux International. 632*53ee8cc1Swenshuai.xi 633*53ee8cc1Swenshuai.xi New implementation contributed by Richard Henderson <rth@tamu.edu> 634*53ee8cc1Swenshuai.xi Based on original work by Bjorn Ekwall <bj0rn@blox.se> 635*53ee8cc1Swenshuai.xi 636*53ee8cc1Swenshuai.xi Taken from Linux modutils 2.4.22. 637*53ee8cc1Swenshuai.xi 638*53ee8cc1Swenshuai.xi This program is free software; you can redistribute it and/or modify it 639*53ee8cc1Swenshuai.xi under the terms of the GNU General Public License as published by the 640*53ee8cc1Swenshuai.xi Free Software Foundation; either version 2 of the License, or (at your 641*53ee8cc1Swenshuai.xi option) any later version. 642*53ee8cc1Swenshuai.xi 643*53ee8cc1Swenshuai.xi This program is distributed in the hope that it will be useful, but 644*53ee8cc1Swenshuai.xi WITHOUT ANY WARRANTY; without even the implied warranty of 645*53ee8cc1Swenshuai.xi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 646*53ee8cc1Swenshuai.xi General Public License for more details. 647*53ee8cc1Swenshuai.xi 648*53ee8cc1Swenshuai.xi You should have received a copy of the GNU General Public License 649*53ee8cc1Swenshuai.xi along with this program; if not, write to the Free Software Foundation, 650*53ee8cc1Swenshuai.xi Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 651*53ee8cc1Swenshuai.xi#line 25 "scripts/genksyms/lex.l" 652*53ee8cc1Swenshuai.xi 653*53ee8cc1Swenshuai.xi#include <limits.h> 654*53ee8cc1Swenshuai.xi#include <stdlib.h> 655*53ee8cc1Swenshuai.xi#include <string.h> 656*53ee8cc1Swenshuai.xi#include <ctype.h> 657*53ee8cc1Swenshuai.xi 658*53ee8cc1Swenshuai.xi#include "genksyms.h" 659*53ee8cc1Swenshuai.xi#include "parse.h" 660*53ee8cc1Swenshuai.xi 661*53ee8cc1Swenshuai.xi/* We've got a two-level lexer here. We let flex do basic tokenization 662*53ee8cc1Swenshuai.xi and then we categorize those basic tokens in the second stage. */ 663*53ee8cc1Swenshuai.xi#define YY_DECL static int yylex1(void) 664*53ee8cc1Swenshuai.xi 665*53ee8cc1Swenshuai.xi/* We don't do multiple input files. */ 666*53ee8cc1Swenshuai.xi#define YY_NO_INPUT 1 667*53ee8cc1Swenshuai.xi#line 668 "scripts/genksyms/lex.c" 668*53ee8cc1Swenshuai.xi 669*53ee8cc1Swenshuai.xi#define INITIAL 0 670*53ee8cc1Swenshuai.xi 671*53ee8cc1Swenshuai.xi#ifndef YY_NO_UNISTD_H 672*53ee8cc1Swenshuai.xi/* Special case for "unistd.h", since it is non-ANSI. We include it way 673*53ee8cc1Swenshuai.xi * down here because we want the user's section 1 to have been scanned first. 674*53ee8cc1Swenshuai.xi * The user has a chance to override it with an option. 675*53ee8cc1Swenshuai.xi */ 676*53ee8cc1Swenshuai.xi/* %if-c-only */ 677*53ee8cc1Swenshuai.xi#include <unistd.h> 678*53ee8cc1Swenshuai.xi/* %endif */ 679*53ee8cc1Swenshuai.xi/* %if-c++-only */ 680*53ee8cc1Swenshuai.xi/* %endif */ 681*53ee8cc1Swenshuai.xi#endif 682*53ee8cc1Swenshuai.xi 683*53ee8cc1Swenshuai.xi#ifndef YY_EXTRA_TYPE 684*53ee8cc1Swenshuai.xi#define YY_EXTRA_TYPE void * 685*53ee8cc1Swenshuai.xi#endif 686*53ee8cc1Swenshuai.xi 687*53ee8cc1Swenshuai.xi/* %if-c-only Reentrant structure and macros (non-C++). */ 688*53ee8cc1Swenshuai.xi/* %if-reentrant */ 689*53ee8cc1Swenshuai.xi/* %if-c-only */ 690*53ee8cc1Swenshuai.xi 691*53ee8cc1Swenshuai.xistatic int yy_init_globals (void ); 692*53ee8cc1Swenshuai.xi 693*53ee8cc1Swenshuai.xi/* %endif */ 694*53ee8cc1Swenshuai.xi/* %if-reentrant */ 695*53ee8cc1Swenshuai.xi/* %endif */ 696*53ee8cc1Swenshuai.xi/* %endif End reentrant structures and macros. */ 697*53ee8cc1Swenshuai.xi 698*53ee8cc1Swenshuai.xi/* Accessor methods to globals. 699*53ee8cc1Swenshuai.xi These are made visible to non-reentrant scanners for convenience. */ 700*53ee8cc1Swenshuai.xi 701*53ee8cc1Swenshuai.xiint yylex_destroy (void ); 702*53ee8cc1Swenshuai.xi 703*53ee8cc1Swenshuai.xiint yyget_debug (void ); 704*53ee8cc1Swenshuai.xi 705*53ee8cc1Swenshuai.xivoid yyset_debug (int debug_flag ); 706*53ee8cc1Swenshuai.xi 707*53ee8cc1Swenshuai.xiYY_EXTRA_TYPE yyget_extra (void ); 708*53ee8cc1Swenshuai.xi 709*53ee8cc1Swenshuai.xivoid yyset_extra (YY_EXTRA_TYPE user_defined ); 710*53ee8cc1Swenshuai.xi 711*53ee8cc1Swenshuai.xiFILE *yyget_in (void ); 712*53ee8cc1Swenshuai.xi 713*53ee8cc1Swenshuai.xivoid yyset_in (FILE * in_str ); 714*53ee8cc1Swenshuai.xi 715*53ee8cc1Swenshuai.xiFILE *yyget_out (void ); 716*53ee8cc1Swenshuai.xi 717*53ee8cc1Swenshuai.xivoid yyset_out (FILE * out_str ); 718*53ee8cc1Swenshuai.xi 719*53ee8cc1Swenshuai.xiint yyget_leng (void ); 720*53ee8cc1Swenshuai.xi 721*53ee8cc1Swenshuai.xichar *yyget_text (void ); 722*53ee8cc1Swenshuai.xi 723*53ee8cc1Swenshuai.xiint yyget_lineno (void ); 724*53ee8cc1Swenshuai.xi 725*53ee8cc1Swenshuai.xivoid yyset_lineno (int line_number ); 726*53ee8cc1Swenshuai.xi 727*53ee8cc1Swenshuai.xi/* %if-bison-bridge */ 728*53ee8cc1Swenshuai.xi/* %endif */ 729*53ee8cc1Swenshuai.xi 730*53ee8cc1Swenshuai.xi/* Macros after this point can all be overridden by user definitions in 731*53ee8cc1Swenshuai.xi * section 1. 732*53ee8cc1Swenshuai.xi */ 733*53ee8cc1Swenshuai.xi 734*53ee8cc1Swenshuai.xi#ifndef YY_SKIP_YYWRAP 735*53ee8cc1Swenshuai.xi#ifdef __cplusplus 736*53ee8cc1Swenshuai.xiextern "C" int yywrap (void ); 737*53ee8cc1Swenshuai.xi#else 738*53ee8cc1Swenshuai.xiextern int yywrap (void ); 739*53ee8cc1Swenshuai.xi#endif 740*53ee8cc1Swenshuai.xi#endif 741*53ee8cc1Swenshuai.xi 742*53ee8cc1Swenshuai.xi/* %not-for-header */ 743*53ee8cc1Swenshuai.xi 744*53ee8cc1Swenshuai.xi static void yyunput (int c,char *buf_ptr ); 745*53ee8cc1Swenshuai.xi 746*53ee8cc1Swenshuai.xi/* %ok-for-header */ 747*53ee8cc1Swenshuai.xi 748*53ee8cc1Swenshuai.xi/* %endif */ 749*53ee8cc1Swenshuai.xi 750*53ee8cc1Swenshuai.xi#ifndef yytext_ptr 751*53ee8cc1Swenshuai.xistatic void yy_flex_strncpy (char *,yyconst char *,int ); 752*53ee8cc1Swenshuai.xi#endif 753*53ee8cc1Swenshuai.xi 754*53ee8cc1Swenshuai.xi#ifdef YY_NEED_STRLEN 755*53ee8cc1Swenshuai.xistatic int yy_flex_strlen (yyconst char * ); 756*53ee8cc1Swenshuai.xi#endif 757*53ee8cc1Swenshuai.xi 758*53ee8cc1Swenshuai.xi#ifndef YY_NO_INPUT 759*53ee8cc1Swenshuai.xi/* %if-c-only Standard (non-C++) definition */ 760*53ee8cc1Swenshuai.xi/* %not-for-header */ 761*53ee8cc1Swenshuai.xi 762*53ee8cc1Swenshuai.xi#ifdef __cplusplus 763*53ee8cc1Swenshuai.xistatic int yyinput (void ); 764*53ee8cc1Swenshuai.xi#else 765*53ee8cc1Swenshuai.xistatic int input (void ); 766*53ee8cc1Swenshuai.xi#endif 767*53ee8cc1Swenshuai.xi/* %ok-for-header */ 768*53ee8cc1Swenshuai.xi 769*53ee8cc1Swenshuai.xi/* %endif */ 770*53ee8cc1Swenshuai.xi#endif 771*53ee8cc1Swenshuai.xi 772*53ee8cc1Swenshuai.xi/* %if-c-only */ 773*53ee8cc1Swenshuai.xi 774*53ee8cc1Swenshuai.xi/* %endif */ 775*53ee8cc1Swenshuai.xi 776*53ee8cc1Swenshuai.xi/* Amount of stuff to slurp up with each read. */ 777*53ee8cc1Swenshuai.xi#ifndef YY_READ_BUF_SIZE 778*53ee8cc1Swenshuai.xi#define YY_READ_BUF_SIZE 8192 779*53ee8cc1Swenshuai.xi#endif 780*53ee8cc1Swenshuai.xi 781*53ee8cc1Swenshuai.xi/* Copy whatever the last rule matched to the standard output. */ 782*53ee8cc1Swenshuai.xi#ifndef ECHO 783*53ee8cc1Swenshuai.xi/* %if-c-only Standard (non-C++) definition */ 784*53ee8cc1Swenshuai.xi/* This used to be an fputs(), but since the string might contain NUL's, 785*53ee8cc1Swenshuai.xi * we now use fwrite(). 786*53ee8cc1Swenshuai.xi */ 787*53ee8cc1Swenshuai.xi#define ECHO fwrite( yytext, yyleng, 1, yyout ) 788*53ee8cc1Swenshuai.xi/* %endif */ 789*53ee8cc1Swenshuai.xi/* %if-c++-only C++ definition */ 790*53ee8cc1Swenshuai.xi/* %endif */ 791*53ee8cc1Swenshuai.xi#endif 792*53ee8cc1Swenshuai.xi 793*53ee8cc1Swenshuai.xi/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, 794*53ee8cc1Swenshuai.xi * is returned in "result". 795*53ee8cc1Swenshuai.xi */ 796*53ee8cc1Swenshuai.xi#ifndef YY_INPUT 797*53ee8cc1Swenshuai.xi#define YY_INPUT(buf,result,max_size) \ 798*53ee8cc1Swenshuai.xi/* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\ 799*53ee8cc1Swenshuai.xi if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ 800*53ee8cc1Swenshuai.xi { \ 801*53ee8cc1Swenshuai.xi int c = '*'; \ 802*53ee8cc1Swenshuai.xi int n; \ 803*53ee8cc1Swenshuai.xi for ( n = 0; n < max_size && \ 804*53ee8cc1Swenshuai.xi (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ 805*53ee8cc1Swenshuai.xi buf[n] = (char) c; \ 806*53ee8cc1Swenshuai.xi if ( c == '\n' ) \ 807*53ee8cc1Swenshuai.xi buf[n++] = (char) c; \ 808*53ee8cc1Swenshuai.xi if ( c == EOF && ferror( yyin ) ) \ 809*53ee8cc1Swenshuai.xi YY_FATAL_ERROR( "input in flex scanner failed" ); \ 810*53ee8cc1Swenshuai.xi result = n; \ 811*53ee8cc1Swenshuai.xi } \ 812*53ee8cc1Swenshuai.xi else \ 813*53ee8cc1Swenshuai.xi { \ 814*53ee8cc1Swenshuai.xi errno=0; \ 815*53ee8cc1Swenshuai.xi while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ 816*53ee8cc1Swenshuai.xi { \ 817*53ee8cc1Swenshuai.xi if( errno != EINTR) \ 818*53ee8cc1Swenshuai.xi { \ 819*53ee8cc1Swenshuai.xi YY_FATAL_ERROR( "input in flex scanner failed" ); \ 820*53ee8cc1Swenshuai.xi break; \ 821*53ee8cc1Swenshuai.xi } \ 822*53ee8cc1Swenshuai.xi errno=0; \ 823*53ee8cc1Swenshuai.xi clearerr(yyin); \ 824*53ee8cc1Swenshuai.xi } \ 825*53ee8cc1Swenshuai.xi }\ 826*53ee8cc1Swenshuai.xi\ 827*53ee8cc1Swenshuai.xi/* %if-c++-only C++ definition \ */\ 828*53ee8cc1Swenshuai.xi/* %endif */ 829*53ee8cc1Swenshuai.xi 830*53ee8cc1Swenshuai.xi#endif 831*53ee8cc1Swenshuai.xi 832*53ee8cc1Swenshuai.xi/* No semi-colon after return; correct usage is to write "yyterminate();" - 833*53ee8cc1Swenshuai.xi * we don't want an extra ';' after the "return" because that will cause 834*53ee8cc1Swenshuai.xi * some compilers to complain about unreachable statements. 835*53ee8cc1Swenshuai.xi */ 836*53ee8cc1Swenshuai.xi#ifndef yyterminate 837*53ee8cc1Swenshuai.xi#define yyterminate() return YY_NULL 838*53ee8cc1Swenshuai.xi#endif 839*53ee8cc1Swenshuai.xi 840*53ee8cc1Swenshuai.xi/* Number of entries by which start-condition stack grows. */ 841*53ee8cc1Swenshuai.xi#ifndef YY_START_STACK_INCR 842*53ee8cc1Swenshuai.xi#define YY_START_STACK_INCR 25 843*53ee8cc1Swenshuai.xi#endif 844*53ee8cc1Swenshuai.xi 845*53ee8cc1Swenshuai.xi/* Report a fatal error. */ 846*53ee8cc1Swenshuai.xi#ifndef YY_FATAL_ERROR 847*53ee8cc1Swenshuai.xi/* %if-c-only */ 848*53ee8cc1Swenshuai.xi#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) 849*53ee8cc1Swenshuai.xi/* %endif */ 850*53ee8cc1Swenshuai.xi/* %if-c++-only */ 851*53ee8cc1Swenshuai.xi/* %endif */ 852*53ee8cc1Swenshuai.xi#endif 853*53ee8cc1Swenshuai.xi 854*53ee8cc1Swenshuai.xi/* %if-tables-serialization structures and prototypes */ 855*53ee8cc1Swenshuai.xi/* %not-for-header */ 856*53ee8cc1Swenshuai.xi 857*53ee8cc1Swenshuai.xi/* %ok-for-header */ 858*53ee8cc1Swenshuai.xi 859*53ee8cc1Swenshuai.xi/* %not-for-header */ 860*53ee8cc1Swenshuai.xi 861*53ee8cc1Swenshuai.xi/* %tables-yydmap generated elements */ 862*53ee8cc1Swenshuai.xi/* %endif */ 863*53ee8cc1Swenshuai.xi/* end tables serialization structures and prototypes */ 864*53ee8cc1Swenshuai.xi 865*53ee8cc1Swenshuai.xi/* %ok-for-header */ 866*53ee8cc1Swenshuai.xi 867*53ee8cc1Swenshuai.xi/* Default declaration of generated scanner - a define so the user can 868*53ee8cc1Swenshuai.xi * easily add parameters. 869*53ee8cc1Swenshuai.xi */ 870*53ee8cc1Swenshuai.xi#ifndef YY_DECL 871*53ee8cc1Swenshuai.xi#define YY_DECL_IS_OURS 1 872*53ee8cc1Swenshuai.xi/* %if-c-only Standard (non-C++) definition */ 873*53ee8cc1Swenshuai.xi 874*53ee8cc1Swenshuai.xiextern int yylex (void); 875*53ee8cc1Swenshuai.xi 876*53ee8cc1Swenshuai.xi#define YY_DECL int yylex (void) 877*53ee8cc1Swenshuai.xi/* %endif */ 878*53ee8cc1Swenshuai.xi/* %if-c++-only C++ definition */ 879*53ee8cc1Swenshuai.xi/* %endif */ 880*53ee8cc1Swenshuai.xi#endif /* !YY_DECL */ 881*53ee8cc1Swenshuai.xi 882*53ee8cc1Swenshuai.xi/* Code executed at the beginning of each rule, after yytext and yyleng 883*53ee8cc1Swenshuai.xi * have been set up. 884*53ee8cc1Swenshuai.xi */ 885*53ee8cc1Swenshuai.xi#ifndef YY_USER_ACTION 886*53ee8cc1Swenshuai.xi#define YY_USER_ACTION 887*53ee8cc1Swenshuai.xi#endif 888*53ee8cc1Swenshuai.xi 889*53ee8cc1Swenshuai.xi/* Code executed at the end of each rule. */ 890*53ee8cc1Swenshuai.xi#ifndef YY_BREAK 891*53ee8cc1Swenshuai.xi#define YY_BREAK break; 892*53ee8cc1Swenshuai.xi#endif 893*53ee8cc1Swenshuai.xi 894*53ee8cc1Swenshuai.xi/* %% [6.0] YY_RULE_SETUP definition goes here */ 895*53ee8cc1Swenshuai.xi#define YY_RULE_SETUP \ 896*53ee8cc1Swenshuai.xi if ( yyleng > 0 ) \ 897*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ 898*53ee8cc1Swenshuai.xi (yytext[yyleng - 1] == '\n'); \ 899*53ee8cc1Swenshuai.xi YY_USER_ACTION 900*53ee8cc1Swenshuai.xi 901*53ee8cc1Swenshuai.xi/* %not-for-header */ 902*53ee8cc1Swenshuai.xi 903*53ee8cc1Swenshuai.xi/** The main scanner function which does all the work. 904*53ee8cc1Swenshuai.xi */ 905*53ee8cc1Swenshuai.xiYY_DECL 906*53ee8cc1Swenshuai.xi{ 907*53ee8cc1Swenshuai.xi register yy_state_type yy_current_state; 908*53ee8cc1Swenshuai.xi register char *yy_cp, *yy_bp; 909*53ee8cc1Swenshuai.xi register int yy_act; 910*53ee8cc1Swenshuai.xi 911*53ee8cc1Swenshuai.xi/* %% [7.0] user's declarations go here */ 912*53ee8cc1Swenshuai.xi#line 63 "scripts/genksyms/lex.l" 913*53ee8cc1Swenshuai.xi 914*53ee8cc1Swenshuai.xi 915*53ee8cc1Swenshuai.xi 916*53ee8cc1Swenshuai.xi /* Keep track of our location in the original source files. */ 917*53ee8cc1Swenshuai.xi#line 918 "scripts/genksyms/lex.c" 918*53ee8cc1Swenshuai.xi 919*53ee8cc1Swenshuai.xi if ( !(yy_init) ) 920*53ee8cc1Swenshuai.xi { 921*53ee8cc1Swenshuai.xi (yy_init) = 1; 922*53ee8cc1Swenshuai.xi 923*53ee8cc1Swenshuai.xi#ifdef YY_USER_INIT 924*53ee8cc1Swenshuai.xi YY_USER_INIT; 925*53ee8cc1Swenshuai.xi#endif 926*53ee8cc1Swenshuai.xi 927*53ee8cc1Swenshuai.xi if ( ! (yy_start) ) 928*53ee8cc1Swenshuai.xi (yy_start) = 1; /* first start state */ 929*53ee8cc1Swenshuai.xi 930*53ee8cc1Swenshuai.xi if ( ! yyin ) 931*53ee8cc1Swenshuai.xi/* %if-c-only */ 932*53ee8cc1Swenshuai.xi yyin = stdin; 933*53ee8cc1Swenshuai.xi/* %endif */ 934*53ee8cc1Swenshuai.xi/* %if-c++-only */ 935*53ee8cc1Swenshuai.xi/* %endif */ 936*53ee8cc1Swenshuai.xi 937*53ee8cc1Swenshuai.xi if ( ! yyout ) 938*53ee8cc1Swenshuai.xi/* %if-c-only */ 939*53ee8cc1Swenshuai.xi yyout = stdout; 940*53ee8cc1Swenshuai.xi/* %endif */ 941*53ee8cc1Swenshuai.xi/* %if-c++-only */ 942*53ee8cc1Swenshuai.xi/* %endif */ 943*53ee8cc1Swenshuai.xi 944*53ee8cc1Swenshuai.xi if ( ! YY_CURRENT_BUFFER ) { 945*53ee8cc1Swenshuai.xi yyensure_buffer_stack (); 946*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE = 947*53ee8cc1Swenshuai.xi yy_create_buffer(yyin,YY_BUF_SIZE ); 948*53ee8cc1Swenshuai.xi } 949*53ee8cc1Swenshuai.xi 950*53ee8cc1Swenshuai.xi yy_load_buffer_state( ); 951*53ee8cc1Swenshuai.xi } 952*53ee8cc1Swenshuai.xi 953*53ee8cc1Swenshuai.xi while ( 1 ) /* loops until end-of-file is reached */ 954*53ee8cc1Swenshuai.xi { 955*53ee8cc1Swenshuai.xi/* %% [8.0] yymore()-related code goes here */ 956*53ee8cc1Swenshuai.xi yy_cp = (yy_c_buf_p); 957*53ee8cc1Swenshuai.xi 958*53ee8cc1Swenshuai.xi /* Support of yytext. */ 959*53ee8cc1Swenshuai.xi *yy_cp = (yy_hold_char); 960*53ee8cc1Swenshuai.xi 961*53ee8cc1Swenshuai.xi /* yy_bp points to the position in yy_ch_buf of the start of 962*53ee8cc1Swenshuai.xi * the current run. 963*53ee8cc1Swenshuai.xi */ 964*53ee8cc1Swenshuai.xi yy_bp = yy_cp; 965*53ee8cc1Swenshuai.xi 966*53ee8cc1Swenshuai.xi/* %% [9.0] code to set up and find next match goes here */ 967*53ee8cc1Swenshuai.xi yy_current_state = (yy_start); 968*53ee8cc1Swenshuai.xi yy_current_state += YY_AT_BOL(); 969*53ee8cc1Swenshuai.xiyy_match: 970*53ee8cc1Swenshuai.xi do 971*53ee8cc1Swenshuai.xi { 972*53ee8cc1Swenshuai.xi register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; 973*53ee8cc1Swenshuai.xi if ( yy_accept[yy_current_state] ) 974*53ee8cc1Swenshuai.xi { 975*53ee8cc1Swenshuai.xi (yy_last_accepting_state) = yy_current_state; 976*53ee8cc1Swenshuai.xi (yy_last_accepting_cpos) = yy_cp; 977*53ee8cc1Swenshuai.xi } 978*53ee8cc1Swenshuai.xi while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 979*53ee8cc1Swenshuai.xi { 980*53ee8cc1Swenshuai.xi yy_current_state = (int) yy_def[yy_current_state]; 981*53ee8cc1Swenshuai.xi if ( yy_current_state >= 73 ) 982*53ee8cc1Swenshuai.xi yy_c = yy_meta[(unsigned int) yy_c]; 983*53ee8cc1Swenshuai.xi } 984*53ee8cc1Swenshuai.xi yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 985*53ee8cc1Swenshuai.xi ++yy_cp; 986*53ee8cc1Swenshuai.xi } 987*53ee8cc1Swenshuai.xi while ( yy_base[yy_current_state] != 266 ); 988*53ee8cc1Swenshuai.xi 989*53ee8cc1Swenshuai.xiyy_find_action: 990*53ee8cc1Swenshuai.xi/* %% [10.0] code to find the action number goes here */ 991*53ee8cc1Swenshuai.xi yy_act = yy_accept[yy_current_state]; 992*53ee8cc1Swenshuai.xi if ( yy_act == 0 ) 993*53ee8cc1Swenshuai.xi { /* have to back up */ 994*53ee8cc1Swenshuai.xi yy_cp = (yy_last_accepting_cpos); 995*53ee8cc1Swenshuai.xi yy_current_state = (yy_last_accepting_state); 996*53ee8cc1Swenshuai.xi yy_act = yy_accept[yy_current_state]; 997*53ee8cc1Swenshuai.xi } 998*53ee8cc1Swenshuai.xi 999*53ee8cc1Swenshuai.xi YY_DO_BEFORE_ACTION; 1000*53ee8cc1Swenshuai.xi 1001*53ee8cc1Swenshuai.xi/* %% [11.0] code for yylineno update goes here */ 1002*53ee8cc1Swenshuai.xi 1003*53ee8cc1Swenshuai.xido_action: /* This label is used only to access EOF actions. */ 1004*53ee8cc1Swenshuai.xi 1005*53ee8cc1Swenshuai.xi/* %% [12.0] debug code goes here */ 1006*53ee8cc1Swenshuai.xi if ( yy_flex_debug ) 1007*53ee8cc1Swenshuai.xi { 1008*53ee8cc1Swenshuai.xi if ( yy_act == 0 ) 1009*53ee8cc1Swenshuai.xi fprintf( stderr, "--scanner backing up\n" ); 1010*53ee8cc1Swenshuai.xi else if ( yy_act < 13 ) 1011*53ee8cc1Swenshuai.xi fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", 1012*53ee8cc1Swenshuai.xi (long)yy_rule_linenum[yy_act], yytext ); 1013*53ee8cc1Swenshuai.xi else if ( yy_act == 13 ) 1014*53ee8cc1Swenshuai.xi fprintf( stderr, "--accepting default rule (\"%s\")\n", 1015*53ee8cc1Swenshuai.xi yytext ); 1016*53ee8cc1Swenshuai.xi else if ( yy_act == 14 ) 1017*53ee8cc1Swenshuai.xi fprintf( stderr, "--(end of buffer or a NUL)\n" ); 1018*53ee8cc1Swenshuai.xi else 1019*53ee8cc1Swenshuai.xi fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); 1020*53ee8cc1Swenshuai.xi } 1021*53ee8cc1Swenshuai.xi 1022*53ee8cc1Swenshuai.xi switch ( yy_act ) 1023*53ee8cc1Swenshuai.xi { /* beginning of action switch */ 1024*53ee8cc1Swenshuai.xi/* %% [13.0] actions go here */ 1025*53ee8cc1Swenshuai.xi case 0: /* must back up */ 1026*53ee8cc1Swenshuai.xi /* undo the effects of YY_DO_BEFORE_ACTION */ 1027*53ee8cc1Swenshuai.xi *yy_cp = (yy_hold_char); 1028*53ee8cc1Swenshuai.xi yy_cp = (yy_last_accepting_cpos); 1029*53ee8cc1Swenshuai.xi yy_current_state = (yy_last_accepting_state); 1030*53ee8cc1Swenshuai.xi goto yy_find_action; 1031*53ee8cc1Swenshuai.xi 1032*53ee8cc1Swenshuai.xicase 1: 1033*53ee8cc1Swenshuai.xi/* rule 1 can match eol */ 1034*53ee8cc1Swenshuai.xiYY_RULE_SETUP 1035*53ee8cc1Swenshuai.xi#line 67 "scripts/genksyms/lex.l" 1036*53ee8cc1Swenshuai.xireturn FILENAME; 1037*53ee8cc1Swenshuai.xi YY_BREAK 1038*53ee8cc1Swenshuai.xicase 2: 1039*53ee8cc1Swenshuai.xi/* rule 2 can match eol */ 1040*53ee8cc1Swenshuai.xiYY_RULE_SETUP 1041*53ee8cc1Swenshuai.xi#line 68 "scripts/genksyms/lex.l" 1042*53ee8cc1Swenshuai.xicur_line++; 1043*53ee8cc1Swenshuai.xi YY_BREAK 1044*53ee8cc1Swenshuai.xicase 3: 1045*53ee8cc1Swenshuai.xi/* rule 3 can match eol */ 1046*53ee8cc1Swenshuai.xiYY_RULE_SETUP 1047*53ee8cc1Swenshuai.xi#line 69 "scripts/genksyms/lex.l" 1048*53ee8cc1Swenshuai.xicur_line++; 1049*53ee8cc1Swenshuai.xi YY_BREAK 1050*53ee8cc1Swenshuai.xi/* Ignore all other whitespace. */ 1051*53ee8cc1Swenshuai.xicase 4: 1052*53ee8cc1Swenshuai.xiYY_RULE_SETUP 1053*53ee8cc1Swenshuai.xi#line 72 "scripts/genksyms/lex.l" 1054*53ee8cc1Swenshuai.xi; 1055*53ee8cc1Swenshuai.xi YY_BREAK 1056*53ee8cc1Swenshuai.xicase 5: 1057*53ee8cc1Swenshuai.xi/* rule 5 can match eol */ 1058*53ee8cc1Swenshuai.xiYY_RULE_SETUP 1059*53ee8cc1Swenshuai.xi#line 75 "scripts/genksyms/lex.l" 1060*53ee8cc1Swenshuai.xireturn STRING; 1061*53ee8cc1Swenshuai.xi YY_BREAK 1062*53ee8cc1Swenshuai.xicase 6: 1063*53ee8cc1Swenshuai.xi/* rule 6 can match eol */ 1064*53ee8cc1Swenshuai.xiYY_RULE_SETUP 1065*53ee8cc1Swenshuai.xi#line 76 "scripts/genksyms/lex.l" 1066*53ee8cc1Swenshuai.xireturn CHAR; 1067*53ee8cc1Swenshuai.xi YY_BREAK 1068*53ee8cc1Swenshuai.xicase 7: 1069*53ee8cc1Swenshuai.xiYY_RULE_SETUP 1070*53ee8cc1Swenshuai.xi#line 77 "scripts/genksyms/lex.l" 1071*53ee8cc1Swenshuai.xireturn IDENT; 1072*53ee8cc1Swenshuai.xi YY_BREAK 1073*53ee8cc1Swenshuai.xi/* The Pedant requires that the other C multi-character tokens be 1074*53ee8cc1Swenshuai.xi recognized as tokens. We don't actually use them since we don't 1075*53ee8cc1Swenshuai.xi parse expressions, but we do want whitespace to be arranged 1076*53ee8cc1Swenshuai.xi around them properly. */ 1077*53ee8cc1Swenshuai.xicase 8: 1078*53ee8cc1Swenshuai.xiYY_RULE_SETUP 1079*53ee8cc1Swenshuai.xi#line 83 "scripts/genksyms/lex.l" 1080*53ee8cc1Swenshuai.xireturn OTHER; 1081*53ee8cc1Swenshuai.xi YY_BREAK 1082*53ee8cc1Swenshuai.xicase 9: 1083*53ee8cc1Swenshuai.xiYY_RULE_SETUP 1084*53ee8cc1Swenshuai.xi#line 84 "scripts/genksyms/lex.l" 1085*53ee8cc1Swenshuai.xireturn INT; 1086*53ee8cc1Swenshuai.xi YY_BREAK 1087*53ee8cc1Swenshuai.xicase 10: 1088*53ee8cc1Swenshuai.xiYY_RULE_SETUP 1089*53ee8cc1Swenshuai.xi#line 85 "scripts/genksyms/lex.l" 1090*53ee8cc1Swenshuai.xireturn REAL; 1091*53ee8cc1Swenshuai.xi YY_BREAK 1092*53ee8cc1Swenshuai.xicase 11: 1093*53ee8cc1Swenshuai.xiYY_RULE_SETUP 1094*53ee8cc1Swenshuai.xi#line 87 "scripts/genksyms/lex.l" 1095*53ee8cc1Swenshuai.xireturn DOTS; 1096*53ee8cc1Swenshuai.xi YY_BREAK 1097*53ee8cc1Swenshuai.xi/* All other tokens are single characters. */ 1098*53ee8cc1Swenshuai.xicase 12: 1099*53ee8cc1Swenshuai.xiYY_RULE_SETUP 1100*53ee8cc1Swenshuai.xi#line 90 "scripts/genksyms/lex.l" 1101*53ee8cc1Swenshuai.xireturn yytext[0]; 1102*53ee8cc1Swenshuai.xi YY_BREAK 1103*53ee8cc1Swenshuai.xicase 13: 1104*53ee8cc1Swenshuai.xiYY_RULE_SETUP 1105*53ee8cc1Swenshuai.xi#line 93 "scripts/genksyms/lex.l" 1106*53ee8cc1Swenshuai.xiECHO; 1107*53ee8cc1Swenshuai.xi YY_BREAK 1108*53ee8cc1Swenshuai.xi#line 1109 "scripts/genksyms/lex.c" 1109*53ee8cc1Swenshuai.xicase YY_STATE_EOF(INITIAL): 1110*53ee8cc1Swenshuai.xi yyterminate(); 1111*53ee8cc1Swenshuai.xi 1112*53ee8cc1Swenshuai.xi case YY_END_OF_BUFFER: 1113*53ee8cc1Swenshuai.xi { 1114*53ee8cc1Swenshuai.xi /* Amount of text matched not including the EOB char. */ 1115*53ee8cc1Swenshuai.xi int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; 1116*53ee8cc1Swenshuai.xi 1117*53ee8cc1Swenshuai.xi /* Undo the effects of YY_DO_BEFORE_ACTION. */ 1118*53ee8cc1Swenshuai.xi *yy_cp = (yy_hold_char); 1119*53ee8cc1Swenshuai.xi YY_RESTORE_YY_MORE_OFFSET 1120*53ee8cc1Swenshuai.xi 1121*53ee8cc1Swenshuai.xi if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) 1122*53ee8cc1Swenshuai.xi { 1123*53ee8cc1Swenshuai.xi /* We're scanning a new file or input source. It's 1124*53ee8cc1Swenshuai.xi * possible that this happened because the user 1125*53ee8cc1Swenshuai.xi * just pointed yyin at a new source and called 1126*53ee8cc1Swenshuai.xi * yylex(). If so, then we have to assure 1127*53ee8cc1Swenshuai.xi * consistency between YY_CURRENT_BUFFER and our 1128*53ee8cc1Swenshuai.xi * globals. Here is the right place to do so, because 1129*53ee8cc1Swenshuai.xi * this is the first action (other than possibly a 1130*53ee8cc1Swenshuai.xi * back-up) that will match for the new input source. 1131*53ee8cc1Swenshuai.xi */ 1132*53ee8cc1Swenshuai.xi (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; 1133*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; 1134*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; 1135*53ee8cc1Swenshuai.xi } 1136*53ee8cc1Swenshuai.xi 1137*53ee8cc1Swenshuai.xi /* Note that here we test for yy_c_buf_p "<=" to the position 1138*53ee8cc1Swenshuai.xi * of the first EOB in the buffer, since yy_c_buf_p will 1139*53ee8cc1Swenshuai.xi * already have been incremented past the NUL character 1140*53ee8cc1Swenshuai.xi * (since all states make transitions on EOB to the 1141*53ee8cc1Swenshuai.xi * end-of-buffer state). Contrast this with the test 1142*53ee8cc1Swenshuai.xi * in input(). 1143*53ee8cc1Swenshuai.xi */ 1144*53ee8cc1Swenshuai.xi if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) 1145*53ee8cc1Swenshuai.xi { /* This was really a NUL. */ 1146*53ee8cc1Swenshuai.xi yy_state_type yy_next_state; 1147*53ee8cc1Swenshuai.xi 1148*53ee8cc1Swenshuai.xi (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; 1149*53ee8cc1Swenshuai.xi 1150*53ee8cc1Swenshuai.xi yy_current_state = yy_get_previous_state( ); 1151*53ee8cc1Swenshuai.xi 1152*53ee8cc1Swenshuai.xi /* Okay, we're now positioned to make the NUL 1153*53ee8cc1Swenshuai.xi * transition. We couldn't have 1154*53ee8cc1Swenshuai.xi * yy_get_previous_state() go ahead and do it 1155*53ee8cc1Swenshuai.xi * for us because it doesn't know how to deal 1156*53ee8cc1Swenshuai.xi * with the possibility of jamming (and we don't 1157*53ee8cc1Swenshuai.xi * want to build jamming into it because then it 1158*53ee8cc1Swenshuai.xi * will run more slowly). 1159*53ee8cc1Swenshuai.xi */ 1160*53ee8cc1Swenshuai.xi 1161*53ee8cc1Swenshuai.xi yy_next_state = yy_try_NUL_trans( yy_current_state ); 1162*53ee8cc1Swenshuai.xi 1163*53ee8cc1Swenshuai.xi yy_bp = (yytext_ptr) + YY_MORE_ADJ; 1164*53ee8cc1Swenshuai.xi 1165*53ee8cc1Swenshuai.xi if ( yy_next_state ) 1166*53ee8cc1Swenshuai.xi { 1167*53ee8cc1Swenshuai.xi /* Consume the NUL. */ 1168*53ee8cc1Swenshuai.xi yy_cp = ++(yy_c_buf_p); 1169*53ee8cc1Swenshuai.xi yy_current_state = yy_next_state; 1170*53ee8cc1Swenshuai.xi goto yy_match; 1171*53ee8cc1Swenshuai.xi } 1172*53ee8cc1Swenshuai.xi 1173*53ee8cc1Swenshuai.xi else 1174*53ee8cc1Swenshuai.xi { 1175*53ee8cc1Swenshuai.xi/* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */ 1176*53ee8cc1Swenshuai.xi yy_cp = (yy_c_buf_p); 1177*53ee8cc1Swenshuai.xi goto yy_find_action; 1178*53ee8cc1Swenshuai.xi } 1179*53ee8cc1Swenshuai.xi } 1180*53ee8cc1Swenshuai.xi 1181*53ee8cc1Swenshuai.xi else switch ( yy_get_next_buffer( ) ) 1182*53ee8cc1Swenshuai.xi { 1183*53ee8cc1Swenshuai.xi case EOB_ACT_END_OF_FILE: 1184*53ee8cc1Swenshuai.xi { 1185*53ee8cc1Swenshuai.xi (yy_did_buffer_switch_on_eof) = 0; 1186*53ee8cc1Swenshuai.xi 1187*53ee8cc1Swenshuai.xi if ( yywrap( ) ) 1188*53ee8cc1Swenshuai.xi { 1189*53ee8cc1Swenshuai.xi /* Note: because we've taken care in 1190*53ee8cc1Swenshuai.xi * yy_get_next_buffer() to have set up 1191*53ee8cc1Swenshuai.xi * yytext, we can now set up 1192*53ee8cc1Swenshuai.xi * yy_c_buf_p so that if some total 1193*53ee8cc1Swenshuai.xi * hoser (like flex itself) wants to 1194*53ee8cc1Swenshuai.xi * call the scanner after we return the 1195*53ee8cc1Swenshuai.xi * YY_NULL, it'll still work - another 1196*53ee8cc1Swenshuai.xi * YY_NULL will get returned. 1197*53ee8cc1Swenshuai.xi */ 1198*53ee8cc1Swenshuai.xi (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; 1199*53ee8cc1Swenshuai.xi 1200*53ee8cc1Swenshuai.xi yy_act = YY_STATE_EOF(YY_START); 1201*53ee8cc1Swenshuai.xi goto do_action; 1202*53ee8cc1Swenshuai.xi } 1203*53ee8cc1Swenshuai.xi 1204*53ee8cc1Swenshuai.xi else 1205*53ee8cc1Swenshuai.xi { 1206*53ee8cc1Swenshuai.xi if ( ! (yy_did_buffer_switch_on_eof) ) 1207*53ee8cc1Swenshuai.xi YY_NEW_FILE; 1208*53ee8cc1Swenshuai.xi } 1209*53ee8cc1Swenshuai.xi break; 1210*53ee8cc1Swenshuai.xi } 1211*53ee8cc1Swenshuai.xi 1212*53ee8cc1Swenshuai.xi case EOB_ACT_CONTINUE_SCAN: 1213*53ee8cc1Swenshuai.xi (yy_c_buf_p) = 1214*53ee8cc1Swenshuai.xi (yytext_ptr) + yy_amount_of_matched_text; 1215*53ee8cc1Swenshuai.xi 1216*53ee8cc1Swenshuai.xi yy_current_state = yy_get_previous_state( ); 1217*53ee8cc1Swenshuai.xi 1218*53ee8cc1Swenshuai.xi yy_cp = (yy_c_buf_p); 1219*53ee8cc1Swenshuai.xi yy_bp = (yytext_ptr) + YY_MORE_ADJ; 1220*53ee8cc1Swenshuai.xi goto yy_match; 1221*53ee8cc1Swenshuai.xi 1222*53ee8cc1Swenshuai.xi case EOB_ACT_LAST_MATCH: 1223*53ee8cc1Swenshuai.xi (yy_c_buf_p) = 1224*53ee8cc1Swenshuai.xi &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; 1225*53ee8cc1Swenshuai.xi 1226*53ee8cc1Swenshuai.xi yy_current_state = yy_get_previous_state( ); 1227*53ee8cc1Swenshuai.xi 1228*53ee8cc1Swenshuai.xi yy_cp = (yy_c_buf_p); 1229*53ee8cc1Swenshuai.xi yy_bp = (yytext_ptr) + YY_MORE_ADJ; 1230*53ee8cc1Swenshuai.xi goto yy_find_action; 1231*53ee8cc1Swenshuai.xi } 1232*53ee8cc1Swenshuai.xi break; 1233*53ee8cc1Swenshuai.xi } 1234*53ee8cc1Swenshuai.xi 1235*53ee8cc1Swenshuai.xi default: 1236*53ee8cc1Swenshuai.xi YY_FATAL_ERROR( 1237*53ee8cc1Swenshuai.xi "fatal flex scanner internal error--no action found" ); 1238*53ee8cc1Swenshuai.xi } /* end of action switch */ 1239*53ee8cc1Swenshuai.xi } /* end of scanning one token */ 1240*53ee8cc1Swenshuai.xi} /* end of yylex */ 1241*53ee8cc1Swenshuai.xi/* %ok-for-header */ 1242*53ee8cc1Swenshuai.xi 1243*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1244*53ee8cc1Swenshuai.xi/* %not-for-header */ 1245*53ee8cc1Swenshuai.xi 1246*53ee8cc1Swenshuai.xi/* %ok-for-header */ 1247*53ee8cc1Swenshuai.xi 1248*53ee8cc1Swenshuai.xi/* %endif */ 1249*53ee8cc1Swenshuai.xi 1250*53ee8cc1Swenshuai.xi/* yy_get_next_buffer - try to read in a new buffer 1251*53ee8cc1Swenshuai.xi * 1252*53ee8cc1Swenshuai.xi * Returns a code representing an action: 1253*53ee8cc1Swenshuai.xi * EOB_ACT_LAST_MATCH - 1254*53ee8cc1Swenshuai.xi * EOB_ACT_CONTINUE_SCAN - continue scanning from current position 1255*53ee8cc1Swenshuai.xi * EOB_ACT_END_OF_FILE - end of file 1256*53ee8cc1Swenshuai.xi */ 1257*53ee8cc1Swenshuai.xi/* %if-c-only */ 1258*53ee8cc1Swenshuai.xistatic int yy_get_next_buffer (void) 1259*53ee8cc1Swenshuai.xi/* %endif */ 1260*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1261*53ee8cc1Swenshuai.xi/* %endif */ 1262*53ee8cc1Swenshuai.xi{ 1263*53ee8cc1Swenshuai.xi register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; 1264*53ee8cc1Swenshuai.xi register char *source = (yytext_ptr); 1265*53ee8cc1Swenshuai.xi register int number_to_move, i; 1266*53ee8cc1Swenshuai.xi int ret_val; 1267*53ee8cc1Swenshuai.xi 1268*53ee8cc1Swenshuai.xi if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) 1269*53ee8cc1Swenshuai.xi YY_FATAL_ERROR( 1270*53ee8cc1Swenshuai.xi "fatal flex scanner internal error--end of buffer missed" ); 1271*53ee8cc1Swenshuai.xi 1272*53ee8cc1Swenshuai.xi if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) 1273*53ee8cc1Swenshuai.xi { /* Don't try to fill the buffer, so this is an EOF. */ 1274*53ee8cc1Swenshuai.xi if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) 1275*53ee8cc1Swenshuai.xi { 1276*53ee8cc1Swenshuai.xi /* We matched a single character, the EOB, so 1277*53ee8cc1Swenshuai.xi * treat this as a final EOF. 1278*53ee8cc1Swenshuai.xi */ 1279*53ee8cc1Swenshuai.xi return EOB_ACT_END_OF_FILE; 1280*53ee8cc1Swenshuai.xi } 1281*53ee8cc1Swenshuai.xi 1282*53ee8cc1Swenshuai.xi else 1283*53ee8cc1Swenshuai.xi { 1284*53ee8cc1Swenshuai.xi /* We matched some text prior to the EOB, first 1285*53ee8cc1Swenshuai.xi * process it. 1286*53ee8cc1Swenshuai.xi */ 1287*53ee8cc1Swenshuai.xi return EOB_ACT_LAST_MATCH; 1288*53ee8cc1Swenshuai.xi } 1289*53ee8cc1Swenshuai.xi } 1290*53ee8cc1Swenshuai.xi 1291*53ee8cc1Swenshuai.xi /* Try to read more data. */ 1292*53ee8cc1Swenshuai.xi 1293*53ee8cc1Swenshuai.xi /* First move last chars to start of buffer. */ 1294*53ee8cc1Swenshuai.xi number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; 1295*53ee8cc1Swenshuai.xi 1296*53ee8cc1Swenshuai.xi for ( i = 0; i < number_to_move; ++i ) 1297*53ee8cc1Swenshuai.xi *(dest++) = *(source++); 1298*53ee8cc1Swenshuai.xi 1299*53ee8cc1Swenshuai.xi if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) 1300*53ee8cc1Swenshuai.xi /* don't do the read, it's not guaranteed to return an EOF, 1301*53ee8cc1Swenshuai.xi * just force an EOF 1302*53ee8cc1Swenshuai.xi */ 1303*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; 1304*53ee8cc1Swenshuai.xi 1305*53ee8cc1Swenshuai.xi else 1306*53ee8cc1Swenshuai.xi { 1307*53ee8cc1Swenshuai.xi int num_to_read = 1308*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; 1309*53ee8cc1Swenshuai.xi 1310*53ee8cc1Swenshuai.xi while ( num_to_read <= 0 ) 1311*53ee8cc1Swenshuai.xi { /* Not enough room in the buffer - grow it. */ 1312*53ee8cc1Swenshuai.xi 1313*53ee8cc1Swenshuai.xi /* just a shorter name for the current buffer */ 1314*53ee8cc1Swenshuai.xi YY_BUFFER_STATE b = YY_CURRENT_BUFFER; 1315*53ee8cc1Swenshuai.xi 1316*53ee8cc1Swenshuai.xi int yy_c_buf_p_offset = 1317*53ee8cc1Swenshuai.xi (int) ((yy_c_buf_p) - b->yy_ch_buf); 1318*53ee8cc1Swenshuai.xi 1319*53ee8cc1Swenshuai.xi if ( b->yy_is_our_buffer ) 1320*53ee8cc1Swenshuai.xi { 1321*53ee8cc1Swenshuai.xi int new_size = b->yy_buf_size * 2; 1322*53ee8cc1Swenshuai.xi 1323*53ee8cc1Swenshuai.xi if ( new_size <= 0 ) 1324*53ee8cc1Swenshuai.xi b->yy_buf_size += b->yy_buf_size / 8; 1325*53ee8cc1Swenshuai.xi else 1326*53ee8cc1Swenshuai.xi b->yy_buf_size *= 2; 1327*53ee8cc1Swenshuai.xi 1328*53ee8cc1Swenshuai.xi b->yy_ch_buf = (char *) 1329*53ee8cc1Swenshuai.xi /* Include room in for 2 EOB chars. */ 1330*53ee8cc1Swenshuai.xi yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); 1331*53ee8cc1Swenshuai.xi } 1332*53ee8cc1Swenshuai.xi else 1333*53ee8cc1Swenshuai.xi /* Can't grow it, we don't own it. */ 1334*53ee8cc1Swenshuai.xi b->yy_ch_buf = 0; 1335*53ee8cc1Swenshuai.xi 1336*53ee8cc1Swenshuai.xi if ( ! b->yy_ch_buf ) 1337*53ee8cc1Swenshuai.xi YY_FATAL_ERROR( 1338*53ee8cc1Swenshuai.xi "fatal error - scanner input buffer overflow" ); 1339*53ee8cc1Swenshuai.xi 1340*53ee8cc1Swenshuai.xi (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; 1341*53ee8cc1Swenshuai.xi 1342*53ee8cc1Swenshuai.xi num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - 1343*53ee8cc1Swenshuai.xi number_to_move - 1; 1344*53ee8cc1Swenshuai.xi 1345*53ee8cc1Swenshuai.xi } 1346*53ee8cc1Swenshuai.xi 1347*53ee8cc1Swenshuai.xi if ( num_to_read > YY_READ_BUF_SIZE ) 1348*53ee8cc1Swenshuai.xi num_to_read = YY_READ_BUF_SIZE; 1349*53ee8cc1Swenshuai.xi 1350*53ee8cc1Swenshuai.xi /* Read in more data. */ 1351*53ee8cc1Swenshuai.xi YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), 1352*53ee8cc1Swenshuai.xi (yy_n_chars), (size_t) num_to_read ); 1353*53ee8cc1Swenshuai.xi 1354*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 1355*53ee8cc1Swenshuai.xi } 1356*53ee8cc1Swenshuai.xi 1357*53ee8cc1Swenshuai.xi if ( (yy_n_chars) == 0 ) 1358*53ee8cc1Swenshuai.xi { 1359*53ee8cc1Swenshuai.xi if ( number_to_move == YY_MORE_ADJ ) 1360*53ee8cc1Swenshuai.xi { 1361*53ee8cc1Swenshuai.xi ret_val = EOB_ACT_END_OF_FILE; 1362*53ee8cc1Swenshuai.xi yyrestart(yyin ); 1363*53ee8cc1Swenshuai.xi } 1364*53ee8cc1Swenshuai.xi 1365*53ee8cc1Swenshuai.xi else 1366*53ee8cc1Swenshuai.xi { 1367*53ee8cc1Swenshuai.xi ret_val = EOB_ACT_LAST_MATCH; 1368*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = 1369*53ee8cc1Swenshuai.xi YY_BUFFER_EOF_PENDING; 1370*53ee8cc1Swenshuai.xi } 1371*53ee8cc1Swenshuai.xi } 1372*53ee8cc1Swenshuai.xi 1373*53ee8cc1Swenshuai.xi else 1374*53ee8cc1Swenshuai.xi ret_val = EOB_ACT_CONTINUE_SCAN; 1375*53ee8cc1Swenshuai.xi 1376*53ee8cc1Swenshuai.xi if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { 1377*53ee8cc1Swenshuai.xi /* Extend the array by 50%, plus the number we really need. */ 1378*53ee8cc1Swenshuai.xi yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); 1379*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); 1380*53ee8cc1Swenshuai.xi if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) 1381*53ee8cc1Swenshuai.xi YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); 1382*53ee8cc1Swenshuai.xi } 1383*53ee8cc1Swenshuai.xi 1384*53ee8cc1Swenshuai.xi (yy_n_chars) += number_to_move; 1385*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; 1386*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; 1387*53ee8cc1Swenshuai.xi 1388*53ee8cc1Swenshuai.xi (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; 1389*53ee8cc1Swenshuai.xi 1390*53ee8cc1Swenshuai.xi return ret_val; 1391*53ee8cc1Swenshuai.xi} 1392*53ee8cc1Swenshuai.xi 1393*53ee8cc1Swenshuai.xi/* yy_get_previous_state - get the state just before the EOB char was reached */ 1394*53ee8cc1Swenshuai.xi 1395*53ee8cc1Swenshuai.xi/* %if-c-only */ 1396*53ee8cc1Swenshuai.xi/* %not-for-header */ 1397*53ee8cc1Swenshuai.xi 1398*53ee8cc1Swenshuai.xi static yy_state_type yy_get_previous_state (void) 1399*53ee8cc1Swenshuai.xi/* %endif */ 1400*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1401*53ee8cc1Swenshuai.xi/* %endif */ 1402*53ee8cc1Swenshuai.xi{ 1403*53ee8cc1Swenshuai.xi register yy_state_type yy_current_state; 1404*53ee8cc1Swenshuai.xi register char *yy_cp; 1405*53ee8cc1Swenshuai.xi 1406*53ee8cc1Swenshuai.xi/* %% [15.0] code to get the start state into yy_current_state goes here */ 1407*53ee8cc1Swenshuai.xi yy_current_state = (yy_start); 1408*53ee8cc1Swenshuai.xi yy_current_state += YY_AT_BOL(); 1409*53ee8cc1Swenshuai.xi 1410*53ee8cc1Swenshuai.xi for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) 1411*53ee8cc1Swenshuai.xi { 1412*53ee8cc1Swenshuai.xi/* %% [16.0] code to find the next state goes here */ 1413*53ee8cc1Swenshuai.xi register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); 1414*53ee8cc1Swenshuai.xi if ( yy_accept[yy_current_state] ) 1415*53ee8cc1Swenshuai.xi { 1416*53ee8cc1Swenshuai.xi (yy_last_accepting_state) = yy_current_state; 1417*53ee8cc1Swenshuai.xi (yy_last_accepting_cpos) = yy_cp; 1418*53ee8cc1Swenshuai.xi } 1419*53ee8cc1Swenshuai.xi while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 1420*53ee8cc1Swenshuai.xi { 1421*53ee8cc1Swenshuai.xi yy_current_state = (int) yy_def[yy_current_state]; 1422*53ee8cc1Swenshuai.xi if ( yy_current_state >= 73 ) 1423*53ee8cc1Swenshuai.xi yy_c = yy_meta[(unsigned int) yy_c]; 1424*53ee8cc1Swenshuai.xi } 1425*53ee8cc1Swenshuai.xi yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 1426*53ee8cc1Swenshuai.xi } 1427*53ee8cc1Swenshuai.xi 1428*53ee8cc1Swenshuai.xi return yy_current_state; 1429*53ee8cc1Swenshuai.xi} 1430*53ee8cc1Swenshuai.xi 1431*53ee8cc1Swenshuai.xi/* yy_try_NUL_trans - try to make a transition on the NUL character 1432*53ee8cc1Swenshuai.xi * 1433*53ee8cc1Swenshuai.xi * synopsis 1434*53ee8cc1Swenshuai.xi * next_state = yy_try_NUL_trans( current_state ); 1435*53ee8cc1Swenshuai.xi */ 1436*53ee8cc1Swenshuai.xi/* %if-c-only */ 1437*53ee8cc1Swenshuai.xi static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) 1438*53ee8cc1Swenshuai.xi/* %endif */ 1439*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1440*53ee8cc1Swenshuai.xi/* %endif */ 1441*53ee8cc1Swenshuai.xi{ 1442*53ee8cc1Swenshuai.xi register int yy_is_jam; 1443*53ee8cc1Swenshuai.xi /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */ 1444*53ee8cc1Swenshuai.xi register char *yy_cp = (yy_c_buf_p); 1445*53ee8cc1Swenshuai.xi 1446*53ee8cc1Swenshuai.xi register YY_CHAR yy_c = 1; 1447*53ee8cc1Swenshuai.xi if ( yy_accept[yy_current_state] ) 1448*53ee8cc1Swenshuai.xi { 1449*53ee8cc1Swenshuai.xi (yy_last_accepting_state) = yy_current_state; 1450*53ee8cc1Swenshuai.xi (yy_last_accepting_cpos) = yy_cp; 1451*53ee8cc1Swenshuai.xi } 1452*53ee8cc1Swenshuai.xi while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 1453*53ee8cc1Swenshuai.xi { 1454*53ee8cc1Swenshuai.xi yy_current_state = (int) yy_def[yy_current_state]; 1455*53ee8cc1Swenshuai.xi if ( yy_current_state >= 73 ) 1456*53ee8cc1Swenshuai.xi yy_c = yy_meta[(unsigned int) yy_c]; 1457*53ee8cc1Swenshuai.xi } 1458*53ee8cc1Swenshuai.xi yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 1459*53ee8cc1Swenshuai.xi yy_is_jam = (yy_current_state == 72); 1460*53ee8cc1Swenshuai.xi 1461*53ee8cc1Swenshuai.xi return yy_is_jam ? 0 : yy_current_state; 1462*53ee8cc1Swenshuai.xi} 1463*53ee8cc1Swenshuai.xi 1464*53ee8cc1Swenshuai.xi/* %if-c-only */ 1465*53ee8cc1Swenshuai.xi 1466*53ee8cc1Swenshuai.xi static void yyunput (int c, register char * yy_bp ) 1467*53ee8cc1Swenshuai.xi/* %endif */ 1468*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1469*53ee8cc1Swenshuai.xi/* %endif */ 1470*53ee8cc1Swenshuai.xi{ 1471*53ee8cc1Swenshuai.xi register char *yy_cp; 1472*53ee8cc1Swenshuai.xi 1473*53ee8cc1Swenshuai.xi yy_cp = (yy_c_buf_p); 1474*53ee8cc1Swenshuai.xi 1475*53ee8cc1Swenshuai.xi /* undo effects of setting up yytext */ 1476*53ee8cc1Swenshuai.xi *yy_cp = (yy_hold_char); 1477*53ee8cc1Swenshuai.xi 1478*53ee8cc1Swenshuai.xi if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) 1479*53ee8cc1Swenshuai.xi { /* need to shift things up to make room */ 1480*53ee8cc1Swenshuai.xi /* +2 for EOB chars. */ 1481*53ee8cc1Swenshuai.xi register int number_to_move = (yy_n_chars) + 2; 1482*53ee8cc1Swenshuai.xi register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ 1483*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; 1484*53ee8cc1Swenshuai.xi register char *source = 1485*53ee8cc1Swenshuai.xi &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; 1486*53ee8cc1Swenshuai.xi 1487*53ee8cc1Swenshuai.xi while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) 1488*53ee8cc1Swenshuai.xi *--dest = *--source; 1489*53ee8cc1Swenshuai.xi 1490*53ee8cc1Swenshuai.xi yy_cp += (int) (dest - source); 1491*53ee8cc1Swenshuai.xi yy_bp += (int) (dest - source); 1492*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_n_chars = 1493*53ee8cc1Swenshuai.xi (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; 1494*53ee8cc1Swenshuai.xi 1495*53ee8cc1Swenshuai.xi if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) 1496*53ee8cc1Swenshuai.xi YY_FATAL_ERROR( "flex scanner push-back overflow" ); 1497*53ee8cc1Swenshuai.xi } 1498*53ee8cc1Swenshuai.xi 1499*53ee8cc1Swenshuai.xi *--yy_cp = (char) c; 1500*53ee8cc1Swenshuai.xi 1501*53ee8cc1Swenshuai.xi/* %% [18.0] update yylineno here */ 1502*53ee8cc1Swenshuai.xi 1503*53ee8cc1Swenshuai.xi (yytext_ptr) = yy_bp; 1504*53ee8cc1Swenshuai.xi (yy_hold_char) = *yy_cp; 1505*53ee8cc1Swenshuai.xi (yy_c_buf_p) = yy_cp; 1506*53ee8cc1Swenshuai.xi} 1507*53ee8cc1Swenshuai.xi/* %if-c-only */ 1508*53ee8cc1Swenshuai.xi 1509*53ee8cc1Swenshuai.xi/* %endif */ 1510*53ee8cc1Swenshuai.xi 1511*53ee8cc1Swenshuai.xi/* %if-c-only */ 1512*53ee8cc1Swenshuai.xi#ifndef YY_NO_INPUT 1513*53ee8cc1Swenshuai.xi#ifdef __cplusplus 1514*53ee8cc1Swenshuai.xi static int yyinput (void) 1515*53ee8cc1Swenshuai.xi#else 1516*53ee8cc1Swenshuai.xi static int input (void) 1517*53ee8cc1Swenshuai.xi#endif 1518*53ee8cc1Swenshuai.xi 1519*53ee8cc1Swenshuai.xi/* %endif */ 1520*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1521*53ee8cc1Swenshuai.xi/* %endif */ 1522*53ee8cc1Swenshuai.xi{ 1523*53ee8cc1Swenshuai.xi int c; 1524*53ee8cc1Swenshuai.xi 1525*53ee8cc1Swenshuai.xi *(yy_c_buf_p) = (yy_hold_char); 1526*53ee8cc1Swenshuai.xi 1527*53ee8cc1Swenshuai.xi if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) 1528*53ee8cc1Swenshuai.xi { 1529*53ee8cc1Swenshuai.xi /* yy_c_buf_p now points to the character we want to return. 1530*53ee8cc1Swenshuai.xi * If this occurs *before* the EOB characters, then it's a 1531*53ee8cc1Swenshuai.xi * valid NUL; if not, then we've hit the end of the buffer. 1532*53ee8cc1Swenshuai.xi */ 1533*53ee8cc1Swenshuai.xi if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) 1534*53ee8cc1Swenshuai.xi /* This was really a NUL. */ 1535*53ee8cc1Swenshuai.xi *(yy_c_buf_p) = '\0'; 1536*53ee8cc1Swenshuai.xi 1537*53ee8cc1Swenshuai.xi else 1538*53ee8cc1Swenshuai.xi { /* need more input */ 1539*53ee8cc1Swenshuai.xi int offset = (yy_c_buf_p) - (yytext_ptr); 1540*53ee8cc1Swenshuai.xi ++(yy_c_buf_p); 1541*53ee8cc1Swenshuai.xi 1542*53ee8cc1Swenshuai.xi switch ( yy_get_next_buffer( ) ) 1543*53ee8cc1Swenshuai.xi { 1544*53ee8cc1Swenshuai.xi case EOB_ACT_LAST_MATCH: 1545*53ee8cc1Swenshuai.xi /* This happens because yy_g_n_b() 1546*53ee8cc1Swenshuai.xi * sees that we've accumulated a 1547*53ee8cc1Swenshuai.xi * token and flags that we need to 1548*53ee8cc1Swenshuai.xi * try matching the token before 1549*53ee8cc1Swenshuai.xi * proceeding. But for input(), 1550*53ee8cc1Swenshuai.xi * there's no matching to consider. 1551*53ee8cc1Swenshuai.xi * So convert the EOB_ACT_LAST_MATCH 1552*53ee8cc1Swenshuai.xi * to EOB_ACT_END_OF_FILE. 1553*53ee8cc1Swenshuai.xi */ 1554*53ee8cc1Swenshuai.xi 1555*53ee8cc1Swenshuai.xi /* Reset buffer status. */ 1556*53ee8cc1Swenshuai.xi yyrestart(yyin ); 1557*53ee8cc1Swenshuai.xi 1558*53ee8cc1Swenshuai.xi /*FALLTHROUGH*/ 1559*53ee8cc1Swenshuai.xi 1560*53ee8cc1Swenshuai.xi case EOB_ACT_END_OF_FILE: 1561*53ee8cc1Swenshuai.xi { 1562*53ee8cc1Swenshuai.xi if ( yywrap( ) ) 1563*53ee8cc1Swenshuai.xi return EOF; 1564*53ee8cc1Swenshuai.xi 1565*53ee8cc1Swenshuai.xi if ( ! (yy_did_buffer_switch_on_eof) ) 1566*53ee8cc1Swenshuai.xi YY_NEW_FILE; 1567*53ee8cc1Swenshuai.xi#ifdef __cplusplus 1568*53ee8cc1Swenshuai.xi return yyinput(); 1569*53ee8cc1Swenshuai.xi#else 1570*53ee8cc1Swenshuai.xi return input(); 1571*53ee8cc1Swenshuai.xi#endif 1572*53ee8cc1Swenshuai.xi } 1573*53ee8cc1Swenshuai.xi 1574*53ee8cc1Swenshuai.xi case EOB_ACT_CONTINUE_SCAN: 1575*53ee8cc1Swenshuai.xi (yy_c_buf_p) = (yytext_ptr) + offset; 1576*53ee8cc1Swenshuai.xi break; 1577*53ee8cc1Swenshuai.xi } 1578*53ee8cc1Swenshuai.xi } 1579*53ee8cc1Swenshuai.xi } 1580*53ee8cc1Swenshuai.xi 1581*53ee8cc1Swenshuai.xi c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ 1582*53ee8cc1Swenshuai.xi *(yy_c_buf_p) = '\0'; /* preserve yytext */ 1583*53ee8cc1Swenshuai.xi (yy_hold_char) = *++(yy_c_buf_p); 1584*53ee8cc1Swenshuai.xi 1585*53ee8cc1Swenshuai.xi/* %% [19.0] update BOL and yylineno */ 1586*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); 1587*53ee8cc1Swenshuai.xi 1588*53ee8cc1Swenshuai.xi return c; 1589*53ee8cc1Swenshuai.xi} 1590*53ee8cc1Swenshuai.xi/* %if-c-only */ 1591*53ee8cc1Swenshuai.xi#endif /* ifndef YY_NO_INPUT */ 1592*53ee8cc1Swenshuai.xi/* %endif */ 1593*53ee8cc1Swenshuai.xi 1594*53ee8cc1Swenshuai.xi/** Immediately switch to a different input stream. 1595*53ee8cc1Swenshuai.xi * @param input_file A readable stream. 1596*53ee8cc1Swenshuai.xi * 1597*53ee8cc1Swenshuai.xi * @note This function does not reset the start condition to @c INITIAL . 1598*53ee8cc1Swenshuai.xi */ 1599*53ee8cc1Swenshuai.xi/* %if-c-only */ 1600*53ee8cc1Swenshuai.xi void yyrestart (FILE * input_file ) 1601*53ee8cc1Swenshuai.xi/* %endif */ 1602*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1603*53ee8cc1Swenshuai.xi/* %endif */ 1604*53ee8cc1Swenshuai.xi{ 1605*53ee8cc1Swenshuai.xi 1606*53ee8cc1Swenshuai.xi if ( ! YY_CURRENT_BUFFER ){ 1607*53ee8cc1Swenshuai.xi yyensure_buffer_stack (); 1608*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE = 1609*53ee8cc1Swenshuai.xi yy_create_buffer(yyin,YY_BUF_SIZE ); 1610*53ee8cc1Swenshuai.xi } 1611*53ee8cc1Swenshuai.xi 1612*53ee8cc1Swenshuai.xi yy_init_buffer(YY_CURRENT_BUFFER,input_file ); 1613*53ee8cc1Swenshuai.xi yy_load_buffer_state( ); 1614*53ee8cc1Swenshuai.xi} 1615*53ee8cc1Swenshuai.xi 1616*53ee8cc1Swenshuai.xi/** Switch to a different input buffer. 1617*53ee8cc1Swenshuai.xi * @param new_buffer The new input buffer. 1618*53ee8cc1Swenshuai.xi * 1619*53ee8cc1Swenshuai.xi */ 1620*53ee8cc1Swenshuai.xi/* %if-c-only */ 1621*53ee8cc1Swenshuai.xi void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) 1622*53ee8cc1Swenshuai.xi/* %endif */ 1623*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1624*53ee8cc1Swenshuai.xi/* %endif */ 1625*53ee8cc1Swenshuai.xi{ 1626*53ee8cc1Swenshuai.xi 1627*53ee8cc1Swenshuai.xi /* TODO. We should be able to replace this entire function body 1628*53ee8cc1Swenshuai.xi * with 1629*53ee8cc1Swenshuai.xi * yypop_buffer_state(); 1630*53ee8cc1Swenshuai.xi * yypush_buffer_state(new_buffer); 1631*53ee8cc1Swenshuai.xi */ 1632*53ee8cc1Swenshuai.xi yyensure_buffer_stack (); 1633*53ee8cc1Swenshuai.xi if ( YY_CURRENT_BUFFER == new_buffer ) 1634*53ee8cc1Swenshuai.xi return; 1635*53ee8cc1Swenshuai.xi 1636*53ee8cc1Swenshuai.xi if ( YY_CURRENT_BUFFER ) 1637*53ee8cc1Swenshuai.xi { 1638*53ee8cc1Swenshuai.xi /* Flush out information for old buffer. */ 1639*53ee8cc1Swenshuai.xi *(yy_c_buf_p) = (yy_hold_char); 1640*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); 1641*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 1642*53ee8cc1Swenshuai.xi } 1643*53ee8cc1Swenshuai.xi 1644*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE = new_buffer; 1645*53ee8cc1Swenshuai.xi yy_load_buffer_state( ); 1646*53ee8cc1Swenshuai.xi 1647*53ee8cc1Swenshuai.xi /* We don't actually know whether we did this switch during 1648*53ee8cc1Swenshuai.xi * EOF (yywrap()) processing, but the only time this flag 1649*53ee8cc1Swenshuai.xi * is looked at is after yywrap() is called, so it's safe 1650*53ee8cc1Swenshuai.xi * to go ahead and always set it. 1651*53ee8cc1Swenshuai.xi */ 1652*53ee8cc1Swenshuai.xi (yy_did_buffer_switch_on_eof) = 1; 1653*53ee8cc1Swenshuai.xi} 1654*53ee8cc1Swenshuai.xi 1655*53ee8cc1Swenshuai.xi/* %if-c-only */ 1656*53ee8cc1Swenshuai.xistatic void yy_load_buffer_state (void) 1657*53ee8cc1Swenshuai.xi/* %endif */ 1658*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1659*53ee8cc1Swenshuai.xi/* %endif */ 1660*53ee8cc1Swenshuai.xi{ 1661*53ee8cc1Swenshuai.xi (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; 1662*53ee8cc1Swenshuai.xi (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; 1663*53ee8cc1Swenshuai.xi yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; 1664*53ee8cc1Swenshuai.xi (yy_hold_char) = *(yy_c_buf_p); 1665*53ee8cc1Swenshuai.xi} 1666*53ee8cc1Swenshuai.xi 1667*53ee8cc1Swenshuai.xi/** Allocate and initialize an input buffer state. 1668*53ee8cc1Swenshuai.xi * @param file A readable stream. 1669*53ee8cc1Swenshuai.xi * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. 1670*53ee8cc1Swenshuai.xi * 1671*53ee8cc1Swenshuai.xi * @return the allocated buffer state. 1672*53ee8cc1Swenshuai.xi */ 1673*53ee8cc1Swenshuai.xi/* %if-c-only */ 1674*53ee8cc1Swenshuai.xi YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) 1675*53ee8cc1Swenshuai.xi/* %endif */ 1676*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1677*53ee8cc1Swenshuai.xi/* %endif */ 1678*53ee8cc1Swenshuai.xi{ 1679*53ee8cc1Swenshuai.xi YY_BUFFER_STATE b; 1680*53ee8cc1Swenshuai.xi 1681*53ee8cc1Swenshuai.xi b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); 1682*53ee8cc1Swenshuai.xi if ( ! b ) 1683*53ee8cc1Swenshuai.xi YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); 1684*53ee8cc1Swenshuai.xi 1685*53ee8cc1Swenshuai.xi b->yy_buf_size = size; 1686*53ee8cc1Swenshuai.xi 1687*53ee8cc1Swenshuai.xi /* yy_ch_buf has to be 2 characters longer than the size given because 1688*53ee8cc1Swenshuai.xi * we need to put in 2 end-of-buffer characters. 1689*53ee8cc1Swenshuai.xi */ 1690*53ee8cc1Swenshuai.xi b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); 1691*53ee8cc1Swenshuai.xi if ( ! b->yy_ch_buf ) 1692*53ee8cc1Swenshuai.xi YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); 1693*53ee8cc1Swenshuai.xi 1694*53ee8cc1Swenshuai.xi b->yy_is_our_buffer = 1; 1695*53ee8cc1Swenshuai.xi 1696*53ee8cc1Swenshuai.xi yy_init_buffer(b,file ); 1697*53ee8cc1Swenshuai.xi 1698*53ee8cc1Swenshuai.xi return b; 1699*53ee8cc1Swenshuai.xi} 1700*53ee8cc1Swenshuai.xi 1701*53ee8cc1Swenshuai.xi/** Destroy the buffer. 1702*53ee8cc1Swenshuai.xi * @param b a buffer created with yy_create_buffer() 1703*53ee8cc1Swenshuai.xi * 1704*53ee8cc1Swenshuai.xi */ 1705*53ee8cc1Swenshuai.xi/* %if-c-only */ 1706*53ee8cc1Swenshuai.xi void yy_delete_buffer (YY_BUFFER_STATE b ) 1707*53ee8cc1Swenshuai.xi/* %endif */ 1708*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1709*53ee8cc1Swenshuai.xi/* %endif */ 1710*53ee8cc1Swenshuai.xi{ 1711*53ee8cc1Swenshuai.xi 1712*53ee8cc1Swenshuai.xi if ( ! b ) 1713*53ee8cc1Swenshuai.xi return; 1714*53ee8cc1Swenshuai.xi 1715*53ee8cc1Swenshuai.xi if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ 1716*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; 1717*53ee8cc1Swenshuai.xi 1718*53ee8cc1Swenshuai.xi if ( b->yy_is_our_buffer ) 1719*53ee8cc1Swenshuai.xi yyfree((void *) b->yy_ch_buf ); 1720*53ee8cc1Swenshuai.xi 1721*53ee8cc1Swenshuai.xi yyfree((void *) b ); 1722*53ee8cc1Swenshuai.xi} 1723*53ee8cc1Swenshuai.xi 1724*53ee8cc1Swenshuai.xi/* %if-c-only */ 1725*53ee8cc1Swenshuai.xi 1726*53ee8cc1Swenshuai.xi#ifndef __cplusplus 1727*53ee8cc1Swenshuai.xiextern int isatty (int ); 1728*53ee8cc1Swenshuai.xi#endif /* __cplusplus */ 1729*53ee8cc1Swenshuai.xi 1730*53ee8cc1Swenshuai.xi/* %endif */ 1731*53ee8cc1Swenshuai.xi 1732*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1733*53ee8cc1Swenshuai.xi/* %endif */ 1734*53ee8cc1Swenshuai.xi 1735*53ee8cc1Swenshuai.xi/* Initializes or reinitializes a buffer. 1736*53ee8cc1Swenshuai.xi * This function is sometimes called more than once on the same buffer, 1737*53ee8cc1Swenshuai.xi * such as during a yyrestart() or at EOF. 1738*53ee8cc1Swenshuai.xi */ 1739*53ee8cc1Swenshuai.xi/* %if-c-only */ 1740*53ee8cc1Swenshuai.xi static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) 1741*53ee8cc1Swenshuai.xi/* %endif */ 1742*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1743*53ee8cc1Swenshuai.xi/* %endif */ 1744*53ee8cc1Swenshuai.xi 1745*53ee8cc1Swenshuai.xi{ 1746*53ee8cc1Swenshuai.xi int oerrno = errno; 1747*53ee8cc1Swenshuai.xi 1748*53ee8cc1Swenshuai.xi yy_flush_buffer(b ); 1749*53ee8cc1Swenshuai.xi 1750*53ee8cc1Swenshuai.xi b->yy_input_file = file; 1751*53ee8cc1Swenshuai.xi b->yy_fill_buffer = 1; 1752*53ee8cc1Swenshuai.xi 1753*53ee8cc1Swenshuai.xi /* If b is the current buffer, then yy_init_buffer was _probably_ 1754*53ee8cc1Swenshuai.xi * called from yyrestart() or through yy_get_next_buffer. 1755*53ee8cc1Swenshuai.xi * In that case, we don't want to reset the lineno or column. 1756*53ee8cc1Swenshuai.xi */ 1757*53ee8cc1Swenshuai.xi if (b != YY_CURRENT_BUFFER){ 1758*53ee8cc1Swenshuai.xi b->yy_bs_lineno = 1; 1759*53ee8cc1Swenshuai.xi b->yy_bs_column = 0; 1760*53ee8cc1Swenshuai.xi } 1761*53ee8cc1Swenshuai.xi 1762*53ee8cc1Swenshuai.xi/* %if-c-only */ 1763*53ee8cc1Swenshuai.xi 1764*53ee8cc1Swenshuai.xi b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; 1765*53ee8cc1Swenshuai.xi 1766*53ee8cc1Swenshuai.xi/* %endif */ 1767*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1768*53ee8cc1Swenshuai.xi/* %endif */ 1769*53ee8cc1Swenshuai.xi errno = oerrno; 1770*53ee8cc1Swenshuai.xi} 1771*53ee8cc1Swenshuai.xi 1772*53ee8cc1Swenshuai.xi/** Discard all buffered characters. On the next scan, YY_INPUT will be called. 1773*53ee8cc1Swenshuai.xi * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. 1774*53ee8cc1Swenshuai.xi * 1775*53ee8cc1Swenshuai.xi */ 1776*53ee8cc1Swenshuai.xi/* %if-c-only */ 1777*53ee8cc1Swenshuai.xi void yy_flush_buffer (YY_BUFFER_STATE b ) 1778*53ee8cc1Swenshuai.xi/* %endif */ 1779*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1780*53ee8cc1Swenshuai.xi/* %endif */ 1781*53ee8cc1Swenshuai.xi{ 1782*53ee8cc1Swenshuai.xi if ( ! b ) 1783*53ee8cc1Swenshuai.xi return; 1784*53ee8cc1Swenshuai.xi 1785*53ee8cc1Swenshuai.xi b->yy_n_chars = 0; 1786*53ee8cc1Swenshuai.xi 1787*53ee8cc1Swenshuai.xi /* We always need two end-of-buffer characters. The first causes 1788*53ee8cc1Swenshuai.xi * a transition to the end-of-buffer state. The second causes 1789*53ee8cc1Swenshuai.xi * a jam in that state. 1790*53ee8cc1Swenshuai.xi */ 1791*53ee8cc1Swenshuai.xi b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; 1792*53ee8cc1Swenshuai.xi b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; 1793*53ee8cc1Swenshuai.xi 1794*53ee8cc1Swenshuai.xi b->yy_buf_pos = &b->yy_ch_buf[0]; 1795*53ee8cc1Swenshuai.xi 1796*53ee8cc1Swenshuai.xi b->yy_at_bol = 1; 1797*53ee8cc1Swenshuai.xi b->yy_buffer_status = YY_BUFFER_NEW; 1798*53ee8cc1Swenshuai.xi 1799*53ee8cc1Swenshuai.xi if ( b == YY_CURRENT_BUFFER ) 1800*53ee8cc1Swenshuai.xi yy_load_buffer_state( ); 1801*53ee8cc1Swenshuai.xi} 1802*53ee8cc1Swenshuai.xi 1803*53ee8cc1Swenshuai.xi/* %if-c-or-c++ */ 1804*53ee8cc1Swenshuai.xi/** Pushes the new state onto the stack. The new state becomes 1805*53ee8cc1Swenshuai.xi * the current state. This function will allocate the stack 1806*53ee8cc1Swenshuai.xi * if necessary. 1807*53ee8cc1Swenshuai.xi * @param new_buffer The new state. 1808*53ee8cc1Swenshuai.xi * 1809*53ee8cc1Swenshuai.xi */ 1810*53ee8cc1Swenshuai.xi/* %if-c-only */ 1811*53ee8cc1Swenshuai.xivoid yypush_buffer_state (YY_BUFFER_STATE new_buffer ) 1812*53ee8cc1Swenshuai.xi/* %endif */ 1813*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1814*53ee8cc1Swenshuai.xi/* %endif */ 1815*53ee8cc1Swenshuai.xi{ 1816*53ee8cc1Swenshuai.xi if (new_buffer == NULL) 1817*53ee8cc1Swenshuai.xi return; 1818*53ee8cc1Swenshuai.xi 1819*53ee8cc1Swenshuai.xi yyensure_buffer_stack(); 1820*53ee8cc1Swenshuai.xi 1821*53ee8cc1Swenshuai.xi /* This block is copied from yy_switch_to_buffer. */ 1822*53ee8cc1Swenshuai.xi if ( YY_CURRENT_BUFFER ) 1823*53ee8cc1Swenshuai.xi { 1824*53ee8cc1Swenshuai.xi /* Flush out information for old buffer. */ 1825*53ee8cc1Swenshuai.xi *(yy_c_buf_p) = (yy_hold_char); 1826*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); 1827*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 1828*53ee8cc1Swenshuai.xi } 1829*53ee8cc1Swenshuai.xi 1830*53ee8cc1Swenshuai.xi /* Only push if top exists. Otherwise, replace top. */ 1831*53ee8cc1Swenshuai.xi if (YY_CURRENT_BUFFER) 1832*53ee8cc1Swenshuai.xi (yy_buffer_stack_top)++; 1833*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE = new_buffer; 1834*53ee8cc1Swenshuai.xi 1835*53ee8cc1Swenshuai.xi /* copied from yy_switch_to_buffer. */ 1836*53ee8cc1Swenshuai.xi yy_load_buffer_state( ); 1837*53ee8cc1Swenshuai.xi (yy_did_buffer_switch_on_eof) = 1; 1838*53ee8cc1Swenshuai.xi} 1839*53ee8cc1Swenshuai.xi/* %endif */ 1840*53ee8cc1Swenshuai.xi 1841*53ee8cc1Swenshuai.xi/* %if-c-or-c++ */ 1842*53ee8cc1Swenshuai.xi/** Removes and deletes the top of the stack, if present. 1843*53ee8cc1Swenshuai.xi * The next element becomes the new top. 1844*53ee8cc1Swenshuai.xi * 1845*53ee8cc1Swenshuai.xi */ 1846*53ee8cc1Swenshuai.xi/* %if-c-only */ 1847*53ee8cc1Swenshuai.xivoid yypop_buffer_state (void) 1848*53ee8cc1Swenshuai.xi/* %endif */ 1849*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1850*53ee8cc1Swenshuai.xi/* %endif */ 1851*53ee8cc1Swenshuai.xi{ 1852*53ee8cc1Swenshuai.xi if (!YY_CURRENT_BUFFER) 1853*53ee8cc1Swenshuai.xi return; 1854*53ee8cc1Swenshuai.xi 1855*53ee8cc1Swenshuai.xi yy_delete_buffer(YY_CURRENT_BUFFER ); 1856*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE = NULL; 1857*53ee8cc1Swenshuai.xi if ((yy_buffer_stack_top) > 0) 1858*53ee8cc1Swenshuai.xi --(yy_buffer_stack_top); 1859*53ee8cc1Swenshuai.xi 1860*53ee8cc1Swenshuai.xi if (YY_CURRENT_BUFFER) { 1861*53ee8cc1Swenshuai.xi yy_load_buffer_state( ); 1862*53ee8cc1Swenshuai.xi (yy_did_buffer_switch_on_eof) = 1; 1863*53ee8cc1Swenshuai.xi } 1864*53ee8cc1Swenshuai.xi} 1865*53ee8cc1Swenshuai.xi/* %endif */ 1866*53ee8cc1Swenshuai.xi 1867*53ee8cc1Swenshuai.xi/* %if-c-or-c++ */ 1868*53ee8cc1Swenshuai.xi/* Allocates the stack if it does not exist. 1869*53ee8cc1Swenshuai.xi * Guarantees space for at least one push. 1870*53ee8cc1Swenshuai.xi */ 1871*53ee8cc1Swenshuai.xi/* %if-c-only */ 1872*53ee8cc1Swenshuai.xistatic void yyensure_buffer_stack (void) 1873*53ee8cc1Swenshuai.xi/* %endif */ 1874*53ee8cc1Swenshuai.xi/* %if-c++-only */ 1875*53ee8cc1Swenshuai.xi/* %endif */ 1876*53ee8cc1Swenshuai.xi{ 1877*53ee8cc1Swenshuai.xi int num_to_alloc; 1878*53ee8cc1Swenshuai.xi 1879*53ee8cc1Swenshuai.xi if (!(yy_buffer_stack)) { 1880*53ee8cc1Swenshuai.xi 1881*53ee8cc1Swenshuai.xi /* First allocation is just for 2 elements, since we don't know if this 1882*53ee8cc1Swenshuai.xi * scanner will even need a stack. We use 2 instead of 1 to avoid an 1883*53ee8cc1Swenshuai.xi * immediate realloc on the next call. 1884*53ee8cc1Swenshuai.xi */ 1885*53ee8cc1Swenshuai.xi num_to_alloc = 1; 1886*53ee8cc1Swenshuai.xi (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc 1887*53ee8cc1Swenshuai.xi (num_to_alloc * sizeof(struct yy_buffer_state*) 1888*53ee8cc1Swenshuai.xi ); 1889*53ee8cc1Swenshuai.xi if ( ! (yy_buffer_stack) ) 1890*53ee8cc1Swenshuai.xi YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); 1891*53ee8cc1Swenshuai.xi 1892*53ee8cc1Swenshuai.xi memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); 1893*53ee8cc1Swenshuai.xi 1894*53ee8cc1Swenshuai.xi (yy_buffer_stack_max) = num_to_alloc; 1895*53ee8cc1Swenshuai.xi (yy_buffer_stack_top) = 0; 1896*53ee8cc1Swenshuai.xi return; 1897*53ee8cc1Swenshuai.xi } 1898*53ee8cc1Swenshuai.xi 1899*53ee8cc1Swenshuai.xi if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ 1900*53ee8cc1Swenshuai.xi 1901*53ee8cc1Swenshuai.xi /* Increase the buffer to prepare for a possible push. */ 1902*53ee8cc1Swenshuai.xi int grow_size = 8 /* arbitrary grow size */; 1903*53ee8cc1Swenshuai.xi 1904*53ee8cc1Swenshuai.xi num_to_alloc = (yy_buffer_stack_max) + grow_size; 1905*53ee8cc1Swenshuai.xi (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc 1906*53ee8cc1Swenshuai.xi ((yy_buffer_stack), 1907*53ee8cc1Swenshuai.xi num_to_alloc * sizeof(struct yy_buffer_state*) 1908*53ee8cc1Swenshuai.xi ); 1909*53ee8cc1Swenshuai.xi if ( ! (yy_buffer_stack) ) 1910*53ee8cc1Swenshuai.xi YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); 1911*53ee8cc1Swenshuai.xi 1912*53ee8cc1Swenshuai.xi /* zero only the new slots.*/ 1913*53ee8cc1Swenshuai.xi memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); 1914*53ee8cc1Swenshuai.xi (yy_buffer_stack_max) = num_to_alloc; 1915*53ee8cc1Swenshuai.xi } 1916*53ee8cc1Swenshuai.xi} 1917*53ee8cc1Swenshuai.xi/* %endif */ 1918*53ee8cc1Swenshuai.xi 1919*53ee8cc1Swenshuai.xi/* %if-c-only */ 1920*53ee8cc1Swenshuai.xi/** Setup the input buffer state to scan directly from a user-specified character buffer. 1921*53ee8cc1Swenshuai.xi * @param base the character buffer 1922*53ee8cc1Swenshuai.xi * @param size the size in bytes of the character buffer 1923*53ee8cc1Swenshuai.xi * 1924*53ee8cc1Swenshuai.xi * @return the newly allocated buffer state object. 1925*53ee8cc1Swenshuai.xi */ 1926*53ee8cc1Swenshuai.xiYY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) 1927*53ee8cc1Swenshuai.xi{ 1928*53ee8cc1Swenshuai.xi YY_BUFFER_STATE b; 1929*53ee8cc1Swenshuai.xi 1930*53ee8cc1Swenshuai.xi if ( size < 2 || 1931*53ee8cc1Swenshuai.xi base[size-2] != YY_END_OF_BUFFER_CHAR || 1932*53ee8cc1Swenshuai.xi base[size-1] != YY_END_OF_BUFFER_CHAR ) 1933*53ee8cc1Swenshuai.xi /* They forgot to leave room for the EOB's. */ 1934*53ee8cc1Swenshuai.xi return 0; 1935*53ee8cc1Swenshuai.xi 1936*53ee8cc1Swenshuai.xi b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); 1937*53ee8cc1Swenshuai.xi if ( ! b ) 1938*53ee8cc1Swenshuai.xi YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); 1939*53ee8cc1Swenshuai.xi 1940*53ee8cc1Swenshuai.xi b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ 1941*53ee8cc1Swenshuai.xi b->yy_buf_pos = b->yy_ch_buf = base; 1942*53ee8cc1Swenshuai.xi b->yy_is_our_buffer = 0; 1943*53ee8cc1Swenshuai.xi b->yy_input_file = 0; 1944*53ee8cc1Swenshuai.xi b->yy_n_chars = b->yy_buf_size; 1945*53ee8cc1Swenshuai.xi b->yy_is_interactive = 0; 1946*53ee8cc1Swenshuai.xi b->yy_at_bol = 1; 1947*53ee8cc1Swenshuai.xi b->yy_fill_buffer = 0; 1948*53ee8cc1Swenshuai.xi b->yy_buffer_status = YY_BUFFER_NEW; 1949*53ee8cc1Swenshuai.xi 1950*53ee8cc1Swenshuai.xi yy_switch_to_buffer(b ); 1951*53ee8cc1Swenshuai.xi 1952*53ee8cc1Swenshuai.xi return b; 1953*53ee8cc1Swenshuai.xi} 1954*53ee8cc1Swenshuai.xi/* %endif */ 1955*53ee8cc1Swenshuai.xi 1956*53ee8cc1Swenshuai.xi/* %if-c-only */ 1957*53ee8cc1Swenshuai.xi/** Setup the input buffer state to scan a string. The next call to yylex() will 1958*53ee8cc1Swenshuai.xi * scan from a @e copy of @a str. 1959*53ee8cc1Swenshuai.xi * @param yystr a NUL-terminated string to scan 1960*53ee8cc1Swenshuai.xi * 1961*53ee8cc1Swenshuai.xi * @return the newly allocated buffer state object. 1962*53ee8cc1Swenshuai.xi * @note If you want to scan bytes that may contain NUL values, then use 1963*53ee8cc1Swenshuai.xi * yy_scan_bytes() instead. 1964*53ee8cc1Swenshuai.xi */ 1965*53ee8cc1Swenshuai.xiYY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) 1966*53ee8cc1Swenshuai.xi{ 1967*53ee8cc1Swenshuai.xi 1968*53ee8cc1Swenshuai.xi return yy_scan_bytes(yystr,strlen(yystr) ); 1969*53ee8cc1Swenshuai.xi} 1970*53ee8cc1Swenshuai.xi/* %endif */ 1971*53ee8cc1Swenshuai.xi 1972*53ee8cc1Swenshuai.xi/* %if-c-only */ 1973*53ee8cc1Swenshuai.xi/** Setup the input buffer state to scan the given bytes. The next call to yylex() will 1974*53ee8cc1Swenshuai.xi * scan from a @e copy of @a bytes. 1975*53ee8cc1Swenshuai.xi * @param bytes the byte buffer to scan 1976*53ee8cc1Swenshuai.xi * @param len the number of bytes in the buffer pointed to by @a bytes. 1977*53ee8cc1Swenshuai.xi * 1978*53ee8cc1Swenshuai.xi * @return the newly allocated buffer state object. 1979*53ee8cc1Swenshuai.xi */ 1980*53ee8cc1Swenshuai.xiYY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) 1981*53ee8cc1Swenshuai.xi{ 1982*53ee8cc1Swenshuai.xi YY_BUFFER_STATE b; 1983*53ee8cc1Swenshuai.xi char *buf; 1984*53ee8cc1Swenshuai.xi yy_size_t n; 1985*53ee8cc1Swenshuai.xi int i; 1986*53ee8cc1Swenshuai.xi 1987*53ee8cc1Swenshuai.xi /* Get memory for full buffer, including space for trailing EOB's. */ 1988*53ee8cc1Swenshuai.xi n = _yybytes_len + 2; 1989*53ee8cc1Swenshuai.xi buf = (char *) yyalloc(n ); 1990*53ee8cc1Swenshuai.xi if ( ! buf ) 1991*53ee8cc1Swenshuai.xi YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); 1992*53ee8cc1Swenshuai.xi 1993*53ee8cc1Swenshuai.xi for ( i = 0; i < _yybytes_len; ++i ) 1994*53ee8cc1Swenshuai.xi buf[i] = yybytes[i]; 1995*53ee8cc1Swenshuai.xi 1996*53ee8cc1Swenshuai.xi buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; 1997*53ee8cc1Swenshuai.xi 1998*53ee8cc1Swenshuai.xi b = yy_scan_buffer(buf,n ); 1999*53ee8cc1Swenshuai.xi if ( ! b ) 2000*53ee8cc1Swenshuai.xi YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); 2001*53ee8cc1Swenshuai.xi 2002*53ee8cc1Swenshuai.xi /* It's okay to grow etc. this buffer, and we should throw it 2003*53ee8cc1Swenshuai.xi * away when we're done. 2004*53ee8cc1Swenshuai.xi */ 2005*53ee8cc1Swenshuai.xi b->yy_is_our_buffer = 1; 2006*53ee8cc1Swenshuai.xi 2007*53ee8cc1Swenshuai.xi return b; 2008*53ee8cc1Swenshuai.xi} 2009*53ee8cc1Swenshuai.xi/* %endif */ 2010*53ee8cc1Swenshuai.xi 2011*53ee8cc1Swenshuai.xi#ifndef YY_EXIT_FAILURE 2012*53ee8cc1Swenshuai.xi#define YY_EXIT_FAILURE 2 2013*53ee8cc1Swenshuai.xi#endif 2014*53ee8cc1Swenshuai.xi 2015*53ee8cc1Swenshuai.xi/* %if-c-only */ 2016*53ee8cc1Swenshuai.xistatic void yy_fatal_error (yyconst char* msg ) 2017*53ee8cc1Swenshuai.xi{ 2018*53ee8cc1Swenshuai.xi (void) fprintf( stderr, "%s\n", msg ); 2019*53ee8cc1Swenshuai.xi exit( YY_EXIT_FAILURE ); 2020*53ee8cc1Swenshuai.xi} 2021*53ee8cc1Swenshuai.xi/* %endif */ 2022*53ee8cc1Swenshuai.xi/* %if-c++-only */ 2023*53ee8cc1Swenshuai.xi/* %endif */ 2024*53ee8cc1Swenshuai.xi 2025*53ee8cc1Swenshuai.xi/* Redefine yyless() so it works in section 3 code. */ 2026*53ee8cc1Swenshuai.xi 2027*53ee8cc1Swenshuai.xi#undef yyless 2028*53ee8cc1Swenshuai.xi#define yyless(n) \ 2029*53ee8cc1Swenshuai.xi do \ 2030*53ee8cc1Swenshuai.xi { \ 2031*53ee8cc1Swenshuai.xi /* Undo effects of setting up yytext. */ \ 2032*53ee8cc1Swenshuai.xi int yyless_macro_arg = (n); \ 2033*53ee8cc1Swenshuai.xi YY_LESS_LINENO(yyless_macro_arg);\ 2034*53ee8cc1Swenshuai.xi yytext[yyleng] = (yy_hold_char); \ 2035*53ee8cc1Swenshuai.xi (yy_c_buf_p) = yytext + yyless_macro_arg; \ 2036*53ee8cc1Swenshuai.xi (yy_hold_char) = *(yy_c_buf_p); \ 2037*53ee8cc1Swenshuai.xi *(yy_c_buf_p) = '\0'; \ 2038*53ee8cc1Swenshuai.xi yyleng = yyless_macro_arg; \ 2039*53ee8cc1Swenshuai.xi } \ 2040*53ee8cc1Swenshuai.xi while ( 0 ) 2041*53ee8cc1Swenshuai.xi 2042*53ee8cc1Swenshuai.xi/* Accessor methods (get/set functions) to struct members. */ 2043*53ee8cc1Swenshuai.xi 2044*53ee8cc1Swenshuai.xi/* %if-c-only */ 2045*53ee8cc1Swenshuai.xi/* %if-reentrant */ 2046*53ee8cc1Swenshuai.xi/* %endif */ 2047*53ee8cc1Swenshuai.xi 2048*53ee8cc1Swenshuai.xi/** Get the current line number. 2049*53ee8cc1Swenshuai.xi * 2050*53ee8cc1Swenshuai.xi */ 2051*53ee8cc1Swenshuai.xiint yyget_lineno (void) 2052*53ee8cc1Swenshuai.xi{ 2053*53ee8cc1Swenshuai.xi 2054*53ee8cc1Swenshuai.xi return yylineno; 2055*53ee8cc1Swenshuai.xi} 2056*53ee8cc1Swenshuai.xi 2057*53ee8cc1Swenshuai.xi/** Get the input stream. 2058*53ee8cc1Swenshuai.xi * 2059*53ee8cc1Swenshuai.xi */ 2060*53ee8cc1Swenshuai.xiFILE *yyget_in (void) 2061*53ee8cc1Swenshuai.xi{ 2062*53ee8cc1Swenshuai.xi return yyin; 2063*53ee8cc1Swenshuai.xi} 2064*53ee8cc1Swenshuai.xi 2065*53ee8cc1Swenshuai.xi/** Get the output stream. 2066*53ee8cc1Swenshuai.xi * 2067*53ee8cc1Swenshuai.xi */ 2068*53ee8cc1Swenshuai.xiFILE *yyget_out (void) 2069*53ee8cc1Swenshuai.xi{ 2070*53ee8cc1Swenshuai.xi return yyout; 2071*53ee8cc1Swenshuai.xi} 2072*53ee8cc1Swenshuai.xi 2073*53ee8cc1Swenshuai.xi/** Get the length of the current token. 2074*53ee8cc1Swenshuai.xi * 2075*53ee8cc1Swenshuai.xi */ 2076*53ee8cc1Swenshuai.xiint yyget_leng (void) 2077*53ee8cc1Swenshuai.xi{ 2078*53ee8cc1Swenshuai.xi return yyleng; 2079*53ee8cc1Swenshuai.xi} 2080*53ee8cc1Swenshuai.xi 2081*53ee8cc1Swenshuai.xi/** Get the current token. 2082*53ee8cc1Swenshuai.xi * 2083*53ee8cc1Swenshuai.xi */ 2084*53ee8cc1Swenshuai.xi 2085*53ee8cc1Swenshuai.xichar *yyget_text (void) 2086*53ee8cc1Swenshuai.xi{ 2087*53ee8cc1Swenshuai.xi return yytext; 2088*53ee8cc1Swenshuai.xi} 2089*53ee8cc1Swenshuai.xi 2090*53ee8cc1Swenshuai.xi/* %if-reentrant */ 2091*53ee8cc1Swenshuai.xi/* %endif */ 2092*53ee8cc1Swenshuai.xi 2093*53ee8cc1Swenshuai.xi/** Set the current line number. 2094*53ee8cc1Swenshuai.xi * @param line_number 2095*53ee8cc1Swenshuai.xi * 2096*53ee8cc1Swenshuai.xi */ 2097*53ee8cc1Swenshuai.xivoid yyset_lineno (int line_number ) 2098*53ee8cc1Swenshuai.xi{ 2099*53ee8cc1Swenshuai.xi 2100*53ee8cc1Swenshuai.xi yylineno = line_number; 2101*53ee8cc1Swenshuai.xi} 2102*53ee8cc1Swenshuai.xi 2103*53ee8cc1Swenshuai.xi/** Set the input stream. This does not discard the current 2104*53ee8cc1Swenshuai.xi * input buffer. 2105*53ee8cc1Swenshuai.xi * @param in_str A readable stream. 2106*53ee8cc1Swenshuai.xi * 2107*53ee8cc1Swenshuai.xi * @see yy_switch_to_buffer 2108*53ee8cc1Swenshuai.xi */ 2109*53ee8cc1Swenshuai.xivoid yyset_in (FILE * in_str ) 2110*53ee8cc1Swenshuai.xi{ 2111*53ee8cc1Swenshuai.xi yyin = in_str ; 2112*53ee8cc1Swenshuai.xi} 2113*53ee8cc1Swenshuai.xi 2114*53ee8cc1Swenshuai.xivoid yyset_out (FILE * out_str ) 2115*53ee8cc1Swenshuai.xi{ 2116*53ee8cc1Swenshuai.xi yyout = out_str ; 2117*53ee8cc1Swenshuai.xi} 2118*53ee8cc1Swenshuai.xi 2119*53ee8cc1Swenshuai.xiint yyget_debug (void) 2120*53ee8cc1Swenshuai.xi{ 2121*53ee8cc1Swenshuai.xi return yy_flex_debug; 2122*53ee8cc1Swenshuai.xi} 2123*53ee8cc1Swenshuai.xi 2124*53ee8cc1Swenshuai.xivoid yyset_debug (int bdebug ) 2125*53ee8cc1Swenshuai.xi{ 2126*53ee8cc1Swenshuai.xi yy_flex_debug = bdebug ; 2127*53ee8cc1Swenshuai.xi} 2128*53ee8cc1Swenshuai.xi 2129*53ee8cc1Swenshuai.xi/* %endif */ 2130*53ee8cc1Swenshuai.xi 2131*53ee8cc1Swenshuai.xi/* %if-reentrant */ 2132*53ee8cc1Swenshuai.xi/* %if-bison-bridge */ 2133*53ee8cc1Swenshuai.xi/* %endif */ 2134*53ee8cc1Swenshuai.xi/* %endif if-c-only */ 2135*53ee8cc1Swenshuai.xi 2136*53ee8cc1Swenshuai.xi/* %if-c-only */ 2137*53ee8cc1Swenshuai.xistatic int yy_init_globals (void) 2138*53ee8cc1Swenshuai.xi{ 2139*53ee8cc1Swenshuai.xi /* Initialization is the same as for the non-reentrant scanner. 2140*53ee8cc1Swenshuai.xi * This function is called from yylex_destroy(), so don't allocate here. 2141*53ee8cc1Swenshuai.xi */ 2142*53ee8cc1Swenshuai.xi 2143*53ee8cc1Swenshuai.xi (yy_buffer_stack) = 0; 2144*53ee8cc1Swenshuai.xi (yy_buffer_stack_top) = 0; 2145*53ee8cc1Swenshuai.xi (yy_buffer_stack_max) = 0; 2146*53ee8cc1Swenshuai.xi (yy_c_buf_p) = (char *) 0; 2147*53ee8cc1Swenshuai.xi (yy_init) = 0; 2148*53ee8cc1Swenshuai.xi (yy_start) = 0; 2149*53ee8cc1Swenshuai.xi 2150*53ee8cc1Swenshuai.xi/* Defined in main.c */ 2151*53ee8cc1Swenshuai.xi#ifdef YY_STDINIT 2152*53ee8cc1Swenshuai.xi yyin = stdin; 2153*53ee8cc1Swenshuai.xi yyout = stdout; 2154*53ee8cc1Swenshuai.xi#else 2155*53ee8cc1Swenshuai.xi yyin = (FILE *) 0; 2156*53ee8cc1Swenshuai.xi yyout = (FILE *) 0; 2157*53ee8cc1Swenshuai.xi#endif 2158*53ee8cc1Swenshuai.xi 2159*53ee8cc1Swenshuai.xi /* For future reference: Set errno on error, since we are called by 2160*53ee8cc1Swenshuai.xi * yylex_init() 2161*53ee8cc1Swenshuai.xi */ 2162*53ee8cc1Swenshuai.xi return 0; 2163*53ee8cc1Swenshuai.xi} 2164*53ee8cc1Swenshuai.xi/* %endif */ 2165*53ee8cc1Swenshuai.xi 2166*53ee8cc1Swenshuai.xi/* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */ 2167*53ee8cc1Swenshuai.xi/* yylex_destroy is for both reentrant and non-reentrant scanners. */ 2168*53ee8cc1Swenshuai.xiint yylex_destroy (void) 2169*53ee8cc1Swenshuai.xi{ 2170*53ee8cc1Swenshuai.xi 2171*53ee8cc1Swenshuai.xi /* Pop the buffer stack, destroying each element. */ 2172*53ee8cc1Swenshuai.xi while(YY_CURRENT_BUFFER){ 2173*53ee8cc1Swenshuai.xi yy_delete_buffer(YY_CURRENT_BUFFER ); 2174*53ee8cc1Swenshuai.xi YY_CURRENT_BUFFER_LVALUE = NULL; 2175*53ee8cc1Swenshuai.xi yypop_buffer_state(); 2176*53ee8cc1Swenshuai.xi } 2177*53ee8cc1Swenshuai.xi 2178*53ee8cc1Swenshuai.xi /* Destroy the stack itself. */ 2179*53ee8cc1Swenshuai.xi yyfree((yy_buffer_stack) ); 2180*53ee8cc1Swenshuai.xi (yy_buffer_stack) = NULL; 2181*53ee8cc1Swenshuai.xi 2182*53ee8cc1Swenshuai.xi /* Reset the globals. This is important in a non-reentrant scanner so the next time 2183*53ee8cc1Swenshuai.xi * yylex() is called, initialization will occur. */ 2184*53ee8cc1Swenshuai.xi yy_init_globals( ); 2185*53ee8cc1Swenshuai.xi 2186*53ee8cc1Swenshuai.xi/* %if-reentrant */ 2187*53ee8cc1Swenshuai.xi/* %endif */ 2188*53ee8cc1Swenshuai.xi return 0; 2189*53ee8cc1Swenshuai.xi} 2190*53ee8cc1Swenshuai.xi/* %endif */ 2191*53ee8cc1Swenshuai.xi 2192*53ee8cc1Swenshuai.xi/* 2193*53ee8cc1Swenshuai.xi * Internal utility routines. 2194*53ee8cc1Swenshuai.xi */ 2195*53ee8cc1Swenshuai.xi 2196*53ee8cc1Swenshuai.xi#ifndef yytext_ptr 2197*53ee8cc1Swenshuai.xistatic void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) 2198*53ee8cc1Swenshuai.xi{ 2199*53ee8cc1Swenshuai.xi register int i; 2200*53ee8cc1Swenshuai.xi for ( i = 0; i < n; ++i ) 2201*53ee8cc1Swenshuai.xi s1[i] = s2[i]; 2202*53ee8cc1Swenshuai.xi} 2203*53ee8cc1Swenshuai.xi#endif 2204*53ee8cc1Swenshuai.xi 2205*53ee8cc1Swenshuai.xi#ifdef YY_NEED_STRLEN 2206*53ee8cc1Swenshuai.xistatic int yy_flex_strlen (yyconst char * s ) 2207*53ee8cc1Swenshuai.xi{ 2208*53ee8cc1Swenshuai.xi register int n; 2209*53ee8cc1Swenshuai.xi for ( n = 0; s[n]; ++n ) 2210*53ee8cc1Swenshuai.xi ; 2211*53ee8cc1Swenshuai.xi 2212*53ee8cc1Swenshuai.xi return n; 2213*53ee8cc1Swenshuai.xi} 2214*53ee8cc1Swenshuai.xi#endif 2215*53ee8cc1Swenshuai.xi 2216*53ee8cc1Swenshuai.xivoid *yyalloc (yy_size_t size ) 2217*53ee8cc1Swenshuai.xi{ 2218*53ee8cc1Swenshuai.xi return (void *) malloc( size ); 2219*53ee8cc1Swenshuai.xi} 2220*53ee8cc1Swenshuai.xi 2221*53ee8cc1Swenshuai.xivoid *yyrealloc (void * ptr, yy_size_t size ) 2222*53ee8cc1Swenshuai.xi{ 2223*53ee8cc1Swenshuai.xi /* The cast to (char *) in the following accommodates both 2224*53ee8cc1Swenshuai.xi * implementations that use char* generic pointers, and those 2225*53ee8cc1Swenshuai.xi * that use void* generic pointers. It works with the latter 2226*53ee8cc1Swenshuai.xi * because both ANSI C and C++ allow castless assignment from 2227*53ee8cc1Swenshuai.xi * any pointer type to void*, and deal with argument conversions 2228*53ee8cc1Swenshuai.xi * as though doing an assignment. 2229*53ee8cc1Swenshuai.xi */ 2230*53ee8cc1Swenshuai.xi return (void *) realloc( (char *) ptr, size ); 2231*53ee8cc1Swenshuai.xi} 2232*53ee8cc1Swenshuai.xi 2233*53ee8cc1Swenshuai.xivoid yyfree (void * ptr ) 2234*53ee8cc1Swenshuai.xi{ 2235*53ee8cc1Swenshuai.xi free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ 2236*53ee8cc1Swenshuai.xi} 2237*53ee8cc1Swenshuai.xi 2238*53ee8cc1Swenshuai.xi/* %if-tables-serialization definitions */ 2239*53ee8cc1Swenshuai.xi/* %define-yytables The name for this specific scanner's tables. */ 2240*53ee8cc1Swenshuai.xi#define YYTABLES_NAME "yytables" 2241*53ee8cc1Swenshuai.xi/* %endif */ 2242*53ee8cc1Swenshuai.xi 2243*53ee8cc1Swenshuai.xi/* %ok-for-header */ 2244*53ee8cc1Swenshuai.xi 2245*53ee8cc1Swenshuai.xi#line 93 "scripts/genksyms/lex.l" 2246*53ee8cc1Swenshuai.xi 2247*53ee8cc1Swenshuai.xi 2248*53ee8cc1Swenshuai.xi 2249*53ee8cc1Swenshuai.xi/* Bring in the keyword recognizer. */ 2250*53ee8cc1Swenshuai.xi 2251*53ee8cc1Swenshuai.xi#include "keywords.c" 2252*53ee8cc1Swenshuai.xi 2253*53ee8cc1Swenshuai.xi 2254*53ee8cc1Swenshuai.xi/* Macros to append to our phrase collection list. */ 2255*53ee8cc1Swenshuai.xi 2256*53ee8cc1Swenshuai.xi/* 2257*53ee8cc1Swenshuai.xi * We mark any token, that that equals to a known enumerator, as 2258*53ee8cc1Swenshuai.xi * SYM_ENUM_CONST. The parser will change this for struct and union tags later, 2259*53ee8cc1Swenshuai.xi * the only problem is struct and union members: 2260*53ee8cc1Swenshuai.xi * enum e { a, b }; struct s { int a, b; } 2261*53ee8cc1Swenshuai.xi * but in this case, the only effect will be, that the ABI checksums become 2262*53ee8cc1Swenshuai.xi * more volatile, which is acceptable. Also, such collisions are quite rare, 2263*53ee8cc1Swenshuai.xi * so far it was only observed in include/linux/telephony.h. 2264*53ee8cc1Swenshuai.xi */ 2265*53ee8cc1Swenshuai.xi#define _APP(T,L) do { \ 2266*53ee8cc1Swenshuai.xi cur_node = next_node; \ 2267*53ee8cc1Swenshuai.xi next_node = xmalloc(sizeof(*next_node)); \ 2268*53ee8cc1Swenshuai.xi next_node->next = cur_node; \ 2269*53ee8cc1Swenshuai.xi cur_node->string = memcpy(xmalloc(L+1), T, L+1); \ 2270*53ee8cc1Swenshuai.xi cur_node->tag = \ 2271*53ee8cc1Swenshuai.xi find_symbol(cur_node->string, SYM_ENUM_CONST, 1)?\ 2272*53ee8cc1Swenshuai.xi SYM_ENUM_CONST : SYM_NORMAL ; \ 2273*53ee8cc1Swenshuai.xi } while (0) 2274*53ee8cc1Swenshuai.xi 2275*53ee8cc1Swenshuai.xi#define APP _APP(yytext, yyleng) 2276*53ee8cc1Swenshuai.xi 2277*53ee8cc1Swenshuai.xi 2278*53ee8cc1Swenshuai.xi/* The second stage lexer. Here we incorporate knowledge of the state 2279*53ee8cc1Swenshuai.xi of the parser to tailor the tokens that are returned. */ 2280*53ee8cc1Swenshuai.xi 2281*53ee8cc1Swenshuai.xiint 2282*53ee8cc1Swenshuai.xiyylex(void) 2283*53ee8cc1Swenshuai.xi{ 2284*53ee8cc1Swenshuai.xi static enum { 2285*53ee8cc1Swenshuai.xi ST_NOTSTARTED, ST_NORMAL, ST_ATTRIBUTE, ST_ASM, ST_BRACKET, ST_BRACE, 2286*53ee8cc1Swenshuai.xi ST_EXPRESSION, ST_TABLE_1, ST_TABLE_2, ST_TABLE_3, ST_TABLE_4, 2287*53ee8cc1Swenshuai.xi ST_TABLE_5, ST_TABLE_6 2288*53ee8cc1Swenshuai.xi } lexstate = ST_NOTSTARTED; 2289*53ee8cc1Swenshuai.xi 2290*53ee8cc1Swenshuai.xi static int suppress_type_lookup, dont_want_brace_phrase; 2291*53ee8cc1Swenshuai.xi static struct string_list *next_node; 2292*53ee8cc1Swenshuai.xi 2293*53ee8cc1Swenshuai.xi int token, count = 0; 2294*53ee8cc1Swenshuai.xi struct string_list *cur_node; 2295*53ee8cc1Swenshuai.xi 2296*53ee8cc1Swenshuai.xi if (lexstate == ST_NOTSTARTED) 2297*53ee8cc1Swenshuai.xi { 2298*53ee8cc1Swenshuai.xi next_node = xmalloc(sizeof(*next_node)); 2299*53ee8cc1Swenshuai.xi next_node->next = NULL; 2300*53ee8cc1Swenshuai.xi lexstate = ST_NORMAL; 2301*53ee8cc1Swenshuai.xi } 2302*53ee8cc1Swenshuai.xi 2303*53ee8cc1Swenshuai.xirepeat: 2304*53ee8cc1Swenshuai.xi token = yylex1(); 2305*53ee8cc1Swenshuai.xi 2306*53ee8cc1Swenshuai.xi if (token == 0) 2307*53ee8cc1Swenshuai.xi return 0; 2308*53ee8cc1Swenshuai.xi else if (token == FILENAME) 2309*53ee8cc1Swenshuai.xi { 2310*53ee8cc1Swenshuai.xi char *file, *e; 2311*53ee8cc1Swenshuai.xi 2312*53ee8cc1Swenshuai.xi /* Save the filename and line number for later error messages. */ 2313*53ee8cc1Swenshuai.xi 2314*53ee8cc1Swenshuai.xi if (cur_filename) 2315*53ee8cc1Swenshuai.xi free(cur_filename); 2316*53ee8cc1Swenshuai.xi 2317*53ee8cc1Swenshuai.xi file = strchr(yytext, '\"')+1; 2318*53ee8cc1Swenshuai.xi e = strchr(file, '\"'); 2319*53ee8cc1Swenshuai.xi *e = '\0'; 2320*53ee8cc1Swenshuai.xi cur_filename = memcpy(xmalloc(e-file+1), file, e-file+1); 2321*53ee8cc1Swenshuai.xi cur_line = atoi(yytext+2); 2322*53ee8cc1Swenshuai.xi 2323*53ee8cc1Swenshuai.xi goto repeat; 2324*53ee8cc1Swenshuai.xi } 2325*53ee8cc1Swenshuai.xi 2326*53ee8cc1Swenshuai.xi switch (lexstate) 2327*53ee8cc1Swenshuai.xi { 2328*53ee8cc1Swenshuai.xi case ST_NORMAL: 2329*53ee8cc1Swenshuai.xi switch (token) 2330*53ee8cc1Swenshuai.xi { 2331*53ee8cc1Swenshuai.xi case IDENT: 2332*53ee8cc1Swenshuai.xi APP; 2333*53ee8cc1Swenshuai.xi { 2334*53ee8cc1Swenshuai.xi const struct resword *r = is_reserved_word(yytext, yyleng); 2335*53ee8cc1Swenshuai.xi if (r) 2336*53ee8cc1Swenshuai.xi { 2337*53ee8cc1Swenshuai.xi switch (token = r->token) 2338*53ee8cc1Swenshuai.xi { 2339*53ee8cc1Swenshuai.xi case ATTRIBUTE_KEYW: 2340*53ee8cc1Swenshuai.xi lexstate = ST_ATTRIBUTE; 2341*53ee8cc1Swenshuai.xi count = 0; 2342*53ee8cc1Swenshuai.xi goto repeat; 2343*53ee8cc1Swenshuai.xi case ASM_KEYW: 2344*53ee8cc1Swenshuai.xi lexstate = ST_ASM; 2345*53ee8cc1Swenshuai.xi count = 0; 2346*53ee8cc1Swenshuai.xi goto repeat; 2347*53ee8cc1Swenshuai.xi 2348*53ee8cc1Swenshuai.xi case STRUCT_KEYW: 2349*53ee8cc1Swenshuai.xi case UNION_KEYW: 2350*53ee8cc1Swenshuai.xi case ENUM_KEYW: 2351*53ee8cc1Swenshuai.xi dont_want_brace_phrase = 3; 2352*53ee8cc1Swenshuai.xi suppress_type_lookup = 2; 2353*53ee8cc1Swenshuai.xi goto fini; 2354*53ee8cc1Swenshuai.xi 2355*53ee8cc1Swenshuai.xi case EXPORT_SYMBOL_KEYW: 2356*53ee8cc1Swenshuai.xi goto fini; 2357*53ee8cc1Swenshuai.xi } 2358*53ee8cc1Swenshuai.xi } 2359*53ee8cc1Swenshuai.xi if (!suppress_type_lookup) 2360*53ee8cc1Swenshuai.xi { 2361*53ee8cc1Swenshuai.xi if (find_symbol(yytext, SYM_TYPEDEF, 1)) 2362*53ee8cc1Swenshuai.xi token = TYPE; 2363*53ee8cc1Swenshuai.xi } 2364*53ee8cc1Swenshuai.xi } 2365*53ee8cc1Swenshuai.xi break; 2366*53ee8cc1Swenshuai.xi 2367*53ee8cc1Swenshuai.xi case '[': 2368*53ee8cc1Swenshuai.xi APP; 2369*53ee8cc1Swenshuai.xi lexstate = ST_BRACKET; 2370*53ee8cc1Swenshuai.xi count = 1; 2371*53ee8cc1Swenshuai.xi goto repeat; 2372*53ee8cc1Swenshuai.xi 2373*53ee8cc1Swenshuai.xi case '{': 2374*53ee8cc1Swenshuai.xi APP; 2375*53ee8cc1Swenshuai.xi if (dont_want_brace_phrase) 2376*53ee8cc1Swenshuai.xi break; 2377*53ee8cc1Swenshuai.xi lexstate = ST_BRACE; 2378*53ee8cc1Swenshuai.xi count = 1; 2379*53ee8cc1Swenshuai.xi goto repeat; 2380*53ee8cc1Swenshuai.xi 2381*53ee8cc1Swenshuai.xi case '=': case ':': 2382*53ee8cc1Swenshuai.xi APP; 2383*53ee8cc1Swenshuai.xi lexstate = ST_EXPRESSION; 2384*53ee8cc1Swenshuai.xi break; 2385*53ee8cc1Swenshuai.xi 2386*53ee8cc1Swenshuai.xi case DOTS: 2387*53ee8cc1Swenshuai.xi default: 2388*53ee8cc1Swenshuai.xi APP; 2389*53ee8cc1Swenshuai.xi break; 2390*53ee8cc1Swenshuai.xi } 2391*53ee8cc1Swenshuai.xi break; 2392*53ee8cc1Swenshuai.xi 2393*53ee8cc1Swenshuai.xi case ST_ATTRIBUTE: 2394*53ee8cc1Swenshuai.xi APP; 2395*53ee8cc1Swenshuai.xi switch (token) 2396*53ee8cc1Swenshuai.xi { 2397*53ee8cc1Swenshuai.xi case '(': 2398*53ee8cc1Swenshuai.xi ++count; 2399*53ee8cc1Swenshuai.xi goto repeat; 2400*53ee8cc1Swenshuai.xi case ')': 2401*53ee8cc1Swenshuai.xi if (--count == 0) 2402*53ee8cc1Swenshuai.xi { 2403*53ee8cc1Swenshuai.xi lexstate = ST_NORMAL; 2404*53ee8cc1Swenshuai.xi token = ATTRIBUTE_PHRASE; 2405*53ee8cc1Swenshuai.xi break; 2406*53ee8cc1Swenshuai.xi } 2407*53ee8cc1Swenshuai.xi goto repeat; 2408*53ee8cc1Swenshuai.xi default: 2409*53ee8cc1Swenshuai.xi goto repeat; 2410*53ee8cc1Swenshuai.xi } 2411*53ee8cc1Swenshuai.xi break; 2412*53ee8cc1Swenshuai.xi 2413*53ee8cc1Swenshuai.xi case ST_ASM: 2414*53ee8cc1Swenshuai.xi APP; 2415*53ee8cc1Swenshuai.xi switch (token) 2416*53ee8cc1Swenshuai.xi { 2417*53ee8cc1Swenshuai.xi case '(': 2418*53ee8cc1Swenshuai.xi ++count; 2419*53ee8cc1Swenshuai.xi goto repeat; 2420*53ee8cc1Swenshuai.xi case ')': 2421*53ee8cc1Swenshuai.xi if (--count == 0) 2422*53ee8cc1Swenshuai.xi { 2423*53ee8cc1Swenshuai.xi lexstate = ST_NORMAL; 2424*53ee8cc1Swenshuai.xi token = ASM_PHRASE; 2425*53ee8cc1Swenshuai.xi break; 2426*53ee8cc1Swenshuai.xi } 2427*53ee8cc1Swenshuai.xi goto repeat; 2428*53ee8cc1Swenshuai.xi default: 2429*53ee8cc1Swenshuai.xi goto repeat; 2430*53ee8cc1Swenshuai.xi } 2431*53ee8cc1Swenshuai.xi break; 2432*53ee8cc1Swenshuai.xi 2433*53ee8cc1Swenshuai.xi case ST_BRACKET: 2434*53ee8cc1Swenshuai.xi APP; 2435*53ee8cc1Swenshuai.xi switch (token) 2436*53ee8cc1Swenshuai.xi { 2437*53ee8cc1Swenshuai.xi case '[': 2438*53ee8cc1Swenshuai.xi ++count; 2439*53ee8cc1Swenshuai.xi goto repeat; 2440*53ee8cc1Swenshuai.xi case ']': 2441*53ee8cc1Swenshuai.xi if (--count == 0) 2442*53ee8cc1Swenshuai.xi { 2443*53ee8cc1Swenshuai.xi lexstate = ST_NORMAL; 2444*53ee8cc1Swenshuai.xi token = BRACKET_PHRASE; 2445*53ee8cc1Swenshuai.xi break; 2446*53ee8cc1Swenshuai.xi } 2447*53ee8cc1Swenshuai.xi goto repeat; 2448*53ee8cc1Swenshuai.xi default: 2449*53ee8cc1Swenshuai.xi goto repeat; 2450*53ee8cc1Swenshuai.xi } 2451*53ee8cc1Swenshuai.xi break; 2452*53ee8cc1Swenshuai.xi 2453*53ee8cc1Swenshuai.xi case ST_BRACE: 2454*53ee8cc1Swenshuai.xi APP; 2455*53ee8cc1Swenshuai.xi switch (token) 2456*53ee8cc1Swenshuai.xi { 2457*53ee8cc1Swenshuai.xi case '{': 2458*53ee8cc1Swenshuai.xi ++count; 2459*53ee8cc1Swenshuai.xi goto repeat; 2460*53ee8cc1Swenshuai.xi case '}': 2461*53ee8cc1Swenshuai.xi if (--count == 0) 2462*53ee8cc1Swenshuai.xi { 2463*53ee8cc1Swenshuai.xi lexstate = ST_NORMAL; 2464*53ee8cc1Swenshuai.xi token = BRACE_PHRASE; 2465*53ee8cc1Swenshuai.xi break; 2466*53ee8cc1Swenshuai.xi } 2467*53ee8cc1Swenshuai.xi goto repeat; 2468*53ee8cc1Swenshuai.xi default: 2469*53ee8cc1Swenshuai.xi goto repeat; 2470*53ee8cc1Swenshuai.xi } 2471*53ee8cc1Swenshuai.xi break; 2472*53ee8cc1Swenshuai.xi 2473*53ee8cc1Swenshuai.xi case ST_EXPRESSION: 2474*53ee8cc1Swenshuai.xi switch (token) 2475*53ee8cc1Swenshuai.xi { 2476*53ee8cc1Swenshuai.xi case '(': case '[': case '{': 2477*53ee8cc1Swenshuai.xi ++count; 2478*53ee8cc1Swenshuai.xi APP; 2479*53ee8cc1Swenshuai.xi goto repeat; 2480*53ee8cc1Swenshuai.xi case '}': 2481*53ee8cc1Swenshuai.xi /* is this the last line of an enum declaration? */ 2482*53ee8cc1Swenshuai.xi if (count == 0) 2483*53ee8cc1Swenshuai.xi { 2484*53ee8cc1Swenshuai.xi /* Put back the token we just read so's we can find it again 2485*53ee8cc1Swenshuai.xi after registering the expression. */ 2486*53ee8cc1Swenshuai.xi unput(token); 2487*53ee8cc1Swenshuai.xi 2488*53ee8cc1Swenshuai.xi lexstate = ST_NORMAL; 2489*53ee8cc1Swenshuai.xi token = EXPRESSION_PHRASE; 2490*53ee8cc1Swenshuai.xi break; 2491*53ee8cc1Swenshuai.xi } 2492*53ee8cc1Swenshuai.xi /* FALLTHRU */ 2493*53ee8cc1Swenshuai.xi case ')': case ']': 2494*53ee8cc1Swenshuai.xi --count; 2495*53ee8cc1Swenshuai.xi APP; 2496*53ee8cc1Swenshuai.xi goto repeat; 2497*53ee8cc1Swenshuai.xi case ',': case ';': 2498*53ee8cc1Swenshuai.xi if (count == 0) 2499*53ee8cc1Swenshuai.xi { 2500*53ee8cc1Swenshuai.xi /* Put back the token we just read so's we can find it again 2501*53ee8cc1Swenshuai.xi after registering the expression. */ 2502*53ee8cc1Swenshuai.xi unput(token); 2503*53ee8cc1Swenshuai.xi 2504*53ee8cc1Swenshuai.xi lexstate = ST_NORMAL; 2505*53ee8cc1Swenshuai.xi token = EXPRESSION_PHRASE; 2506*53ee8cc1Swenshuai.xi break; 2507*53ee8cc1Swenshuai.xi } 2508*53ee8cc1Swenshuai.xi APP; 2509*53ee8cc1Swenshuai.xi goto repeat; 2510*53ee8cc1Swenshuai.xi default: 2511*53ee8cc1Swenshuai.xi APP; 2512*53ee8cc1Swenshuai.xi goto repeat; 2513*53ee8cc1Swenshuai.xi } 2514*53ee8cc1Swenshuai.xi break; 2515*53ee8cc1Swenshuai.xi 2516*53ee8cc1Swenshuai.xi case ST_TABLE_1: 2517*53ee8cc1Swenshuai.xi goto repeat; 2518*53ee8cc1Swenshuai.xi 2519*53ee8cc1Swenshuai.xi case ST_TABLE_2: 2520*53ee8cc1Swenshuai.xi if (token == IDENT && yyleng == 1 && yytext[0] == 'X') 2521*53ee8cc1Swenshuai.xi { 2522*53ee8cc1Swenshuai.xi token = EXPORT_SYMBOL_KEYW; 2523*53ee8cc1Swenshuai.xi lexstate = ST_TABLE_5; 2524*53ee8cc1Swenshuai.xi APP; 2525*53ee8cc1Swenshuai.xi break; 2526*53ee8cc1Swenshuai.xi } 2527*53ee8cc1Swenshuai.xi lexstate = ST_TABLE_6; 2528*53ee8cc1Swenshuai.xi /* FALLTHRU */ 2529*53ee8cc1Swenshuai.xi 2530*53ee8cc1Swenshuai.xi case ST_TABLE_6: 2531*53ee8cc1Swenshuai.xi switch (token) 2532*53ee8cc1Swenshuai.xi { 2533*53ee8cc1Swenshuai.xi case '{': case '[': case '(': 2534*53ee8cc1Swenshuai.xi ++count; 2535*53ee8cc1Swenshuai.xi break; 2536*53ee8cc1Swenshuai.xi case '}': case ']': case ')': 2537*53ee8cc1Swenshuai.xi --count; 2538*53ee8cc1Swenshuai.xi break; 2539*53ee8cc1Swenshuai.xi case ',': 2540*53ee8cc1Swenshuai.xi if (count == 0) 2541*53ee8cc1Swenshuai.xi lexstate = ST_TABLE_2; 2542*53ee8cc1Swenshuai.xi break; 2543*53ee8cc1Swenshuai.xi }; 2544*53ee8cc1Swenshuai.xi goto repeat; 2545*53ee8cc1Swenshuai.xi 2546*53ee8cc1Swenshuai.xi case ST_TABLE_3: 2547*53ee8cc1Swenshuai.xi goto repeat; 2548*53ee8cc1Swenshuai.xi 2549*53ee8cc1Swenshuai.xi case ST_TABLE_4: 2550*53ee8cc1Swenshuai.xi if (token == ';') 2551*53ee8cc1Swenshuai.xi lexstate = ST_NORMAL; 2552*53ee8cc1Swenshuai.xi goto repeat; 2553*53ee8cc1Swenshuai.xi 2554*53ee8cc1Swenshuai.xi case ST_TABLE_5: 2555*53ee8cc1Swenshuai.xi switch (token) 2556*53ee8cc1Swenshuai.xi { 2557*53ee8cc1Swenshuai.xi case ',': 2558*53ee8cc1Swenshuai.xi token = ';'; 2559*53ee8cc1Swenshuai.xi lexstate = ST_TABLE_2; 2560*53ee8cc1Swenshuai.xi APP; 2561*53ee8cc1Swenshuai.xi break; 2562*53ee8cc1Swenshuai.xi default: 2563*53ee8cc1Swenshuai.xi APP; 2564*53ee8cc1Swenshuai.xi break; 2565*53ee8cc1Swenshuai.xi } 2566*53ee8cc1Swenshuai.xi break; 2567*53ee8cc1Swenshuai.xi 2568*53ee8cc1Swenshuai.xi default: 2569*53ee8cc1Swenshuai.xi exit(1); 2570*53ee8cc1Swenshuai.xi } 2571*53ee8cc1Swenshuai.xifini: 2572*53ee8cc1Swenshuai.xi 2573*53ee8cc1Swenshuai.xi if (suppress_type_lookup > 0) 2574*53ee8cc1Swenshuai.xi --suppress_type_lookup; 2575*53ee8cc1Swenshuai.xi if (dont_want_brace_phrase > 0) 2576*53ee8cc1Swenshuai.xi --dont_want_brace_phrase; 2577*53ee8cc1Swenshuai.xi 2578*53ee8cc1Swenshuai.xi yylval = &next_node->next; 2579*53ee8cc1Swenshuai.xi 2580*53ee8cc1Swenshuai.xi return token; 2581*53ee8cc1Swenshuai.xi} 2582*53ee8cc1Swenshuai.xi 2583