Annotation of src/usr.bin/lex/flex.skl, Revision 1.1
1.1 ! deraadt 1: /* A lexical scanner generated by flex */
! 2:
! 3: /* Scanner skeleton version:
! 4: * $Header: /a/cvsroot/src/usr.bin/lex/flex.skl,v 1.7 1995/05/05 05:35:20 jtc Exp $
! 5: */
! 6:
! 7: #define FLEX_SCANNER
! 8: #define YY_FLEX_MAJOR_VERSION 2
! 9: #define YY_FLEX_MINOR_VERSION 5
! 10:
! 11: %-
! 12: #include <stdio.h>
! 13: %*
! 14:
! 15:
! 16: /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
! 17: #ifdef c_plusplus
! 18: #ifndef __cplusplus
! 19: #define __cplusplus
! 20: #endif
! 21: #endif
! 22:
! 23:
! 24: #ifdef __cplusplus
! 25:
! 26: #include <stdlib.h>
! 27: %+
! 28: class istream;
! 29: %*
! 30: #include <unistd.h>
! 31:
! 32: /* Use prototypes in function declarations. */
! 33: #define YY_USE_PROTOS
! 34:
! 35: /* The "const" storage-class-modifier is valid. */
! 36: #define YY_USE_CONST
! 37:
! 38: #else /* ! __cplusplus */
! 39:
! 40: #if __STDC__
! 41:
! 42: #define YY_USE_PROTOS
! 43: #define YY_USE_CONST
! 44:
! 45: #endif /* __STDC__ */
! 46: #endif /* ! __cplusplus */
! 47:
! 48: #ifdef __TURBOC__
! 49: #pragma warn -rch
! 50: #pragma warn -use
! 51: #include <io.h>
! 52: #include <stdlib.h>
! 53: #define YY_USE_CONST
! 54: #define YY_USE_PROTOS
! 55: #endif
! 56:
! 57: #ifdef YY_USE_CONST
! 58: #define yyconst const
! 59: #else
! 60: #define yyconst
! 61: #endif
! 62:
! 63:
! 64: #ifdef YY_USE_PROTOS
! 65: #define YY_PROTO(proto) proto
! 66: #else
! 67: #define YY_PROTO(proto) ()
! 68: #endif
! 69:
! 70: /* Returned upon end-of-file. */
! 71: #define YY_NULL 0
! 72:
! 73: /* Promotes a possibly negative, possibly signed char to an unsigned
! 74: * integer for use as an array index. If the signed char is negative,
! 75: * we want to instead treat it as an 8-bit unsigned char, hence the
! 76: * double cast.
! 77: */
! 78: #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
! 79:
! 80: /* Enter a start condition. This macro really ought to take a parameter,
! 81: * but we do it the disgusting crufty way forced on us by the ()-less
! 82: * definition of BEGIN.
! 83: */
! 84: #define BEGIN yy_start = 1 + 2 *
! 85:
! 86: /* Translate the current start state into a value that can be later handed
! 87: * to BEGIN to return to the state. The YYSTATE alias is for lex
! 88: * compatibility.
! 89: */
! 90: #define YY_START ((yy_start - 1) / 2)
! 91: #define YYSTATE YY_START
! 92:
! 93: /* Action number for EOF rule of a given start state. */
! 94: #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
! 95:
! 96: /* Special action meaning "start processing a new file". */
! 97: #define YY_NEW_FILE yyrestart( yyin )
! 98:
! 99: #define YY_END_OF_BUFFER_CHAR 0
! 100:
! 101: /* Size of default input buffer. */
! 102: #define YY_BUF_SIZE 16384
! 103:
! 104: typedef struct yy_buffer_state *YY_BUFFER_STATE;
! 105:
! 106: extern int yyleng;
! 107: %-
! 108: extern FILE *yyin, *yyout;
! 109: %*
! 110:
! 111: #define EOB_ACT_CONTINUE_SCAN 0
! 112: #define EOB_ACT_END_OF_FILE 1
! 113: #define EOB_ACT_LAST_MATCH 2
! 114:
! 115: /* The funky do-while in the following #define is used to turn the definition
! 116: * int a single C statement (which needs a semi-colon terminator). This
! 117: * avoids problems with code like:
! 118: *
! 119: * if ( condition_holds )
! 120: * yyless( 5 );
! 121: * else
! 122: * do_something_else();
! 123: *
! 124: * Prior to using the do-while the compiler would get upset at the
! 125: * "else" because it interpreted the "if" statement as being all
! 126: * done when it reached the ';' after the yyless() call.
! 127: */
! 128:
! 129: /* Return all but the first 'n' matched characters back to the input stream. */
! 130:
! 131: #define yyless(n) \
! 132: do \
! 133: { \
! 134: /* Undo effects of setting up yytext. */ \
! 135: *yy_cp = yy_hold_char; \
! 136: yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
! 137: YY_DO_BEFORE_ACTION; /* set up yytext again */ \
! 138: } \
! 139: while ( 0 )
! 140:
! 141: #define unput(c) yyunput( c, yytext_ptr )
! 142:
! 143: /* The following is because we cannot portably get our hands on size_t
! 144: * (without autoconf's help, which isn't available because we want
! 145: * flex-generated scanners to compile on their own).
! 146: */
! 147: typedef unsigned int yy_size_t;
! 148:
! 149:
! 150: struct yy_buffer_state
! 151: {
! 152: %-
! 153: FILE *yy_input_file;
! 154: %+
! 155: istream* yy_input_file;
! 156: %*
! 157:
! 158: char *yy_ch_buf; /* input buffer */
! 159: char *yy_buf_pos; /* current position in input buffer */
! 160:
! 161: /* Size of input buffer in bytes, not including room for EOB
! 162: * characters.
! 163: */
! 164: yy_size_t yy_buf_size;
! 165:
! 166: /* Number of characters read into yy_ch_buf, not including EOB
! 167: * characters.
! 168: */
! 169: int yy_n_chars;
! 170:
! 171: /* Whether we "own" the buffer - i.e., we know we created it,
! 172: * and can realloc() it to grow it, and should free() it to
! 173: * delete it.
! 174: */
! 175: int yy_is_our_buffer;
! 176:
! 177: /* Whether this is an "interactive" input source; if so, and
! 178: * if we're using stdio for input, then we want to use getc()
! 179: * instead of fread(), to make sure we stop fetching input after
! 180: * each newline.
! 181: */
! 182: int yy_is_interactive;
! 183:
! 184: /* Whether we're considered to be at the beginning of a line.
! 185: * If so, '^' rules will be active on the next match, otherwise
! 186: * not.
! 187: */
! 188: int yy_at_bol;
! 189:
! 190: /* Whether to try to fill the input buffer when we reach the
! 191: * end of it.
! 192: */
! 193: int yy_fill_buffer;
! 194:
! 195: int yy_buffer_status;
! 196: #define YY_BUFFER_NEW 0
! 197: #define YY_BUFFER_NORMAL 1
! 198: /* When an EOF's been seen but there's still some text to process
! 199: * then we mark the buffer as YY_EOF_PENDING, to indicate that we
! 200: * shouldn't try reading from the input source any more. We might
! 201: * still have a bunch of tokens to match, though, because of
! 202: * possible backing-up.
! 203: *
! 204: * When we actually see the EOF, we change the status to "new"
! 205: * (via yyrestart()), so that the user can continue scanning by
! 206: * just pointing yyin at a new input file.
! 207: */
! 208: #define YY_BUFFER_EOF_PENDING 2
! 209: };
! 210:
! 211: %- Standard (non-C++) definition
! 212: static YY_BUFFER_STATE yy_current_buffer = 0;
! 213: %*
! 214:
! 215: /* We provide macros for accessing buffer states in case in the
! 216: * future we want to put the buffer states in a more general
! 217: * "scanner state".
! 218: */
! 219: #define YY_CURRENT_BUFFER yy_current_buffer
! 220:
! 221:
! 222: %- Standard (non-C++) definition
! 223: /* yy_hold_char holds the character lost when yytext is formed. */
! 224: static char yy_hold_char;
! 225:
! 226: static int yy_n_chars; /* number of characters read into yy_ch_buf */
! 227:
! 228:
! 229: int yyleng;
! 230:
! 231: /* Points to current character in buffer. */
! 232: static char *yy_c_buf_p = (char *) 0;
! 233: static int yy_init = 1; /* whether we need to initialize */
! 234: static int yy_start = 0; /* start state number */
! 235:
! 236: /* Flag which is used to allow yywrap()'s to do buffer switches
! 237: * instead of setting up a fresh yyin. A bit of a hack ...
! 238: */
! 239: static int yy_did_buffer_switch_on_eof;
! 240:
! 241: void yyrestart YY_PROTO(( FILE *input_file ));
! 242:
! 243: void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
! 244: void yy_load_buffer_state YY_PROTO(( void ));
! 245: YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
! 246: void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
! 247: void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
! 248: void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
! 249: #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
! 250:
! 251: YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
! 252: YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *str ));
! 253: YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
! 254: %*
! 255:
! 256: static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
! 257: static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
! 258: static void yy_flex_free YY_PROTO(( void * ));
! 259:
! 260: #define yy_new_buffer yy_create_buffer
! 261:
! 262: #define yy_set_interactive(is_interactive) \
! 263: { \
! 264: if ( ! yy_current_buffer ) \
! 265: yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
! 266: yy_current_buffer->yy_is_interactive = is_interactive; \
! 267: }
! 268:
! 269: #define yy_set_bol(at_bol) \
! 270: { \
! 271: if ( ! yy_current_buffer ) \
! 272: yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
! 273: yy_current_buffer->yy_at_bol = at_bol; \
! 274: }
! 275:
! 276: #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
! 277:
! 278: %% yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here
! 279:
! 280: %- Standard (non-C++) definition
! 281: static yy_state_type yy_get_previous_state YY_PROTO(( void ));
! 282: static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
! 283: static int yy_get_next_buffer YY_PROTO(( void ));
! 284: static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
! 285: %*
! 286:
! 287: /* Done after the current pattern has been matched and before the
! 288: * corresponding action - sets up yytext.
! 289: */
! 290: #define YY_DO_BEFORE_ACTION \
! 291: yytext_ptr = yy_bp; \
! 292: %% code to fiddle yytext and yyleng for yymore() goes here
! 293: yy_hold_char = *yy_cp; \
! 294: *yy_cp = '\0'; \
! 295: %% code to copy yytext_ptr to yytext[] goes here, if %array
! 296: yy_c_buf_p = yy_cp;
! 297:
! 298: %% data tables for the DFA and the user's section 1 definitions go here
! 299:
! 300: /* Macros after this point can all be overridden by user definitions in
! 301: * section 1.
! 302: */
! 303:
! 304: #ifndef YY_SKIP_YYWRAP
! 305: #ifdef __cplusplus
! 306: extern "C" int yywrap YY_PROTO(( void ));
! 307: #else
! 308: extern int yywrap YY_PROTO(( void ));
! 309: #endif
! 310: #endif
! 311:
! 312: %-
! 313: #ifndef YY_NO_UNPUT
! 314: static void yyunput YY_PROTO(( int c, char *buf_ptr ));
! 315: #endif
! 316: %*
! 317:
! 318: #ifndef yytext_ptr
! 319: static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
! 320: #endif
! 321:
! 322: #ifndef YY_NO_INPUT
! 323: %- Standard (non-C++) definition
! 324: #ifdef __cplusplus
! 325: static int yyinput YY_PROTO(( void ));
! 326: #else
! 327: static int input YY_PROTO(( void ));
! 328: #endif
! 329: %*
! 330: #endif
! 331:
! 332: #if YY_STACK_USED
! 333: static int yy_start_stack_ptr = 0;
! 334: static int yy_start_stack_depth = 0;
! 335: static int *yy_start_stack = 0;
! 336: #ifndef YY_NO_PUSH_STATE
! 337: static void yy_push_state YY_PROTO(( int new_state ));
! 338: #endif
! 339: #ifndef YY_NO_POP_STATE
! 340: static void yy_pop_state YY_PROTO(( void ));
! 341: #endif
! 342: #ifndef YY_NO_TOP_STATE
! 343: static int yy_top_state YY_PROTO(( void ));
! 344: #endif
! 345:
! 346: #else
! 347: #define YY_NO_PUSH_STATE 1
! 348: #define YY_NO_POP_STATE 1
! 349: #define YY_NO_TOP_STATE 1
! 350: #endif
! 351:
! 352: #ifdef YY_MALLOC_DECL
! 353: YY_MALLOC_DECL
! 354: #else
! 355: #if __STDC__
! 356: #ifndef __cplusplus
! 357: #include <stdlib.h>
! 358: #endif
! 359: #else
! 360: /* Just try to get by without declaring the routines. This will fail
! 361: * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
! 362: * or sizeof(void*) != sizeof(int).
! 363: */
! 364: #endif
! 365: #endif
! 366:
! 367: /* Amount of stuff to slurp up with each read. */
! 368: #ifndef YY_READ_BUF_SIZE
! 369: #define YY_READ_BUF_SIZE 8192
! 370: #endif
! 371:
! 372: /* Copy whatever the last rule matched to the standard output. */
! 373:
! 374: #ifndef ECHO
! 375: %- Standard (non-C++) definition
! 376: /* This used to be an fputs(), but since the string might contain NUL's,
! 377: * we now use fwrite().
! 378: */
! 379: #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
! 380: %+ C++ definition
! 381: #define ECHO LexerOutput( yytext, yyleng )
! 382: %*
! 383: #endif
! 384:
! 385: /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
! 386: * is returned in "result".
! 387: */
! 388: #ifndef YY_INPUT
! 389: #define YY_INPUT(buf,result,max_size) \
! 390: %% fread()/read() definition of YY_INPUT goes here unless we're doing C++
! 391: %+ C++ definition
! 392: if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \
! 393: YY_FATAL_ERROR( "input in flex scanner failed" );
! 394: %*
! 395: #endif
! 396:
! 397: /* No semi-colon after return; correct usage is to write "yyterminate();" -
! 398: * we don't want an extra ';' after the "return" because that will cause
! 399: * some compilers to complain about unreachable statements.
! 400: */
! 401: #ifndef yyterminate
! 402: #define yyterminate() return YY_NULL
! 403: #endif
! 404:
! 405: /* Number of entries by which start-condition stack grows. */
! 406: #ifndef YY_START_STACK_INCR
! 407: #define YY_START_STACK_INCR 25
! 408: #endif
! 409:
! 410: /* Report a fatal error. */
! 411: #ifndef YY_FATAL_ERROR
! 412: %-
! 413: #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
! 414: %+
! 415: #define YY_FATAL_ERROR(msg) LexerError( msg )
! 416: %*
! 417: #endif
! 418:
! 419: /* Default declaration of generated scanner - a define so the user can
! 420: * easily add parameters.
! 421: */
! 422: #ifndef YY_DECL
! 423: %- Standard (non-C++) definition
! 424: #define YY_DECL int yylex YY_PROTO(( void ))
! 425: %+ C++ definition
! 426: #define YY_DECL int yyFlexLexer::yylex()
! 427: %*
! 428: #endif
! 429:
! 430: /* Code executed at the beginning of each rule, after yytext and yyleng
! 431: * have been set up.
! 432: */
! 433: #ifndef YY_USER_ACTION
! 434: #define YY_USER_ACTION
! 435: #endif
! 436:
! 437: /* Code executed at the end of each rule. */
! 438: #ifndef YY_BREAK
! 439: #define YY_BREAK break;
! 440: #endif
! 441:
! 442: %% YY_RULE_SETUP definition goes here
! 443:
! 444: YY_DECL
! 445: {
! 446: register yy_state_type yy_current_state;
! 447: register char *yy_cp, *yy_bp;
! 448: register int yy_act;
! 449:
! 450: %% user's declarations go here
! 451:
! 452: if ( yy_init )
! 453: {
! 454: yy_init = 0;
! 455:
! 456: #ifdef YY_USER_INIT
! 457: YY_USER_INIT;
! 458: #endif
! 459:
! 460: if ( ! yy_start )
! 461: yy_start = 1; /* first start state */
! 462:
! 463: if ( ! yyin )
! 464: %-
! 465: yyin = stdin;
! 466: %+
! 467: yyin = &cin;
! 468: %*
! 469:
! 470: if ( ! yyout )
! 471: %-
! 472: yyout = stdout;
! 473: %+
! 474: yyout = &cout;
! 475: %*
! 476:
! 477: if ( ! yy_current_buffer )
! 478: yy_current_buffer =
! 479: yy_create_buffer( yyin, YY_BUF_SIZE );
! 480:
! 481: yy_load_buffer_state();
! 482: }
! 483:
! 484: while ( 1 ) /* loops until end-of-file is reached */
! 485: {
! 486: %% yymore()-related code goes here
! 487: yy_cp = yy_c_buf_p;
! 488:
! 489: /* Support of yytext. */
! 490: *yy_cp = yy_hold_char;
! 491:
! 492: /* yy_bp points to the position in yy_ch_buf of the start of
! 493: * the current run.
! 494: */
! 495: yy_bp = yy_cp;
! 496:
! 497: %% code to set up and find next match goes here
! 498:
! 499: yy_find_action:
! 500: %% code to find the action number goes here
! 501:
! 502: YY_DO_BEFORE_ACTION;
! 503:
! 504: %% code for yylineno update goes here
! 505:
! 506: do_action: /* This label is used only to access EOF actions. */
! 507:
! 508: %% debug code goes here
! 509:
! 510: switch ( yy_act )
! 511: { /* beginning of action switch */
! 512: %% actions go here
! 513:
! 514: case YY_END_OF_BUFFER:
! 515: {
! 516: /* Amount of text matched not including the EOB char. */
! 517: int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
! 518:
! 519: /* Undo the effects of YY_DO_BEFORE_ACTION. */
! 520: *yy_cp = yy_hold_char;
! 521:
! 522: if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
! 523: {
! 524: /* We're scanning a new file or input source. It's
! 525: * possible that this happened because the user
! 526: * just pointed yyin at a new source and called
! 527: * yylex(). If so, then we have to assure
! 528: * consistency between yy_current_buffer and our
! 529: * globals. Here is the right place to do so, because
! 530: * this is the first action (other than possibly a
! 531: * back-up) that will match for the new input source.
! 532: */
! 533: yy_n_chars = yy_current_buffer->yy_n_chars;
! 534: yy_current_buffer->yy_input_file = yyin;
! 535: yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
! 536: }
! 537:
! 538: /* Note that here we test for yy_c_buf_p "<=" to the position
! 539: * of the first EOB in the buffer, since yy_c_buf_p will
! 540: * already have been incremented past the NUL character
! 541: * (since all states make transitions on EOB to the
! 542: * end-of-buffer state). Contrast this with the test
! 543: * in input().
! 544: */
! 545: if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
! 546: { /* This was really a NUL. */
! 547: yy_state_type yy_next_state;
! 548:
! 549: yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
! 550:
! 551: yy_current_state = yy_get_previous_state();
! 552:
! 553: /* Okay, we're now positioned to make the NUL
! 554: * transition. We couldn't have
! 555: * yy_get_previous_state() go ahead and do it
! 556: * for us because it doesn't know how to deal
! 557: * with the possibility of jamming (and we don't
! 558: * want to build jamming into it because then it
! 559: * will run more slowly).
! 560: */
! 561:
! 562: yy_next_state = yy_try_NUL_trans( yy_current_state );
! 563:
! 564: yy_bp = yytext_ptr + YY_MORE_ADJ;
! 565:
! 566: if ( yy_next_state )
! 567: {
! 568: /* Consume the NUL. */
! 569: yy_cp = ++yy_c_buf_p;
! 570: yy_current_state = yy_next_state;
! 571: goto yy_match;
! 572: }
! 573:
! 574: else
! 575: {
! 576: %% code to do back-up for compressed tables and set up yy_cp goes here
! 577: goto yy_find_action;
! 578: }
! 579: }
! 580:
! 581: else switch ( yy_get_next_buffer() )
! 582: {
! 583: case EOB_ACT_END_OF_FILE:
! 584: {
! 585: yy_did_buffer_switch_on_eof = 0;
! 586:
! 587: if ( yywrap() )
! 588: {
! 589: /* Note: because we've taken care in
! 590: * yy_get_next_buffer() to have set up
! 591: * yytext, we can now set up
! 592: * yy_c_buf_p so that if some total
! 593: * hoser (like flex itself) wants to
! 594: * call the scanner after we return the
! 595: * YY_NULL, it'll still work - another
! 596: * YY_NULL will get returned.
! 597: */
! 598: yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
! 599:
! 600: yy_act = YY_STATE_EOF(YY_START);
! 601: goto do_action;
! 602: }
! 603:
! 604: else
! 605: {
! 606: if ( ! yy_did_buffer_switch_on_eof )
! 607: YY_NEW_FILE;
! 608: }
! 609: break;
! 610: }
! 611:
! 612: case EOB_ACT_CONTINUE_SCAN:
! 613: yy_c_buf_p =
! 614: yytext_ptr + yy_amount_of_matched_text;
! 615:
! 616: yy_current_state = yy_get_previous_state();
! 617:
! 618: yy_cp = yy_c_buf_p;
! 619: yy_bp = yytext_ptr + YY_MORE_ADJ;
! 620: goto yy_match;
! 621:
! 622: case EOB_ACT_LAST_MATCH:
! 623: yy_c_buf_p =
! 624: &yy_current_buffer->yy_ch_buf[yy_n_chars];
! 625:
! 626: yy_current_state = yy_get_previous_state();
! 627:
! 628: yy_cp = yy_c_buf_p;
! 629: yy_bp = yytext_ptr + YY_MORE_ADJ;
! 630: goto yy_find_action;
! 631: }
! 632: break;
! 633: }
! 634:
! 635: default:
! 636: YY_FATAL_ERROR(
! 637: "fatal flex scanner internal error--no action found" );
! 638: } /* end of action switch */
! 639: } /* end of scanning one token */
! 640: } /* end of yylex */
! 641:
! 642: %+
! 643: yyFlexLexer::yyFlexLexer( istream* arg_yyin, ostream* arg_yyout )
! 644: {
! 645: yyin = arg_yyin;
! 646: yyout = arg_yyout;
! 647: yy_c_buf_p = 0;
! 648: yy_init = 1;
! 649: yy_start = 0;
! 650: yy_flex_debug = 0;
! 651: yylineno = 1; // this will only get updated if %option yylineno
! 652:
! 653: yy_did_buffer_switch_on_eof = 0;
! 654:
! 655: yy_looking_for_trail_begin = 0;
! 656: yy_more_flag = 0;
! 657: yy_more_len = 0;
! 658:
! 659: yy_start_stack_ptr = yy_start_stack_depth = 0;
! 660: yy_start_stack = 0;
! 661:
! 662: yy_current_buffer = 0;
! 663:
! 664: #ifdef YY_USES_REJECT
! 665: yy_state_buf = new yy_state_type[YY_BUF_SIZE + 2];
! 666: #else
! 667: yy_state_buf = 0;
! 668: #endif
! 669: }
! 670:
! 671: yyFlexLexer::~yyFlexLexer()
! 672: {
! 673: delete yy_state_buf;
! 674: yy_delete_buffer( yy_current_buffer );
! 675: }
! 676:
! 677: void yyFlexLexer::switch_streams( istream* new_in, ostream* new_out )
! 678: {
! 679: if ( new_in )
! 680: {
! 681: yy_delete_buffer( yy_current_buffer );
! 682: yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) );
! 683: }
! 684:
! 685: if ( new_out )
! 686: yyout = new_out;
! 687: }
! 688:
! 689: #ifdef YY_INTERACTIVE
! 690: int yyFlexLexer::LexerInput( char* buf, int /* max_size */ )
! 691: #else
! 692: int yyFlexLexer::LexerInput( char* buf, int max_size )
! 693: #endif
! 694: {
! 695: if ( yyin->eof() || yyin->fail() )
! 696: return 0;
! 697:
! 698: #ifdef YY_INTERACTIVE
! 699: yyin->get( buf[0] );
! 700:
! 701: if ( yyin->eof() )
! 702: return 0;
! 703:
! 704: if ( yyin->bad() )
! 705: return -1;
! 706:
! 707: return 1;
! 708:
! 709: #else
! 710: (void) yyin->read( buf, max_size );
! 711:
! 712: if ( yyin->bad() )
! 713: return -1;
! 714: else
! 715: return yyin->gcount();
! 716: #endif
! 717: }
! 718:
! 719: void yyFlexLexer::LexerOutput( const char* buf, int size )
! 720: {
! 721: (void) yyout->write( buf, size );
! 722: }
! 723: %*
! 724:
! 725: /* yy_get_next_buffer - try to read in a new buffer
! 726: *
! 727: * Returns a code representing an action:
! 728: * EOB_ACT_LAST_MATCH -
! 729: * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
! 730: * EOB_ACT_END_OF_FILE - end of file
! 731: */
! 732:
! 733: %-
! 734: static int yy_get_next_buffer()
! 735: %+
! 736: int yyFlexLexer::yy_get_next_buffer()
! 737: %*
! 738: {
! 739: register char *dest = yy_current_buffer->yy_ch_buf;
! 740: register char *source = yytext_ptr;
! 741: register int number_to_move, i;
! 742: int ret_val;
! 743:
! 744: if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
! 745: YY_FATAL_ERROR(
! 746: "fatal flex scanner internal error--end of buffer missed" );
! 747:
! 748: if ( yy_current_buffer->yy_fill_buffer == 0 )
! 749: { /* Don't try to fill the buffer, so this is an EOF. */
! 750: if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
! 751: {
! 752: /* We matched a singled characater, the EOB, so
! 753: * treat this as a final EOF.
! 754: */
! 755: return EOB_ACT_END_OF_FILE;
! 756: }
! 757:
! 758: else
! 759: {
! 760: /* We matched some text prior to the EOB, first
! 761: * process it.
! 762: */
! 763: return EOB_ACT_LAST_MATCH;
! 764: }
! 765: }
! 766:
! 767: /* Try to read more data. */
! 768:
! 769: /* First move last chars to start of buffer. */
! 770: number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
! 771:
! 772: for ( i = 0; i < number_to_move; ++i )
! 773: *(dest++) = *(source++);
! 774:
! 775: if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
! 776: /* don't do the read, it's not guaranteed to return an EOF,
! 777: * just force an EOF
! 778: */
! 779: yy_n_chars = 0;
! 780:
! 781: else
! 782: {
! 783: int num_to_read =
! 784: yy_current_buffer->yy_buf_size - number_to_move - 1;
! 785:
! 786: while ( num_to_read <= 0 )
! 787: { /* Not enough room in the buffer - grow it. */
! 788: #ifdef YY_USES_REJECT
! 789: YY_FATAL_ERROR(
! 790: "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
! 791: #else
! 792:
! 793: /* just a shorter name for the current buffer */
! 794: YY_BUFFER_STATE b = yy_current_buffer;
! 795:
! 796: int yy_c_buf_p_offset =
! 797: (int) (yy_c_buf_p - b->yy_ch_buf);
! 798:
! 799: if ( b->yy_is_our_buffer )
! 800: {
! 801: int new_size = b->yy_buf_size * 2;
! 802:
! 803: if ( new_size <= 0 )
! 804: b->yy_buf_size += b->yy_buf_size / 8;
! 805: else
! 806: b->yy_buf_size *= 2;
! 807:
! 808: b->yy_ch_buf = (char *)
! 809: /* Include room in for 2 EOB chars. */
! 810: yy_flex_realloc( (void *) b->yy_ch_buf,
! 811: b->yy_buf_size + 2 );
! 812: }
! 813: else
! 814: /* Can't grow it, we don't own it. */
! 815: b->yy_ch_buf = 0;
! 816:
! 817: if ( ! b->yy_ch_buf )
! 818: YY_FATAL_ERROR(
! 819: "fatal error - scanner input buffer overflow" );
! 820:
! 821: yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
! 822:
! 823: num_to_read = yy_current_buffer->yy_buf_size -
! 824: number_to_move - 1;
! 825: #endif
! 826: }
! 827:
! 828: if ( num_to_read > YY_READ_BUF_SIZE )
! 829: num_to_read = YY_READ_BUF_SIZE;
! 830:
! 831: /* Read in more data. */
! 832: YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
! 833: yy_n_chars, num_to_read );
! 834: }
! 835:
! 836: if ( yy_n_chars == 0 )
! 837: {
! 838: if ( number_to_move == YY_MORE_ADJ )
! 839: {
! 840: ret_val = EOB_ACT_END_OF_FILE;
! 841: yyrestart( yyin );
! 842: }
! 843:
! 844: else
! 845: {
! 846: ret_val = EOB_ACT_LAST_MATCH;
! 847: yy_current_buffer->yy_buffer_status =
! 848: YY_BUFFER_EOF_PENDING;
! 849: }
! 850: }
! 851:
! 852: else
! 853: ret_val = EOB_ACT_CONTINUE_SCAN;
! 854:
! 855: yy_n_chars += number_to_move;
! 856: yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
! 857: yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
! 858:
! 859: yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
! 860:
! 861: return ret_val;
! 862: }
! 863:
! 864:
! 865: /* yy_get_previous_state - get the state just before the EOB char was reached */
! 866:
! 867: %-
! 868: static yy_state_type yy_get_previous_state()
! 869: %+
! 870: yy_state_type yyFlexLexer::yy_get_previous_state()
! 871: %*
! 872: {
! 873: register yy_state_type yy_current_state;
! 874: register char *yy_cp;
! 875:
! 876: %% code to get the start state into yy_current_state goes here
! 877:
! 878: for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
! 879: {
! 880: %% code to find the next state goes here
! 881: }
! 882:
! 883: return yy_current_state;
! 884: }
! 885:
! 886:
! 887: /* yy_try_NUL_trans - try to make a transition on the NUL character
! 888: *
! 889: * synopsis
! 890: * next_state = yy_try_NUL_trans( current_state );
! 891: */
! 892:
! 893: %-
! 894: #ifdef YY_USE_PROTOS
! 895: static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
! 896: #else
! 897: static yy_state_type yy_try_NUL_trans( yy_current_state )
! 898: yy_state_type yy_current_state;
! 899: #endif
! 900: %+
! 901: yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state )
! 902: %*
! 903: {
! 904: register int yy_is_jam;
! 905: %% code to find the next state, and perhaps do backing up, goes here
! 906:
! 907: return yy_is_jam ? 0 : yy_current_state;
! 908: }
! 909:
! 910:
! 911: %-
! 912: #ifndef YY_NO_UNPUT
! 913: #ifdef YY_USE_PROTOS
! 914: static void yyunput( int c, register char *yy_bp )
! 915: #else
! 916: static void yyunput( c, yy_bp )
! 917: int c;
! 918: register char *yy_bp;
! 919: #endif
! 920: %+
! 921: void yyFlexLexer::yyunput( int c, register char* yy_bp )
! 922: %*
! 923: {
! 924: register char *yy_cp = yy_c_buf_p;
! 925:
! 926: /* undo effects of setting up yytext */
! 927: *yy_cp = yy_hold_char;
! 928:
! 929: if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
! 930: { /* need to shift things up to make room */
! 931: /* +2 for EOB chars. */
! 932: register int number_to_move = yy_n_chars + 2;
! 933: register char *dest = &yy_current_buffer->yy_ch_buf[
! 934: yy_current_buffer->yy_buf_size + 2];
! 935: register char *source =
! 936: &yy_current_buffer->yy_ch_buf[number_to_move];
! 937:
! 938: while ( source > yy_current_buffer->yy_ch_buf )
! 939: *--dest = *--source;
! 940:
! 941: yy_cp += (int) (dest - source);
! 942: yy_bp += (int) (dest - source);
! 943: yy_n_chars = yy_current_buffer->yy_buf_size;
! 944:
! 945: if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
! 946: YY_FATAL_ERROR( "flex scanner push-back overflow" );
! 947: }
! 948:
! 949: *--yy_cp = (char) c;
! 950:
! 951: %% update yylineno here
! 952:
! 953: yytext_ptr = yy_bp;
! 954: yy_hold_char = *yy_cp;
! 955: yy_c_buf_p = yy_cp;
! 956: }
! 957: %-
! 958: #endif /* ifndef YY_NO_UNPUT */
! 959: %*
! 960:
! 961:
! 962: %-
! 963: #ifdef __cplusplus
! 964: static int yyinput()
! 965: #else
! 966: static int input()
! 967: #endif
! 968: %+
! 969: int yyFlexLexer::yyinput()
! 970: %*
! 971: {
! 972: int c;
! 973:
! 974: *yy_c_buf_p = yy_hold_char;
! 975:
! 976: if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
! 977: {
! 978: /* yy_c_buf_p now points to the character we want to return.
! 979: * If this occurs *before* the EOB characters, then it's a
! 980: * valid NUL; if not, then we've hit the end of the buffer.
! 981: */
! 982: if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
! 983: /* This was really a NUL. */
! 984: *yy_c_buf_p = '\0';
! 985:
! 986: else
! 987: { /* need more input */
! 988: yytext_ptr = yy_c_buf_p;
! 989: ++yy_c_buf_p;
! 990:
! 991: switch ( yy_get_next_buffer() )
! 992: {
! 993: case EOB_ACT_END_OF_FILE:
! 994: {
! 995: if ( yywrap() )
! 996: {
! 997: yy_c_buf_p =
! 998: yytext_ptr + YY_MORE_ADJ;
! 999: return EOF;
! 1000: }
! 1001:
! 1002: if ( ! yy_did_buffer_switch_on_eof )
! 1003: YY_NEW_FILE;
! 1004: #ifdef __cplusplus
! 1005: return yyinput();
! 1006: #else
! 1007: return input();
! 1008: #endif
! 1009: }
! 1010:
! 1011: case EOB_ACT_CONTINUE_SCAN:
! 1012: yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
! 1013: break;
! 1014:
! 1015: case EOB_ACT_LAST_MATCH:
! 1016: #ifdef __cplusplus
! 1017: YY_FATAL_ERROR(
! 1018: "unexpected last match in yyinput()" );
! 1019: #else
! 1020: YY_FATAL_ERROR(
! 1021: "unexpected last match in input()" );
! 1022: #endif
! 1023: }
! 1024: }
! 1025: }
! 1026:
! 1027: c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
! 1028: *yy_c_buf_p = '\0'; /* preserve yytext */
! 1029: yy_hold_char = *++yy_c_buf_p;
! 1030:
! 1031: %% update BOL and yylineno
! 1032:
! 1033: return c;
! 1034: }
! 1035:
! 1036:
! 1037: %-
! 1038: #ifdef YY_USE_PROTOS
! 1039: void yyrestart( FILE *input_file )
! 1040: #else
! 1041: void yyrestart( input_file )
! 1042: FILE *input_file;
! 1043: #endif
! 1044: %+
! 1045: void yyFlexLexer::yyrestart( istream* input_file )
! 1046: %*
! 1047: {
! 1048: if ( ! yy_current_buffer )
! 1049: yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
! 1050:
! 1051: yy_init_buffer( yy_current_buffer, input_file );
! 1052: yy_load_buffer_state();
! 1053: }
! 1054:
! 1055:
! 1056: %-
! 1057: #ifdef YY_USE_PROTOS
! 1058: void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
! 1059: #else
! 1060: void yy_switch_to_buffer( new_buffer )
! 1061: YY_BUFFER_STATE new_buffer;
! 1062: #endif
! 1063: %+
! 1064: void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
! 1065: %*
! 1066: {
! 1067: if ( yy_current_buffer == new_buffer )
! 1068: return;
! 1069:
! 1070: if ( yy_current_buffer )
! 1071: {
! 1072: /* Flush out information for old buffer. */
! 1073: *yy_c_buf_p = yy_hold_char;
! 1074: yy_current_buffer->yy_buf_pos = yy_c_buf_p;
! 1075: yy_current_buffer->yy_n_chars = yy_n_chars;
! 1076: }
! 1077:
! 1078: yy_current_buffer = new_buffer;
! 1079: yy_load_buffer_state();
! 1080:
! 1081: /* We don't actually know whether we did this switch during
! 1082: * EOF (yywrap()) processing, but the only time this flag
! 1083: * is looked at is after yywrap() is called, so it's safe
! 1084: * to go ahead and always set it.
! 1085: */
! 1086: yy_did_buffer_switch_on_eof = 1;
! 1087: }
! 1088:
! 1089:
! 1090: %-
! 1091: #ifdef YY_USE_PROTOS
! 1092: void yy_load_buffer_state( void )
! 1093: #else
! 1094: void yy_load_buffer_state()
! 1095: #endif
! 1096: %+
! 1097: void yyFlexLexer::yy_load_buffer_state()
! 1098: %*
! 1099: {
! 1100: yy_n_chars = yy_current_buffer->yy_n_chars;
! 1101: yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
! 1102: yyin = yy_current_buffer->yy_input_file;
! 1103: yy_hold_char = *yy_c_buf_p;
! 1104: }
! 1105:
! 1106:
! 1107: %-
! 1108: #ifdef YY_USE_PROTOS
! 1109: YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
! 1110: #else
! 1111: YY_BUFFER_STATE yy_create_buffer( file, size )
! 1112: FILE *file;
! 1113: int size;
! 1114: #endif
! 1115: %+
! 1116: YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( istream* file, int size )
! 1117: %*
! 1118: {
! 1119: YY_BUFFER_STATE b;
! 1120:
! 1121: b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
! 1122: if ( ! b )
! 1123: YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
! 1124:
! 1125: b->yy_buf_size = size;
! 1126:
! 1127: /* yy_ch_buf has to be 2 characters longer than the size given because
! 1128: * we need to put in 2 end-of-buffer characters.
! 1129: */
! 1130: b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
! 1131: if ( ! b->yy_ch_buf )
! 1132: YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
! 1133:
! 1134: b->yy_is_our_buffer = 1;
! 1135:
! 1136: yy_init_buffer( b, file );
! 1137:
! 1138: return b;
! 1139: }
! 1140:
! 1141:
! 1142: %-
! 1143: #ifdef YY_USE_PROTOS
! 1144: void yy_delete_buffer( YY_BUFFER_STATE b )
! 1145: #else
! 1146: void yy_delete_buffer( b )
! 1147: YY_BUFFER_STATE b;
! 1148: #endif
! 1149: %+
! 1150: void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b )
! 1151: %*
! 1152: {
! 1153: if ( ! b )
! 1154: return;
! 1155:
! 1156: if ( b == yy_current_buffer )
! 1157: yy_current_buffer = (YY_BUFFER_STATE) 0;
! 1158:
! 1159: if ( b->yy_is_our_buffer )
! 1160: yy_flex_free( (void *) b->yy_ch_buf );
! 1161:
! 1162: yy_flex_free( (void *) b );
! 1163: }
! 1164:
! 1165:
! 1166: %-
! 1167: #ifndef YY_ALWAYS_INTERACTIVE
! 1168: #ifndef YY_NEVER_INTERACTIVE
! 1169: extern int isatty YY_PROTO(( int ));
! 1170: #endif
! 1171: #endif
! 1172:
! 1173: #ifdef YY_USE_PROTOS
! 1174: void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
! 1175: #else
! 1176: void yy_init_buffer( b, file )
! 1177: YY_BUFFER_STATE b;
! 1178: FILE *file;
! 1179: #endif
! 1180:
! 1181: %+
! 1182: extern "C" int isatty YY_PROTO(( int ));
! 1183: void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, istream* file )
! 1184: %*
! 1185:
! 1186: {
! 1187: yy_flush_buffer( b );
! 1188:
! 1189: b->yy_input_file = file;
! 1190: b->yy_fill_buffer = 1;
! 1191:
! 1192: %-
! 1193: #if YY_ALWAYS_INTERACTIVE
! 1194: b->yy_is_interactive = 1;
! 1195: #else
! 1196: #if YY_NEVER_INTERACTIVE
! 1197: b->yy_is_interactive = 0;
! 1198: #else
! 1199: b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
! 1200: #endif
! 1201: #endif
! 1202: %+
! 1203: b->yy_is_interactive = 0;
! 1204: %*
! 1205: }
! 1206:
! 1207:
! 1208: %-
! 1209: #ifdef YY_USE_PROTOS
! 1210: void yy_flush_buffer( YY_BUFFER_STATE b )
! 1211: #else
! 1212: void yy_flush_buffer( b )
! 1213: YY_BUFFER_STATE b;
! 1214: #endif
! 1215:
! 1216: %+
! 1217: void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b )
! 1218: %*
! 1219: {
! 1220: b->yy_n_chars = 0;
! 1221:
! 1222: /* We always need two end-of-buffer characters. The first causes
! 1223: * a transition to the end-of-buffer state. The second causes
! 1224: * a jam in that state.
! 1225: */
! 1226: b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
! 1227: b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
! 1228:
! 1229: b->yy_buf_pos = &b->yy_ch_buf[0];
! 1230:
! 1231: b->yy_at_bol = 1;
! 1232: b->yy_buffer_status = YY_BUFFER_NEW;
! 1233:
! 1234: if ( b == yy_current_buffer )
! 1235: yy_load_buffer_state();
! 1236: }
! 1237: %*
! 1238:
! 1239:
! 1240: #ifndef YY_NO_SCAN_BUFFER
! 1241: %-
! 1242: #ifdef YY_USE_PROTOS
! 1243: YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
! 1244: #else
! 1245: YY_BUFFER_STATE yy_scan_buffer( base, size )
! 1246: char *base;
! 1247: yy_size_t size;
! 1248: #endif
! 1249: {
! 1250: YY_BUFFER_STATE b;
! 1251:
! 1252: if ( size < 2 ||
! 1253: base[size-2] != YY_END_OF_BUFFER_CHAR ||
! 1254: base[size-1] != YY_END_OF_BUFFER_CHAR )
! 1255: /* They forgot to leave room for the EOB's. */
! 1256: return 0;
! 1257:
! 1258: b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
! 1259: if ( ! b )
! 1260: YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
! 1261:
! 1262: b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
! 1263: b->yy_buf_pos = b->yy_ch_buf = base;
! 1264: b->yy_is_our_buffer = 0;
! 1265: b->yy_input_file = 0;
! 1266: b->yy_n_chars = b->yy_buf_size;
! 1267: b->yy_is_interactive = 0;
! 1268: b->yy_at_bol = 1;
! 1269: b->yy_fill_buffer = 0;
! 1270: b->yy_buffer_status = YY_BUFFER_NEW;
! 1271:
! 1272: yy_switch_to_buffer( b );
! 1273:
! 1274: return b;
! 1275: }
! 1276: %*
! 1277: #endif
! 1278:
! 1279:
! 1280: #ifndef YY_NO_SCAN_STRING
! 1281: %-
! 1282: #ifdef YY_USE_PROTOS
! 1283: YY_BUFFER_STATE yy_scan_string( yyconst char *str )
! 1284: #else
! 1285: YY_BUFFER_STATE yy_scan_string( str )
! 1286: yyconst char *str;
! 1287: #endif
! 1288: {
! 1289: int len;
! 1290: for ( len = 0; str[len]; ++len )
! 1291: ;
! 1292:
! 1293: return yy_scan_bytes( str, len );
! 1294: }
! 1295: %*
! 1296: #endif
! 1297:
! 1298:
! 1299: #ifndef YY_NO_SCAN_BYTES
! 1300: %-
! 1301: #ifdef YY_USE_PROTOS
! 1302: YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
! 1303: #else
! 1304: YY_BUFFER_STATE yy_scan_bytes( bytes, len )
! 1305: yyconst char *bytes;
! 1306: int len;
! 1307: #endif
! 1308: {
! 1309: YY_BUFFER_STATE b;
! 1310: char *buf;
! 1311: yy_size_t n;
! 1312: int i;
! 1313:
! 1314: /* Get memory for full buffer, including space for trailing EOB's. */
! 1315: n = len + 2;
! 1316: buf = (char *) yy_flex_alloc( n );
! 1317: if ( ! buf )
! 1318: YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
! 1319:
! 1320: for ( i = 0; i < len; ++i )
! 1321: buf[i] = bytes[i];
! 1322:
! 1323: buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
! 1324:
! 1325: b = yy_scan_buffer( buf, n );
! 1326: if ( ! b )
! 1327: YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
! 1328:
! 1329: /* It's okay to grow etc. this buffer, and we should throw it
! 1330: * away when we're done.
! 1331: */
! 1332: b->yy_is_our_buffer = 1;
! 1333:
! 1334: return b;
! 1335: }
! 1336: %*
! 1337: #endif
! 1338:
! 1339:
! 1340: #ifndef YY_NO_PUSH_STATE
! 1341: %-
! 1342: #ifdef YY_USE_PROTOS
! 1343: static void yy_push_state( int new_state )
! 1344: #else
! 1345: static void yy_push_state( new_state )
! 1346: int new_state;
! 1347: #endif
! 1348: %+
! 1349: void yyFlexLexer::yy_push_state( int new_state )
! 1350: %*
! 1351: {
! 1352: if ( yy_start_stack_ptr >= yy_start_stack_depth )
! 1353: {
! 1354: yy_size_t new_size;
! 1355:
! 1356: yy_start_stack_depth += YY_START_STACK_INCR;
! 1357: new_size = yy_start_stack_depth * sizeof( int );
! 1358:
! 1359: if ( ! yy_start_stack )
! 1360: yy_start_stack = (int *) yy_flex_alloc( new_size );
! 1361:
! 1362: else
! 1363: yy_start_stack = (int *) yy_flex_realloc(
! 1364: (void *) yy_start_stack, new_size );
! 1365:
! 1366: if ( ! yy_start_stack )
! 1367: YY_FATAL_ERROR(
! 1368: "out of memory expanding start-condition stack" );
! 1369: }
! 1370:
! 1371: yy_start_stack[yy_start_stack_ptr++] = YY_START;
! 1372:
! 1373: BEGIN(new_state);
! 1374: }
! 1375: #endif
! 1376:
! 1377:
! 1378: #ifndef YY_NO_POP_STATE
! 1379: %-
! 1380: static void yy_pop_state()
! 1381: %+
! 1382: void yyFlexLexer::yy_pop_state()
! 1383: %*
! 1384: {
! 1385: if ( --yy_start_stack_ptr < 0 )
! 1386: YY_FATAL_ERROR( "start-condition stack underflow" );
! 1387:
! 1388: BEGIN(yy_start_stack[yy_start_stack_ptr]);
! 1389: }
! 1390: #endif
! 1391:
! 1392:
! 1393: #ifndef YY_NO_TOP_STATE
! 1394: %-
! 1395: static int yy_top_state()
! 1396: %+
! 1397: int yyFlexLexer::yy_top_state()
! 1398: %*
! 1399: {
! 1400: return yy_start_stack[yy_start_stack_ptr - 1];
! 1401: }
! 1402: #endif
! 1403:
! 1404: #ifndef YY_EXIT_FAILURE
! 1405: #define YY_EXIT_FAILURE 2
! 1406: #endif
! 1407:
! 1408: %-
! 1409: #ifdef YY_USE_PROTOS
! 1410: static void yy_fatal_error( yyconst char msg[] )
! 1411: #else
! 1412: static void yy_fatal_error( msg )
! 1413: char msg[];
! 1414: #endif
! 1415: {
! 1416: (void) fprintf( stderr, "%s\n", msg );
! 1417: exit( YY_EXIT_FAILURE );
! 1418: }
! 1419:
! 1420: %+
! 1421:
! 1422: void yyFlexLexer::LexerError( yyconst char msg[] )
! 1423: {
! 1424: cerr << msg << '\n';
! 1425: exit( YY_EXIT_FAILURE );
! 1426: }
! 1427: %*
! 1428:
! 1429:
! 1430: /* Redefine yyless() so it works in section 3 code. */
! 1431:
! 1432: #undef yyless
! 1433: #define yyless(n) \
! 1434: do \
! 1435: { \
! 1436: /* Undo effects of setting up yytext. */ \
! 1437: yytext[yyleng] = yy_hold_char; \
! 1438: yy_c_buf_p = yytext + n - YY_MORE_ADJ; \
! 1439: yy_hold_char = *yy_c_buf_p; \
! 1440: *yy_c_buf_p = '\0'; \
! 1441: yyleng = n; \
! 1442: } \
! 1443: while ( 0 )
! 1444:
! 1445:
! 1446: /* Internal utility routines. */
! 1447:
! 1448: #ifndef yytext_ptr
! 1449: #ifdef YY_USE_PROTOS
! 1450: static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
! 1451: #else
! 1452: static void yy_flex_strncpy( s1, s2, n )
! 1453: char *s1;
! 1454: yyconst char *s2;
! 1455: int n;
! 1456: #endif
! 1457: {
! 1458: register int i;
! 1459: for ( i = 0; i < n; ++i )
! 1460: s1[i] = s2[i];
! 1461: }
! 1462: #endif
! 1463:
! 1464:
! 1465: #ifdef YY_USE_PROTOS
! 1466: static void *yy_flex_alloc( yy_size_t size )
! 1467: #else
! 1468: static void *yy_flex_alloc( size )
! 1469: yy_size_t size;
! 1470: #endif
! 1471: {
! 1472: return (void *) malloc( size );
! 1473: }
! 1474:
! 1475: #ifdef YY_USE_PROTOS
! 1476: static void *yy_flex_realloc( void *ptr, yy_size_t size )
! 1477: #else
! 1478: static void *yy_flex_realloc( ptr, size )
! 1479: void *ptr;
! 1480: yy_size_t size;
! 1481: #endif
! 1482: {
! 1483: /* The cast to (char *) in the following accommodates both
! 1484: * implementations that use char* generic pointers, and those
! 1485: * that use void* generic pointers. It works with the latter
! 1486: * because both ANSI C and C++ allow castless assignment from
! 1487: * any pointer type to void*, and deal with argument conversions
! 1488: * as though doing an assignment.
! 1489: */
! 1490: return (void *) realloc( (char *) ptr, size );
! 1491: }
! 1492:
! 1493: #ifdef YY_USE_PROTOS
! 1494: static void yy_flex_free( void *ptr )
! 1495: #else
! 1496: static void yy_flex_free( ptr )
! 1497: void *ptr;
! 1498: #endif
! 1499: {
! 1500: free( ptr );
! 1501: }
! 1502:
! 1503: #if YY_MAIN
! 1504: int main()
! 1505: {
! 1506: yylex();
! 1507: return 0;
! 1508: }
! 1509: #endif