Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

bif_lex.cc

Go to the documentation of this file.
00001 #line 2 "bif_lex.cc"
00002 /* A lexical scanner generated by flex */
00003 
00004 /* Scanner skeleton version:
00005  * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
00006  */
00007 
00008 #define FLEX_SCANNER
00009 #define YY_FLEX_MAJOR_VERSION 2
00010 #define YY_FLEX_MINOR_VERSION 5
00011 
00012 #include <stdio.h>
00013 #include <unistd.h>
00014 
00015 
00016 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
00017 #ifdef c_plusplus
00018 #ifndef __cplusplus
00019 #define __cplusplus
00020 #endif
00021 #endif
00022 
00023 
00024 #ifdef __cplusplus
00025 
00026 #include <stdlib.h>
00027 
00028 /* Use prototypes in function declarations. */
00029 #define YY_USE_PROTOS
00030 
00031 /* The "const" storage-class-modifier is valid. */
00032 #define YY_USE_CONST
00033 
00034 #else   /* ! __cplusplus */
00035 
00036 #if __STDC__
00037 
00038 #define YY_USE_PROTOS
00039 #define YY_USE_CONST
00040 
00041 #endif  /* __STDC__ */
00042 #endif  /* ! __cplusplus */
00043 
00044 #ifdef __TURBOC__
00045  #pragma warn -rch
00046  #pragma warn -use
00047 #include <io.h>
00048 #include <stdlib.h>
00049 #define YY_USE_CONST
00050 #define YY_USE_PROTOS
00051 #endif
00052 
00053 #ifdef YY_USE_CONST
00054 #define yyconst const
00055 #else
00056 #define yyconst
00057 #endif
00058 
00059 
00060 #ifdef YY_USE_PROTOS
00061 #define YY_PROTO(proto) proto
00062 #else
00063 #define YY_PROTO(proto) ()
00064 #endif
00065 
00066 /* Returned upon end-of-file. */
00067 #define YY_NULL 0
00068 
00069 /* Promotes a possibly negative, possibly signed char to an unsigned
00070  * integer for use as an array index.  If the signed char is negative,
00071  * we want to instead treat it as an 8-bit unsigned char, hence the
00072  * double cast.
00073  */
00074 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
00075 
00076 /* Enter a start condition.  This macro really ought to take a parameter,
00077  * but we do it the disgusting crufty way forced on us by the ()-less
00078  * definition of BEGIN.
00079  */
00080 #define BEGIN yy_start = 1 + 2 *
00081 
00082 /* Translate the current start state into a value that can be later handed
00083  * to BEGIN to return to the state.  The YYSTATE alias is for lex
00084  * compatibility.
00085  */
00086 #define YY_START ((yy_start - 1) / 2)
00087 #define YYSTATE YY_START
00088 
00089 /* Action number for EOF rule of a given start state. */
00090 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
00091 
00092 /* Special action meaning "start processing a new file". */
00093 #define YY_NEW_FILE yyrestart( yyin )
00094 
00095 #define YY_END_OF_BUFFER_CHAR 0
00096 
00097 /* Size of default input buffer. */
00098 #define YY_BUF_SIZE 16384
00099 
00100 typedef struct yy_buffer_state *YY_BUFFER_STATE;
00101 
00102 extern int yyleng;
00103 extern FILE *yyin, *yyout;
00104 
00105 #define EOB_ACT_CONTINUE_SCAN 0
00106 #define EOB_ACT_END_OF_FILE 1
00107 #define EOB_ACT_LAST_MATCH 2
00108 
00109 /* The funky do-while in the following #define is used to turn the definition
00110  * int a single C statement (which needs a semi-colon terminator).  This
00111  * avoids problems with code like:
00112  *
00113  *      if ( condition_holds )
00114  *              yyless( 5 );
00115  *      else
00116  *              do_something_else();
00117  *
00118  * Prior to using the do-while the compiler would get upset at the
00119  * "else" because it interpreted the "if" statement as being all
00120  * done when it reached the ';' after the yyless() call.
00121  */
00122 
00123 /* Return all but the first 'n' matched characters back to the input stream. */
00124 
00125 #define yyless(n) \
00126         do \
00127                 { \
00128                 /* Undo effects of setting up yytext. */ \
00129                 *yy_cp = yy_hold_char; \
00130                 YY_RESTORE_YY_MORE_OFFSET \
00131                 yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
00132                 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
00133                 } \
00134         while ( 0 )
00135 
00136 #define unput(c) yyunput( c, yytext_ptr )
00137 
00138 /* The following is because we cannot portably get our hands on size_t
00139  * (without autoconf's help, which isn't available because we want
00140  * flex-generated scanners to compile on their own).
00141  */
00142 typedef unsigned int yy_size_t;
00143 
00144 
00145 struct yy_buffer_state
00146         {
00147         FILE *yy_input_file;
00148 
00149         char *yy_ch_buf;                /* input buffer */
00150         char *yy_buf_pos;               /* current position in input buffer */
00151 
00152         /* Size of input buffer in bytes, not including room for EOB
00153          * characters.
00154          */
00155         yy_size_t yy_buf_size;
00156 
00157         /* Number of characters read into yy_ch_buf, not including EOB
00158          * characters.
00159          */
00160         int yy_n_chars;
00161 
00162         /* Whether we "own" the buffer - i.e., we know we created it,
00163          * and can realloc() it to grow it, and should free() it to
00164          * delete it.
00165          */
00166         int yy_is_our_buffer;
00167 
00168         /* Whether this is an "interactive" input source; if so, and
00169          * if we're using stdio for input, then we want to use getc()
00170          * instead of fread(), to make sure we stop fetching input after
00171          * each newline.
00172          */
00173         int yy_is_interactive;
00174 
00175         /* Whether we're considered to be at the beginning of a line.
00176          * If so, '^' rules will be active on the next match, otherwise
00177          * not.
00178          */
00179         int yy_at_bol;
00180 
00181         /* Whether to try to fill the input buffer when we reach the
00182          * end of it.
00183          */
00184         int yy_fill_buffer;
00185 
00186         int yy_buffer_status;
00187 #define YY_BUFFER_NEW 0
00188 #define YY_BUFFER_NORMAL 1
00189         /* When an EOF's been seen but there's still some text to process
00190          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
00191          * shouldn't try reading from the input source any more.  We might
00192          * still have a bunch of tokens to match, though, because of
00193          * possible backing-up.
00194          *
00195          * When we actually see the EOF, we change the status to "new"
00196          * (via yyrestart()), so that the user can continue scanning by
00197          * just pointing yyin at a new input file.
00198          */
00199 #define YY_BUFFER_EOF_PENDING 2
00200         };
00201 
00202 static YY_BUFFER_STATE yy_current_buffer = 0;
00203 
00204 /* We provide macros for accessing buffer states in case in the
00205  * future we want to put the buffer states in a more general
00206  * "scanner state".
00207  */
00208 #define YY_CURRENT_BUFFER yy_current_buffer
00209 
00210 
00211 /* yy_hold_char holds the character lost when yytext is formed. */
00212 static char yy_hold_char;
00213 
00214 static int yy_n_chars;          /* number of characters read into yy_ch_buf */
00215 
00216 
00217 int yyleng;
00218 
00219 /* Points to current character in buffer. */
00220 static char *yy_c_buf_p = (char *) 0;
00221 static int yy_init = 1;         /* whether we need to initialize */
00222 static int yy_start = 0;        /* start state number */
00223 
00224 /* Flag which is used to allow yywrap()'s to do buffer switches
00225  * instead of setting up a fresh yyin.  A bit of a hack ...
00226  */
00227 static int yy_did_buffer_switch_on_eof;
00228 
00229 void yyrestart YY_PROTO(( FILE *input_file ));
00230 
00231 void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
00232 void yy_load_buffer_state YY_PROTO(( void ));
00233 YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
00234 void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
00235 void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
00236 void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
00237 #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
00238 
00239 YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
00240 YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
00241 YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
00242 
00243 static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
00244 static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
00245 static void yy_flex_free YY_PROTO(( void * ));
00246 
00247 #define yy_new_buffer yy_create_buffer
00248 
00249 #define yy_set_interactive(is_interactive) \
00250         { \
00251         if ( ! yy_current_buffer ) \
00252                 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
00253         yy_current_buffer->yy_is_interactive = is_interactive; \
00254         }
00255 
00256 #define yy_set_bol(at_bol) \
00257         { \
00258         if ( ! yy_current_buffer ) \
00259                 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
00260         yy_current_buffer->yy_at_bol = at_bol; \
00261         }
00262 
00263 #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
00264 
00265 typedef unsigned char YY_CHAR;
00266 FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
00267 typedef int yy_state_type;
00268 extern char *yytext;
00269 #define yytext_ptr yytext
00270 
00271 static yy_state_type yy_get_previous_state YY_PROTO(( void ));
00272 static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
00273 static int yy_get_next_buffer YY_PROTO(( void ));
00274 static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
00275 
00276 /* Done after the current pattern has been matched and before the
00277  * corresponding action - sets up yytext.
00278  */
00279 #define YY_DO_BEFORE_ACTION \
00280         yytext_ptr = yy_bp; \
00281         yyleng = (int) (yy_cp - yy_bp); \
00282         yy_hold_char = *yy_cp; \
00283         *yy_cp = '\0'; \
00284         yy_c_buf_p = yy_cp;
00285 
00286 #define YY_NUM_RULES 30
00287 #define YY_END_OF_BUFFER 31
00288 static yyconst short int yy_accept[96] =
00289     {   0,
00290         0,    0,   31,   29,    3,    2,   29,    1,   29,   29,
00291         4,   29,   29,   26,   25,   24,   26,   26,   26,   26,
00292         3,    0,   28,    0,    1,    0,    9,   10,    5,    6,
00293        27,    0,    0,    0,    0,    0,    0,   26,   26,   26,
00294        26,   26,   26,    0,    0,    7,    8,   27,   11,    0,
00295         0,    0,    0,    0,   26,   26,   26,   26,   26,    0,
00296         0,    0,    0,    0,    0,   26,   16,   26,   26,   26,
00297        17,    0,    0,   22,    0,    0,    0,   15,   14,   26,
00298        26,   19,   18,   21,    0,    0,   26,   26,   23,   20,
00299        26,   26,   12,   13,    0
00300 
00301     } ;
00302 
00303 static yyconst int yy_ec[256] =
00304     {   0,
00305         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
00306         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00307         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00308         1,    2,    1,    4,    5,    1,    6,    7,    1,    8,
00309         9,    1,    1,   10,    1,   11,    1,   12,   12,   12,
00310        12,   12,   12,   12,   12,   13,   13,   10,   10,    1,
00311        10,    1,    1,   14,   15,   16,   17,   16,   18,   19,
00312        20,   21,   22,   23,   23,   23,   23,   23,   24,   25,
00313        23,   26,   27,   28,   29,   23,   30,   23,   23,   23,
00314         1,   31,    1,    1,   23,    1,   16,   16,   32,   16,
00315 
00316        33,   34,   23,   23,   35,   23,   23,   23,   36,   37,
00317        38,   23,   23,   39,   40,   41,   42,   43,   44,   45,
00318        23,   23,   46,    1,   47,    1,    1,    1,    1,    1,
00319         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00320         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00321         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00322         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00323         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00324         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00325         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00326 
00327         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00328         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00329         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00330         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00331         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00332         1,    1,    1,    1,    1
00333     } ;
00334 
00335 static yyconst int yy_meta[48] =
00336     {   0,
00337         1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
00338         1,    3,    3,    1,    4,    4,    4,    4,    4,    4,
00339         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
00340         1,    4,    4,    4,    4,    4,    4,    4,    4,    4,
00341         4,    4,    4,    4,    4,    1,    1
00342     } ;
00343 
00344 static yyconst short int yy_base[101] =
00345     {   0,
00346         0,    0,  145,  146,  142,  146,   44,    0,   43,    0,
00347       146,  132,   35,    0,    0,    0,  104,   18,   99,  107,
00348       137,   50,  146,   46,    0,   10,  146,  146,  146,  146,
00349         0,  127,  111,  112,  106,  102,   98,    0,   81,   75,
00350        83,   78,   70,   55,   88,  146,  146,    0,  146,   93,
00351        93,   84,   95,   87,   68,   66,   62,   66,   58,    0,
00352        52,   82,   74,   77,   65,   47,    0,   46,   44,   49,
00353       146,   69,   68,  146,   66,   60,   59,    0,    0,   41,
00354        33,  146,  146,  146,   59,   58,   33,   37,  146,  146,
00355        31,   25,    0,    0,  146,  122,  126,   58,  128,  130
00356 
00357     } ;
00358 
00359 static yyconst short int yy_def[101] =
00360     {   0,
00361        95,    1,   95,   95,   95,   95,   96,   97,   95,   98,
00362        95,   95,   95,   99,   99,   99,   99,   99,   99,   99,
00363        95,   96,   95,   96,   97,   95,   95,   95,   95,   95,
00364       100,   95,   95,   95,   95,   95,   95,   99,   99,   99,
00365        99,   99,   99,   96,   96,   95,   95,  100,   95,   95,
00366        95,   95,   95,   95,   99,   99,   99,   99,   99,   45,
00367        95,   95,   95,   95,   95,   99,   99,   99,   99,   99,
00368        95,   95,   95,   95,   95,   95,   95,   99,   99,   99,
00369        99,   95,   95,   95,   95,   95,   99,   99,   95,   95,
00370        99,   99,   99,   99,    0,   95,   95,   95,   95,   95
00371 
00372     } ;
00373 
00374 static yyconst short int yy_nxt[194] =
00375     {   0,
00376         4,    5,    6,    7,    8,    9,   10,    4,    4,   11,
00377        12,    4,    4,   13,   14,   14,   14,   14,   15,   14,
00378        14,   14,   14,   14,   14,   14,   14,   16,   14,   14,
00379         4,   17,   18,   19,   14,   14,   14,   14,   20,   14,
00380        14,   14,   14,   14,   14,    4,    4,   23,   26,   33,
00381        27,   28,   34,   23,   40,   46,   47,   44,   23,   35,
00382        41,   31,   36,   94,   37,   71,   44,   93,   72,   92,
00383        91,   90,   89,   88,   24,   87,   86,   85,   73,   84,
00384        24,   83,   82,   81,   80,   24,   79,   78,   29,   30,
00385        45,   23,   77,   76,   75,   74,   70,   69,   68,   60,
00386 
00387        60,   67,   60,   60,   60,   60,   60,   66,   65,   64,
00388        63,   62,   61,   59,   58,   57,   56,   55,   24,   60,
00389        60,   60,   22,   54,   22,   22,   25,   53,   25,   25,
00390        38,   38,   48,   48,   52,   51,   50,   49,   21,   43,
00391        42,   39,   32,   21,   95,    3,   95,   95,   95,   95,
00392        95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
00393        95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
00394        95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
00395        95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
00396        95,   95,   95
00397 
00398     } ;
00399 
00400 static yyconst short int yy_chk[194] =
00401     {   0,
00402         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00403         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00404         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00405         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00406         1,    1,    1,    1,    1,    1,    1,    7,    9,   13,
00407         9,    9,   13,   22,   18,   26,   26,   24,   44,   13,
00408        18,   98,   13,   92,   13,   61,   44,   91,   61,   88,
00409        87,   86,   85,   81,    7,   80,   77,   76,   61,   75,
00410        22,   73,   72,   70,   69,   44,   68,   66,    9,    9,
00411        24,   45,   65,   64,   63,   62,   59,   58,   57,   45,
00412 
00413        45,   56,   45,   45,   45,   45,   45,   55,   54,   53,
00414        52,   51,   50,   43,   42,   41,   40,   39,   45,   45,
00415        45,   45,   96,   37,   96,   96,   97,   36,   97,   97,
00416        99,   99,  100,  100,   35,   34,   33,   32,   21,   20,
00417        19,   17,   12,    5,    3,   95,   95,   95,   95,   95,
00418        95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
00419        95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
00420        95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
00421        95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
00422        95,   95,   95
00423 
00424     } ;
00425 
00426 static yy_state_type yy_last_accepting_state;
00427 static char *yy_last_accepting_cpos;
00428 
00429 /* The intent behind this definition is that it'll catch
00430  * any uses of REJECT which flex missed.
00431  */
00432 #define REJECT reject_used_but_not_detected
00433 #define yymore() yymore_used_but_not_detected
00434 #define YY_MORE_ADJ 0
00435 #define YY_RESTORE_YY_MORE_OFFSET
00436 char *yytext;
00437 #line 1 "./builtin-func.l"
00438 #define INITIAL 0
00439 #line 2 "./builtin-func.l"
00440 // $Id: builtin-func.l,v 1.3 2005/09/07 17:10:39 vern Exp $
00441 
00442 #include <string.h>
00443 #include "bif_arg.h"
00444 #include "bif_parse.h"
00445 
00446 char* copy_string(const char* s)
00447         {
00448         char* c = new char[strlen(s)+1];
00449         strcpy(c, s);
00450         return c;
00451         }
00452 
00453 int line_number = 1;
00454 
00455 extern int in_c_code;
00456 
00457 int check_c_mode(int t)
00458         {
00459         if ( ! in_c_code )
00460                 return t;
00461 
00462         yylval.str = copy_string(yytext);
00463         return TOK_C_TOKEN;
00464         }
00465 #line 466 "bif_lex.cc"
00466 
00467 /* Macros after this point can all be overridden by user definitions in
00468  * section 1.
00469  */
00470 
00471 #ifndef YY_SKIP_YYWRAP
00472 #ifdef __cplusplus
00473 extern "C" int yywrap YY_PROTO(( void ));
00474 #else
00475 extern int yywrap YY_PROTO(( void ));
00476 #endif
00477 #endif
00478 
00479 #ifndef YY_NO_UNPUT
00480 static void yyunput YY_PROTO(( int c, char *buf_ptr ));
00481 #endif
00482 
00483 #ifndef yytext_ptr
00484 static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
00485 #endif
00486 
00487 #ifdef YY_NEED_STRLEN
00488 static int yy_flex_strlen YY_PROTO(( yyconst char * ));
00489 #endif
00490 
00491 #ifndef YY_NO_INPUT
00492 #ifdef __cplusplus
00493 static int yyinput YY_PROTO(( void ));
00494 #else
00495 static int input YY_PROTO(( void ));
00496 #endif
00497 #endif
00498 
00499 #if YY_STACK_USED
00500 static int yy_start_stack_ptr = 0;
00501 static int yy_start_stack_depth = 0;
00502 static int *yy_start_stack = 0;
00503 #ifndef YY_NO_PUSH_STATE
00504 static void yy_push_state YY_PROTO(( int new_state ));
00505 #endif
00506 #ifndef YY_NO_POP_STATE
00507 static void yy_pop_state YY_PROTO(( void ));
00508 #endif
00509 #ifndef YY_NO_TOP_STATE
00510 static int yy_top_state YY_PROTO(( void ));
00511 #endif
00512 
00513 #else
00514 #define YY_NO_PUSH_STATE 1
00515 #define YY_NO_POP_STATE 1
00516 #define YY_NO_TOP_STATE 1
00517 #endif
00518 
00519 #ifdef YY_MALLOC_DECL
00520 YY_MALLOC_DECL
00521 #else
00522 #if __STDC__
00523 #ifndef __cplusplus
00524 #include <stdlib.h>
00525 #endif
00526 #else
00527 /* Just try to get by without declaring the routines.  This will fail
00528  * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
00529  * or sizeof(void*) != sizeof(int).
00530  */
00531 #endif
00532 #endif
00533 
00534 /* Amount of stuff to slurp up with each read. */
00535 #ifndef YY_READ_BUF_SIZE
00536 #define YY_READ_BUF_SIZE 8192
00537 #endif
00538 
00539 /* Copy whatever the last rule matched to the standard output. */
00540 
00541 #ifndef ECHO
00542 /* This used to be an fputs(), but since the string might contain NUL's,
00543  * we now use fwrite().
00544  */
00545 #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
00546 #endif
00547 
00548 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
00549  * is returned in "result".
00550  */
00551 #ifndef YY_INPUT
00552 #define YY_INPUT(buf,result,max_size) \
00553         if ( yy_current_buffer->yy_is_interactive ) \
00554                 { \
00555                 int c = '*', n; \
00556                 for ( n = 0; n < max_size && \
00557                              (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
00558                         buf[n] = (char) c; \
00559                 if ( c == '\n' ) \
00560                         buf[n++] = (char) c; \
00561                 if ( c == EOF && ferror( yyin ) ) \
00562                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
00563                 result = n; \
00564                 } \
00565         else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
00566                   && ferror( yyin ) ) \
00567                 YY_FATAL_ERROR( "input in flex scanner failed" );
00568 #endif
00569 
00570 /* No semi-colon after return; correct usage is to write "yyterminate();" -
00571  * we don't want an extra ';' after the "return" because that will cause
00572  * some compilers to complain about unreachable statements.
00573  */
00574 #ifndef yyterminate
00575 #define yyterminate() return YY_NULL
00576 #endif
00577 
00578 /* Number of entries by which start-condition stack grows. */
00579 #ifndef YY_START_STACK_INCR
00580 #define YY_START_STACK_INCR 25
00581 #endif
00582 
00583 /* Report a fatal error. */
00584 #ifndef YY_FATAL_ERROR
00585 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
00586 #endif
00587 
00588 /* Default declaration of generated scanner - a define so the user can
00589  * easily add parameters.
00590  */
00591 #ifndef YY_DECL
00592 #define YY_DECL int yylex YY_PROTO(( void ))
00593 #endif
00594 
00595 /* Code executed at the beginning of each rule, after yytext and yyleng
00596  * have been set up.
00597  */
00598 #ifndef YY_USER_ACTION
00599 #define YY_USER_ACTION
00600 #endif
00601 
00602 /* Code executed at the end of each rule. */
00603 #ifndef YY_BREAK
00604 #define YY_BREAK break;
00605 #endif
00606 
00607 #define YY_RULE_SETUP \
00608         YY_USER_ACTION
00609 
00610 YY_DECL
00611         {
00612         register yy_state_type yy_current_state;
00613         register char *yy_cp = NULL, *yy_bp = NULL;
00614         register int yy_act;
00615 
00616 #line 33 "./builtin-func.l"
00617 
00618 
00619 #line 620 "bif_lex.cc"
00620 
00621         if ( yy_init )
00622                 {
00623                 yy_init = 0;
00624 
00625 #ifdef YY_USER_INIT
00626                 YY_USER_INIT;
00627 #endif
00628 
00629                 if ( ! yy_start )
00630                         yy_start = 1;   /* first start state */
00631 
00632                 if ( ! yyin )
00633                         yyin = stdin;
00634 
00635                 if ( ! yyout )
00636                         yyout = stdout;
00637 
00638                 if ( ! yy_current_buffer )
00639                         yy_current_buffer =
00640                                 yy_create_buffer( yyin, YY_BUF_SIZE );
00641 
00642                 yy_load_buffer_state();
00643                 }
00644 
00645         while ( 1 )             /* loops until end-of-file is reached */
00646                 {
00647                 yy_cp = yy_c_buf_p;
00648 
00649                 /* Support of yytext. */
00650                 *yy_cp = yy_hold_char;
00651 
00652                 /* yy_bp points to the position in yy_ch_buf of the start of
00653                  * the current run.
00654                  */
00655                 yy_bp = yy_cp;
00656 
00657                 yy_current_state = yy_start;
00658 yy_match:
00659                 do
00660                         {
00661                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
00662                         if ( yy_accept[yy_current_state] )
00663                                 {
00664                                 yy_last_accepting_state = yy_current_state;
00665                                 yy_last_accepting_cpos = yy_cp;
00666                                 }
00667                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
00668                                 {
00669                                 yy_current_state = (int) yy_def[yy_current_state];
00670                                 if ( yy_current_state >= 96 )
00671                                         yy_c = yy_meta[(unsigned int) yy_c];
00672                                 }
00673                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
00674                         ++yy_cp;
00675                         }
00676                 while ( yy_base[yy_current_state] != 146 );
00677 
00678 yy_find_action:
00679                 yy_act = yy_accept[yy_current_state];
00680                 if ( yy_act == 0 )
00681                         { /* have to back up */
00682                         yy_cp = yy_last_accepting_cpos;
00683                         yy_current_state = yy_last_accepting_state;
00684                         yy_act = yy_accept[yy_current_state];
00685                         }
00686 
00687                 YY_DO_BEFORE_ACTION;
00688 
00689 
00690 do_action:      /* This label is used only to access EOF actions. */
00691 
00692 
00693                 switch ( yy_act )
00694         { /* beginning of action switch */
00695                         case 0: /* must back up */
00696                         /* undo the effects of YY_DO_BEFORE_ACTION */
00697                         *yy_cp = yy_hold_char;
00698                         yy_cp = yy_last_accepting_cpos;
00699                         yy_current_state = yy_last_accepting_state;
00700                         goto yy_find_action;
00701 
00702 case 1:
00703 YY_RULE_SETUP
00704 #line 35 "./builtin-func.l"
00705 {
00706         yylval.str = copy_string(yytext);
00707         return TOK_COMMENT;
00708         }
00709         YY_BREAK
00710 case 2:
00711 YY_RULE_SETUP
00712 #line 40 "./builtin-func.l"
00713 {
00714         ++line_number;
00715         return TOK_LF;
00716         }
00717         YY_BREAK
00718 case 3:
00719 YY_RULE_SETUP
00720 #line 45 "./builtin-func.l"
00721 {
00722         yylval.str = copy_string(yytext);
00723         return TOK_WS;
00724         }
00725         YY_BREAK
00726 case 4:
00727 YY_RULE_SETUP
00728 #line 50 "./builtin-func.l"
00729 return check_c_mode(yytext[0]);
00730         YY_BREAK
00731 case 5:
00732 YY_RULE_SETUP
00733 #line 52 "./builtin-func.l"
00734 return TOK_LPB;
00735         YY_BREAK
00736 case 6:
00737 YY_RULE_SETUP
00738 #line 53 "./builtin-func.l"
00739 return TOK_RPB;
00740         YY_BREAK
00741 case 7:
00742 YY_RULE_SETUP
00743 #line 54 "./builtin-func.l"
00744 return TOK_LPPB;
00745         YY_BREAK
00746 case 8:
00747 YY_RULE_SETUP
00748 #line 55 "./builtin-func.l"
00749 return TOK_RPPB;
00750         YY_BREAK
00751 case 9:
00752 YY_RULE_SETUP
00753 #line 57 "./builtin-func.l"
00754 return check_c_mode(TOK_LPP);
00755         YY_BREAK
00756 case 10:
00757 YY_RULE_SETUP
00758 #line 58 "./builtin-func.l"
00759 return check_c_mode(TOK_RPP);
00760         YY_BREAK
00761 case 11:
00762 YY_RULE_SETUP
00763 #line 59 "./builtin-func.l"
00764 return check_c_mode(TOK_VAR_ARG);
00765         YY_BREAK
00766 case 12:
00767 YY_RULE_SETUP
00768 #line 60 "./builtin-func.l"
00769 return check_c_mode(TOK_FUNCTION);
00770         YY_BREAK
00771 case 13:
00772 YY_RULE_SETUP
00773 #line 61 "./builtin-func.l"
00774 return check_c_mode(TOK_REWRITER);
00775         YY_BREAK
00776 case 14:
00777 YY_RULE_SETUP
00778 #line 62 "./builtin-func.l"
00779 return check_c_mode(TOK_EVENT);
00780         YY_BREAK
00781 case 15:
00782 YY_RULE_SETUP
00783 #line 63 "./builtin-func.l"
00784 return check_c_mode(TOK_CONST);
00785         YY_BREAK
00786 case 16:
00787 YY_RULE_SETUP
00788 #line 64 "./builtin-func.l"
00789 return check_c_mode(TOK_ENUM);
00790         YY_BREAK
00791 case 17:
00792 YY_RULE_SETUP
00793 #line 66 "./builtin-func.l"
00794 return TOK_ARG;
00795         YY_BREAK
00796 case 18:
00797 YY_RULE_SETUP
00798 #line 67 "./builtin-func.l"
00799 return TOK_ARGS;
00800         YY_BREAK
00801 case 19:
00802 YY_RULE_SETUP
00803 #line 68 "./builtin-func.l"
00804 return TOK_ARGC;
00805         YY_BREAK
00806 case 20:
00807 YY_RULE_SETUP
00808 #line 70 "./builtin-func.l"
00809 return TOK_WRITE;
00810         YY_BREAK
00811 case 21:
00812 YY_RULE_SETUP
00813 #line 71 "./builtin-func.l"
00814 return TOK_PUSH;
00815         YY_BREAK
00816 case 22:
00817 YY_RULE_SETUP
00818 #line 72 "./builtin-func.l"
00819 return TOK_EOF;
00820         YY_BREAK
00821 case 23:
00822 YY_RULE_SETUP
00823 #line 73 "./builtin-func.l"
00824 return TOK_TRACE;
00825         YY_BREAK
00826 case 24:
00827 YY_RULE_SETUP
00828 #line 75 "./builtin-func.l"
00829 yylval.val = 1; return TOK_BOOL;
00830         YY_BREAK
00831 case 25:
00832 YY_RULE_SETUP
00833 #line 76 "./builtin-func.l"
00834 yylval.val = 0; return TOK_BOOL;
00835         YY_BREAK
00836 case 26:
00837 YY_RULE_SETUP
00838 #line 78 "./builtin-func.l"
00839 {
00840         yylval.str = copy_string(yytext);
00841         return TOK_ID;
00842         }
00843         YY_BREAK
00844 case 27:
00845 YY_RULE_SETUP
00846 #line 83 "./builtin-func.l"
00847 {
00848         int t = check_c_mode(TOK_ATTR);
00849 
00850         if ( t == TOK_ATTR )
00851                 {
00852                 yylval.str = copy_string(yytext);
00853                 return TOK_ATTR;
00854                 }
00855         else
00856                 return t;
00857         }
00858         YY_BREAK
00859 case 28:
00860 YY_RULE_SETUP
00861 #line 95 "./builtin-func.l"
00862 {
00863         yylval.str = copy_string(yytext);
00864         return TOK_CSTR;
00865         }
00866         YY_BREAK
00867 case 29:
00868 YY_RULE_SETUP
00869 #line 100 "./builtin-func.l"
00870 {
00871         yylval.val = yytext[0];
00872         return TOK_ATOM;
00873         }
00874         YY_BREAK
00875 case 30:
00876 YY_RULE_SETUP
00877 #line 104 "./builtin-func.l"
00878 ECHO;
00879         YY_BREAK
00880 #line 881 "bif_lex.cc"
00881 case YY_STATE_EOF(INITIAL):
00882         yyterminate();
00883 
00884         case YY_END_OF_BUFFER:
00885                 {
00886                 /* Amount of text matched not including the EOB char. */
00887                 int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
00888 
00889                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
00890                 *yy_cp = yy_hold_char;
00891                 YY_RESTORE_YY_MORE_OFFSET
00892 
00893                 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
00894                         {
00895                         /* We're scanning a new file or input source.  It's
00896                          * possible that this happened because the user
00897                          * just pointed yyin at a new source and called
00898                          * yylex().  If so, then we have to assure
00899                          * consistency between yy_current_buffer and our
00900                          * globals.  Here is the right place to do so, because
00901                          * this is the first action (other than possibly a
00902                          * back-up) that will match for the new input source.
00903                          */
00904                         yy_n_chars = yy_current_buffer->yy_n_chars;
00905                         yy_current_buffer->yy_input_file = yyin;
00906                         yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
00907                         }
00908 
00909                 /* Note that here we test for yy_c_buf_p "<=" to the position
00910                  * of the first EOB in the buffer, since yy_c_buf_p will
00911                  * already have been incremented past the NUL character
00912                  * (since all states make transitions on EOB to the
00913                  * end-of-buffer state).  Contrast this with the test
00914                  * in input().
00915                  */
00916                 if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
00917                         { /* This was really a NUL. */
00918                         yy_state_type yy_next_state;
00919 
00920                         yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
00921 
00922                         yy_current_state = yy_get_previous_state();
00923 
00924                         /* Okay, we're now positioned to make the NUL
00925                          * transition.  We couldn't have
00926                          * yy_get_previous_state() go ahead and do it
00927                          * for us because it doesn't know how to deal
00928                          * with the possibility of jamming (and we don't
00929                          * want to build jamming into it because then it
00930                          * will run more slowly).
00931                          */
00932 
00933                         yy_next_state = yy_try_NUL_trans( yy_current_state );
00934 
00935                         yy_bp = yytext_ptr + YY_MORE_ADJ;
00936 
00937                         if ( yy_next_state )
00938                                 {
00939                                 /* Consume the NUL. */
00940                                 yy_cp = ++yy_c_buf_p;
00941                                 yy_current_state = yy_next_state;
00942                                 goto yy_match;
00943                                 }
00944 
00945                         else
00946                                 {
00947                                 yy_cp = yy_c_buf_p;
00948                                 goto yy_find_action;
00949                                 }
00950                         }
00951 
00952                 else switch ( yy_get_next_buffer() )
00953                         {
00954                         case EOB_ACT_END_OF_FILE:
00955                                 {
00956                                 yy_did_buffer_switch_on_eof = 0;
00957 
00958                                 if ( yywrap() )
00959                                         {
00960                                         /* Note: because we've taken care in
00961                                          * yy_get_next_buffer() to have set up
00962                                          * yytext, we can now set up
00963                                          * yy_c_buf_p so that if some total
00964                                          * hoser (like flex itself) wants to
00965                                          * call the scanner after we return the
00966                                          * YY_NULL, it'll still work - another
00967                                          * YY_NULL will get returned.
00968                                          */
00969                                         yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
00970 
00971                                         yy_act = YY_STATE_EOF(YY_START);
00972                                         goto do_action;
00973                                         }
00974 
00975                                 else
00976                                         {
00977                                         if ( ! yy_did_buffer_switch_on_eof )
00978                                                 YY_NEW_FILE;
00979                                         }
00980                                 break;
00981                                 }
00982 
00983                         case EOB_ACT_CONTINUE_SCAN:
00984                                 yy_c_buf_p =
00985                                         yytext_ptr + yy_amount_of_matched_text;
00986 
00987                                 yy_current_state = yy_get_previous_state();
00988 
00989                                 yy_cp = yy_c_buf_p;
00990                                 yy_bp = yytext_ptr + YY_MORE_ADJ;
00991                                 goto yy_match;
00992 
00993                         case EOB_ACT_LAST_MATCH:
00994                                 yy_c_buf_p =
00995                                 &yy_current_buffer->yy_ch_buf[yy_n_chars];
00996 
00997                                 yy_current_state = yy_get_previous_state();
00998 
00999                                 yy_cp = yy_c_buf_p;
01000                                 yy_bp = yytext_ptr + YY_MORE_ADJ;
01001                                 goto yy_find_action;
01002                         }
01003                 break;
01004                 }
01005 
01006         default:
01007                 YY_FATAL_ERROR(
01008                         "fatal flex scanner internal error--no action found" );
01009         } /* end of action switch */
01010                 } /* end of scanning one token */
01011         } /* end of yylex */
01012 
01013 
01014 /* yy_get_next_buffer - try to read in a new buffer
01015  *
01016  * Returns a code representing an action:
01017  *      EOB_ACT_LAST_MATCH -
01018  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
01019  *      EOB_ACT_END_OF_FILE - end of file
01020  */
01021 
01022 static int yy_get_next_buffer()
01023         {
01024         register char *dest = yy_current_buffer->yy_ch_buf;
01025         register char *source = yytext_ptr;
01026         register int number_to_move, i;
01027         int ret_val;
01028 
01029         if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
01030                 YY_FATAL_ERROR(
01031                 "fatal flex scanner internal error--end of buffer missed" );
01032 
01033         if ( yy_current_buffer->yy_fill_buffer == 0 )
01034                 { /* Don't try to fill the buffer, so this is an EOF. */
01035                 if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
01036                         {
01037                         /* We matched a single character, the EOB, so
01038                          * treat this as a final EOF.
01039                          */
01040                         return EOB_ACT_END_OF_FILE;
01041                         }
01042 
01043                 else
01044                         {
01045                         /* We matched some text prior to the EOB, first
01046                          * process it.
01047                          */
01048                         return EOB_ACT_LAST_MATCH;
01049                         }
01050                 }
01051 
01052         /* Try to read more data. */
01053 
01054         /* First move last chars to start of buffer. */
01055         number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
01056 
01057         for ( i = 0; i < number_to_move; ++i )
01058                 *(dest++) = *(source++);
01059 
01060         if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
01061                 /* don't do the read, it's not guaranteed to return an EOF,
01062                  * just force an EOF
01063                  */
01064                 yy_current_buffer->yy_n_chars = yy_n_chars = 0;
01065 
01066         else
01067                 {
01068                 int num_to_read =
01069                         yy_current_buffer->yy_buf_size - number_to_move - 1;
01070 
01071                 while ( num_to_read <= 0 )
01072                         { /* Not enough room in the buffer - grow it. */
01073 #ifdef YY_USES_REJECT
01074                         YY_FATAL_ERROR(
01075 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
01076 #else
01077 
01078                         /* just a shorter name for the current buffer */
01079                         YY_BUFFER_STATE b = yy_current_buffer;
01080 
01081                         int yy_c_buf_p_offset =
01082                                 (int) (yy_c_buf_p - b->yy_ch_buf);
01083 
01084                         if ( b->yy_is_our_buffer )
01085                                 {
01086                                 int new_size = b->yy_buf_size * 2;
01087 
01088                                 if ( new_size <= 0 )
01089                                         b->yy_buf_size += b->yy_buf_size / 8;
01090                                 else
01091                                         b->yy_buf_size *= 2;
01092 
01093                                 b->yy_ch_buf = (char *)
01094                                         /* Include room in for 2 EOB chars. */
01095                                         yy_flex_realloc( (void *) b->yy_ch_buf,
01096                                                          b->yy_buf_size + 2 );
01097                                 }
01098                         else
01099                                 /* Can't grow it, we don't own it. */
01100                                 b->yy_ch_buf = 0;
01101 
01102                         if ( ! b->yy_ch_buf )
01103                                 YY_FATAL_ERROR(
01104                                 "fatal error - scanner input buffer overflow" );
01105 
01106                         yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
01107 
01108                         num_to_read = yy_current_buffer->yy_buf_size -
01109                                                 number_to_move - 1;
01110 #endif
01111                         }
01112 
01113                 if ( num_to_read > YY_READ_BUF_SIZE )
01114                         num_to_read = YY_READ_BUF_SIZE;
01115 
01116                 /* Read in more data. */
01117                 YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
01118                         yy_n_chars, num_to_read );
01119 
01120                 yy_current_buffer->yy_n_chars = yy_n_chars;
01121                 }
01122 
01123         if ( yy_n_chars == 0 )
01124                 {
01125                 if ( number_to_move == YY_MORE_ADJ )
01126                         {
01127                         ret_val = EOB_ACT_END_OF_FILE;
01128                         yyrestart( yyin );
01129                         }
01130 
01131                 else
01132                         {
01133                         ret_val = EOB_ACT_LAST_MATCH;
01134                         yy_current_buffer->yy_buffer_status =
01135                                 YY_BUFFER_EOF_PENDING;
01136                         }
01137                 }
01138 
01139         else
01140                 ret_val = EOB_ACT_CONTINUE_SCAN;
01141 
01142         yy_n_chars += number_to_move;
01143         yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
01144         yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
01145 
01146         yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
01147 
01148         return ret_val;
01149         }
01150 
01151 
01152 /* yy_get_previous_state - get the state just before the EOB char was reached */
01153 
01154 static yy_state_type yy_get_previous_state()
01155         {
01156         register yy_state_type yy_current_state;
01157         register char *yy_cp;
01158 
01159         yy_current_state = yy_start;
01160 
01161         for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
01162                 {
01163                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
01164                 if ( yy_accept[yy_current_state] )
01165                         {
01166                         yy_last_accepting_state = yy_current_state;
01167                         yy_last_accepting_cpos = yy_cp;
01168                         }
01169                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
01170                         {
01171                         yy_current_state = (int) yy_def[yy_current_state];
01172                         if ( yy_current_state >= 96 )
01173                                 yy_c = yy_meta[(unsigned int) yy_c];
01174                         }
01175                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
01176                 }
01177 
01178         return yy_current_state;
01179         }
01180 
01181 
01182 /* yy_try_NUL_trans - try to make a transition on the NUL character
01183  *
01184  * synopsis
01185  *      next_state = yy_try_NUL_trans( current_state );
01186  */
01187 
01188 #ifdef YY_USE_PROTOS
01189 static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
01190 #else
01191 static yy_state_type yy_try_NUL_trans( yy_current_state )
01192 yy_state_type yy_current_state;
01193 #endif
01194         {
01195         register int yy_is_jam;
01196         register char *yy_cp = yy_c_buf_p;
01197 
01198         register YY_CHAR yy_c = 1;
01199         if ( yy_accept[yy_current_state] )
01200                 {
01201                 yy_last_accepting_state = yy_current_state;
01202                 yy_last_accepting_cpos = yy_cp;
01203                 }
01204         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
01205                 {
01206                 yy_current_state = (int) yy_def[yy_current_state];
01207                 if ( yy_current_state >= 96 )
01208                         yy_c = yy_meta[(unsigned int) yy_c];
01209                 }
01210         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
01211         yy_is_jam = (yy_current_state == 95);
01212 
01213         return yy_is_jam ? 0 : yy_current_state;
01214         }
01215 
01216 
01217 #ifndef YY_NO_UNPUT
01218 #ifdef YY_USE_PROTOS
01219 static void yyunput( int c, register char *yy_bp )
01220 #else
01221 static void yyunput( c, yy_bp )
01222 int c;
01223 register char *yy_bp;
01224 #endif
01225         {
01226         register char *yy_cp = yy_c_buf_p;
01227 
01228         /* undo effects of setting up yytext */
01229         *yy_cp = yy_hold_char;
01230 
01231         if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
01232                 { /* need to shift things up to make room */
01233                 /* +2 for EOB chars. */
01234                 register int number_to_move = yy_n_chars + 2;
01235                 register char *dest = &yy_current_buffer->yy_ch_buf[
01236                                         yy_current_buffer->yy_buf_size + 2];
01237                 register char *source =
01238                                 &yy_current_buffer->yy_ch_buf[number_to_move];
01239 
01240                 while ( source > yy_current_buffer->yy_ch_buf )
01241                         *--dest = *--source;
01242 
01243                 yy_cp += (int) (dest - source);
01244                 yy_bp += (int) (dest - source);
01245                 yy_current_buffer->yy_n_chars =
01246                         yy_n_chars = yy_current_buffer->yy_buf_size;
01247 
01248                 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
01249                         YY_FATAL_ERROR( "flex scanner push-back overflow" );
01250                 }
01251 
01252         *--yy_cp = (char) c;
01253 
01254 
01255         yytext_ptr = yy_bp;
01256         yy_hold_char = *yy_cp;
01257         yy_c_buf_p = yy_cp;
01258         }
01259 #endif  /* ifndef YY_NO_UNPUT */
01260 
01261 
01262 #ifndef YY_NO_INPUT
01263 #ifdef __cplusplus
01264 static int yyinput()
01265 #else
01266 static int input()
01267 #endif
01268         {
01269         int c;
01270 
01271         *yy_c_buf_p = yy_hold_char;
01272 
01273         if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
01274                 {
01275                 /* yy_c_buf_p now points to the character we want to return.
01276                  * If this occurs *before* the EOB characters, then it's a
01277                  * valid NUL; if not, then we've hit the end of the buffer.
01278                  */
01279                 if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
01280                         /* This was really a NUL. */
01281                         *yy_c_buf_p = '\0';
01282 
01283                 else
01284                         { /* need more input */
01285                         int offset = yy_c_buf_p - yytext_ptr;
01286                         ++yy_c_buf_p;
01287 
01288                         switch ( yy_get_next_buffer() )
01289                                 {
01290                                 case EOB_ACT_LAST_MATCH:
01291                                         /* This happens because yy_g_n_b()
01292                                          * sees that we've accumulated a
01293                                          * token and flags that we need to
01294                                          * try matching the token before
01295                                          * proceeding.  But for input(),
01296                                          * there's no matching to consider.
01297                                          * So convert the EOB_ACT_LAST_MATCH
01298                                          * to EOB_ACT_END_OF_FILE.
01299                                          */
01300 
01301                                         /* Reset buffer status. */
01302                                         yyrestart( yyin );
01303 
01304                                         /* fall through */
01305 
01306                                 case EOB_ACT_END_OF_FILE:
01307                                         {
01308                                         if ( yywrap() )
01309                                                 return EOF;
01310 
01311                                         if ( ! yy_did_buffer_switch_on_eof )
01312                                                 YY_NEW_FILE;
01313 #ifdef __cplusplus
01314                                         return yyinput();
01315 #else
01316                                         return input();
01317 #endif
01318                                         }
01319 
01320                                 case EOB_ACT_CONTINUE_SCAN:
01321                                         yy_c_buf_p = yytext_ptr + offset;
01322                                         break;
01323                                 }
01324                         }
01325                 }
01326 
01327         c = *(unsigned char *) yy_c_buf_p;      /* cast for 8-bit char's */
01328         *yy_c_buf_p = '\0';     /* preserve yytext */
01329         yy_hold_char = *++yy_c_buf_p;
01330 
01331 
01332         return c;
01333         }
01334 #endif /* YY_NO_INPUT */
01335 
01336 #ifdef YY_USE_PROTOS
01337 void yyrestart( FILE *input_file )
01338 #else
01339 void yyrestart( input_file )
01340 FILE *input_file;
01341 #endif
01342         {
01343         if ( ! yy_current_buffer )
01344                 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
01345 
01346         yy_init_buffer( yy_current_buffer, input_file );
01347         yy_load_buffer_state();
01348         }
01349 
01350 
01351 #ifdef YY_USE_PROTOS
01352 void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
01353 #else
01354 void yy_switch_to_buffer( new_buffer )
01355 YY_BUFFER_STATE new_buffer;
01356 #endif
01357         {
01358         if ( yy_current_buffer == new_buffer )
01359                 return;
01360 
01361         if ( yy_current_buffer )
01362                 {
01363                 /* Flush out information for old buffer. */
01364                 *yy_c_buf_p = yy_hold_char;
01365                 yy_current_buffer->yy_buf_pos = yy_c_buf_p;
01366                 yy_current_buffer->yy_n_chars = yy_n_chars;
01367                 }
01368 
01369         yy_current_buffer = new_buffer;
01370         yy_load_buffer_state();
01371 
01372         /* We don't actually know whether we did this switch during
01373          * EOF (yywrap()) processing, but the only time this flag
01374          * is looked at is after yywrap() is called, so it's safe
01375          * to go ahead and always set it.
01376          */
01377         yy_did_buffer_switch_on_eof = 1;
01378         }
01379 
01380 
01381 #ifdef YY_USE_PROTOS
01382 void yy_load_buffer_state( void )
01383 #else
01384 void yy_load_buffer_state()
01385 #endif
01386         {
01387         yy_n_chars = yy_current_buffer->yy_n_chars;
01388         yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
01389         yyin = yy_current_buffer->yy_input_file;
01390         yy_hold_char = *yy_c_buf_p;
01391         }
01392 
01393 
01394 #ifdef YY_USE_PROTOS
01395 YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
01396 #else
01397 YY_BUFFER_STATE yy_create_buffer( file, size )
01398 FILE *file;
01399 int size;
01400 #endif
01401         {
01402         YY_BUFFER_STATE b;
01403 
01404         b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
01405         if ( ! b )
01406                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
01407 
01408         b->yy_buf_size = size;
01409 
01410         /* yy_ch_buf has to be 2 characters longer than the size given because
01411          * we need to put in 2 end-of-buffer characters.
01412          */
01413         b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
01414         if ( ! b->yy_ch_buf )
01415                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
01416 
01417         b->yy_is_our_buffer = 1;
01418 
01419         yy_init_buffer( b, file );
01420 
01421         return b;
01422         }
01423 
01424 
01425 #ifdef YY_USE_PROTOS
01426 void yy_delete_buffer( YY_BUFFER_STATE b )
01427 #else
01428 void yy_delete_buffer( b )
01429 YY_BUFFER_STATE b;
01430 #endif
01431         {
01432         if ( ! b )
01433                 return;
01434 
01435         if ( b == yy_current_buffer )
01436                 yy_current_buffer = (YY_BUFFER_STATE) 0;
01437 
01438         if ( b->yy_is_our_buffer )
01439                 yy_flex_free( (void *) b->yy_ch_buf );
01440 
01441         yy_flex_free( (void *) b );
01442         }
01443 
01444 
01445 
01446 #ifdef YY_USE_PROTOS
01447 void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
01448 #else
01449 void yy_init_buffer( b, file )
01450 YY_BUFFER_STATE b;
01451 FILE *file;
01452 #endif
01453 
01454 
01455         {
01456         yy_flush_buffer( b );
01457 
01458         b->yy_input_file = file;
01459         b->yy_fill_buffer = 1;
01460 
01461 #if YY_ALWAYS_INTERACTIVE
01462         b->yy_is_interactive = 1;
01463 #else
01464 #if YY_NEVER_INTERACTIVE
01465         b->yy_is_interactive = 0;
01466 #else
01467         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
01468 #endif
01469 #endif
01470         }
01471 
01472 
01473 #ifdef YY_USE_PROTOS
01474 void yy_flush_buffer( YY_BUFFER_STATE b )
01475 #else
01476 void yy_flush_buffer( b )
01477 YY_BUFFER_STATE b;
01478 #endif
01479 
01480         {
01481         if ( ! b )
01482                 return;
01483 
01484         b->yy_n_chars = 0;
01485 
01486         /* We always need two end-of-buffer characters.  The first causes
01487          * a transition to the end-of-buffer state.  The second causes
01488          * a jam in that state.
01489          */
01490         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
01491         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
01492 
01493         b->yy_buf_pos = &b->yy_ch_buf[0];
01494 
01495         b->yy_at_bol = 1;
01496         b->yy_buffer_status = YY_BUFFER_NEW;
01497 
01498         if ( b == yy_current_buffer )
01499                 yy_load_buffer_state();
01500         }
01501 
01502 
01503 #ifndef YY_NO_SCAN_BUFFER
01504 #ifdef YY_USE_PROTOS
01505 YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
01506 #else
01507 YY_BUFFER_STATE yy_scan_buffer( base, size )
01508 char *base;
01509 yy_size_t size;
01510 #endif
01511         {
01512         YY_BUFFER_STATE b;
01513 
01514         if ( size < 2 ||
01515              base[size-2] != YY_END_OF_BUFFER_CHAR ||
01516              base[size-1] != YY_END_OF_BUFFER_CHAR )
01517                 /* They forgot to leave room for the EOB's. */
01518                 return 0;
01519 
01520         b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
01521