1 /* A lexical scanner generated by flex */
2 
3 /* scanner skeleton version:
4  * $Header$
5   Last change:  JS   13 Jul 97    6:17 pm
6  */
7 /* Copyright: (c) Julian Smart */
8 /* Licence:   wxWindows Licence */
9 
10 #ifdef __VISUALC__
11     #pragma warning(push)
12     #pragma warning(disable:4127) /* warning C4127: conditional expression is constant [about while ( 0 | 1 )] */
13     #pragma warning(disable:4244) /* warning C4244: '=' : conversion from 'A' to 'B', possible loss of data    */
14 #endif
15 
16 #define FLEX_SCANNER
17 
18 #include <stdio.h>
19 
20 
21 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
22 #ifdef c_plusplus
23   #ifndef __cplusplus
24     #define __cplusplus
25   #endif
26 #endif
27 
28 
29 #ifdef __cplusplus
30 
31   #include <stdlib.h>
32 
33   #ifdef __SALFORDC__
34     #include <io.h>
35     #include <clib.h>
36   #else
37     #include <osfcn.h>
38   #endif
39 
40   #ifdef __VISAGECPP__
41     #include <io.h>
42   #endif
43 
44   #ifdef __cplusplus
yyinput()45     static int yyinput()
46   #else
47     static int input()
48   #endif
49 
50   /* use prototypes in function declarations */
51   #define YY_USE_PROTOS
52 
53   /* the "const" storage-class-modifier is valid */
54   #define YY_USE_CONST
55 
56 #else /* ! __cplusplus */
57 
58   #ifdef __STDC__
59 
60     #ifdef __GNUC__
61       #include <stddef.h>
62     #else
63       #include <stdlib.h>
64     #endif  /* __GNUC__ */
65 
66     #define YY_USE_PROTOS
67     #define YY_USE_CONST
68 
69   #endif  /* __STDC__ */
70 
71   #ifdef __VISUALC__
72     #define YY_USE_PROTOS
73   #endif
74 
75   #ifdef __BORLANDC__
76     #include <io.h>
77     #define YY_USE_PROTOS
78     #define YY_USE_CONST
79   #endif
80 
81   #if defined(__MINGW32__) || defined(__WATCOMC__)
82     #include <io.h>
83   #endif
84 
85 #endif /* ! __cplusplus */
86 
87 
88 #ifdef __TURBOC__
89   #define YY_USE_CONST
90 #endif
91 
92 
93 #ifndef YY_USE_CONST
94   #define const
95 #endif
96 
97 
98 #ifdef YY_USE_PROTOS
99   #define YY_PROTO(proto) proto
100 #else
101   #define YY_PROTO(proto) ()
102   /* we can't get here if it's an ANSI C compiler, or a C++ compiler,
103  * so it's got to be a K&R compiler, and therefore there's no standard
104  * place from which to include these definitions
105  */
106   /*
107    char *malloc();
108    int free();
109   */
110 #endif
111 
112 
113 /* amount of stuff to slurp up with each read */
114 #ifndef YY_READ_BUF_SIZE
115   #define YY_READ_BUF_SIZE 8192
116 #endif
117 
118 
119 /* returned upon end-of-file */
120 #define YY_END_TOK 0
121 
122 
123 /* copy whatever the last rule matched to the standard output */
124 
125 /* cast to (char *) is because for 8-bit chars, yytext is (unsigned char *) */
126 /* this used to be an fputs(), but since the string might contain NUL's,
127  * we now use fwrite()
128  */
129 #define ECHO (void) fwrite( (char *) yytext, yyleng, 1, yyout )
130 
131 
132 /* gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
133  * is returned in "result".
134  */
135 #define YY_INPUT(buf,result,max_size) \
136     if ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) \
137         YY_FATAL_ERROR( "read() in flex scanner failed" );
138 #define YY_NULL 0
139 
140 
141 /* no semi-colon after return; correct usage is to write "yyterminate();" -
142  * we don't want an extra ';' after the "return" because that will cause
143  * some compilers to complain about unreachable statements.
144  */
145 #define yyterminate() return ( YY_NULL )
146 
147 
148 /* report a fatal error */
149 
150 /* The funky do-while is used to turn this macro definition into
151  * a single C statement (which needs a semi-colon terminator).
152  * This avoids problems with code like:
153  *
154  *   if ( something_happens )
155  *       YY_FATAL_ERROR( "oops, the something happened" );
156  *   else
157  *       everything_okay();
158  *
159  * Prior to using the do-while the compiler would get upset at the
160  * "else" because it interpreted the "if" statement as being all
161  * done when it reached the ';' after the YY_FATAL_ERROR() call.
162  */
163 
164 #if !defined(__VISAGECPP__)
165     #define YY_FATAL_ERROR(msg)             \
166         do                                  \
167         {                                   \
168             (void) fputs( msg, stderr );    \
169             (void) putc( '\n', stderr );    \
170             exit( 1 );                      \
171         }                                   \
172         while ( 0 )
173 #else
174     /* suppress expression always false warning */
175     int os2var = 0;
176     #define YY_FATAL_ERROR(msg)             \
177         do                                  \
178         {                                   \
179             (void) fputs( msg, stderr );    \
180             (void) putc( '\n', stderr );    \
181             exit( 1 );                      \
182         }                                   \
183         while ( os2var == 0 )
184 #endif
185 
186 
187 /* default yywrap function - always treat EOF as an EOF */
188 int yywrap(void) { return 1; }
189 
190 
191 /* enter a start condition.  This macro really ought to take a parameter,
192  * but we do it the disgusting crufty way forced on us by the ()-less
193  * definition of BEGIN
194  */
195 #define BEGIN yy_start = 1 + 2 *
196 
197 /* action number for EOF rule of a given start state */
198 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
199 
200 /* special action meaning "start processing a new file" */
201 #if !defined(__VISAGECPP__)
202     #define YY_NEW_FILE                                \
203         do                                             \
204         {                                              \
205             yy_init_buffer( yy_current_buffer, yyin ); \
206             yy_load_buffer_state();                    \
207         }                                              \
208         while ( 0 )
209 #else
210     #define YY_NEW_FILE                                \
211         do                                             \
212         {                                              \
213             yy_init_buffer( yy_current_buffer, yyin ); \
214             yy_load_buffer_state();                    \
215         }                                              \
216         while ( os2var == 0 )
217 #endif
218 
219 
220 /* default declaration of generated scanner - a define so the user can
221  * easily add parameters
222  */
223 #define YY_DECL int yylex YY_PROTO(( void ))
224 
225 
226 #define YY_END_OF_BUFFER_CHAR 0
227 
228 #ifndef YY_BUF_SIZE
229   #define YY_BUF_SIZE (YY_READ_BUF_SIZE * 2) /* size of default input buffer */
230 #endif
231 
232 typedef struct yy_buffer_state *YY_BUFFER_STATE;
233 
234 #define YY_CHAR unsigned char
235 /* # line 1 "lexer.l" */
236 #define INITIAL 0
237 /* # line 9 "lexer.l" */
238 /*
239  * File:         lexer.l
240  * Description:  Lexical analyser for PROLOGIO; can be used with
241  *               either lex and flex.
242  */
243 #include <string.h>
244 
245 /* +++steve162e: added, otherwise, PROIO_input will be undefined (at least under LINUX)
246              please check, if this is also TRUE under other UNIXes.
247  */
248 
249 #if defined(FLEX_SCANNER) && defined(_LINUX)
250   #define PROIO_input my_input
251 #endif
252 /* ---steve162e */
253 
254 #include "wx/deprecated/expr.h"
255 #ifdef wx_x
256   extern char *malloc();
257 #endif
258 
259 #if defined(VMS) && ( __VMS_VER < 70000000 )
260   #define strdup(s) (strcpy((char *)malloc(strlen(s)+1), s));
261 #endif
262 
263 static size_t lex_buffer_length = 0;
264 static const char *lex_buffer = NULL;
265 static size_t lex_string_ptr = 0;
266 static int lex_read_from_string = 0;
267 
268 static int my_input(void);
269 #ifndef FLEX_SCANNER
270   static int my_unput(char);
271 #endif
272 
273 #ifdef FLEX_SCANNER
274     #undef YY_INPUT
275     #define YY_INPUT(buf,result,max_size)                                  \
276     if (lex_read_from_string)                                              \
277     {                                                                      \
278         int c = my_input();                                                \
279         result = (c == 0) ? YY_NULL : ((buf)[0]=(c), 1);                   \
280     }                                                                      \
281     else                                                                   \
282         if ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) \
283             YY_FATAL_ERROR( "read() in flex scanner failed" );
284 #else
285     #ifndef unput
286         #undef unput
287     #endif
288     #define unput(_c) my_unput(_c)
289 #endif
290 
291 /* # line 58 "lexer.l" */
292 
293 /* done after the current pattern has been matched and before the
294  * corresponding action - sets up yytext
295  */
296 
297 #define YY_DO_BEFORE_ACTION \
298     yytext = yy_bp;         \
299     yyleng = yy_cp - yy_bp; \
300     yy_hold_char = *yy_cp;  \
301     *yy_cp = '\0';          \
302     yy_c_buf_p = yy_cp;
303 
304 #define EOB_ACT_CONTINUE_SCAN 0
305 #define EOB_ACT_END_OF_FILE 1
306 #define EOB_ACT_LAST_MATCH 2
307 
308 /* return all but the first 'n' matched characters back to the input stream */
309 #if !defined(__VISAGECPP__)
310     #define yyless(n)                                      \
311         do                                                 \
312         {                                                  \
313             /* undo effects of setting up yytext */        \
314             *yy_cp = yy_hold_char;                         \
315             yy_c_buf_p = yy_cp = yy_bp + n;                \
316             YY_DO_BEFORE_ACTION; /* set up yytext again */ \
317         }                                                  \
318         while ( 0 )
319 #else
320     #define yyless(n)                                      \
321         do                                                 \
322         {                                                  \
323             /* undo effects of setting up yytext */        \
324             *yy_cp = yy_hold_char;                         \
325             yy_c_buf_p = yy_cp = yy_bp + n;                \
326             YY_DO_BEFORE_ACTION; /* set up yytext again */ \
327         }                                                  \
328         while ( os2var == 0 )
329 #endif
330 
331 #undef unput
332 #define unput(c) yyunput( c, yytext )
333 
334 struct yy_buffer_state
335 {
336     FILE *yy_input_file;
337 
338     YY_CHAR *yy_ch_buf;     /* input buffer */
339     YY_CHAR *yy_buf_pos;    /* current position in input buffer */
340 
341     /* size of input buffer in bytes, not including room for EOB characters*/
342     int yy_buf_size;
343 
344     /* number of characters read into yy_ch_buf, not including EOB characters */
345     int yy_n_chars;
346 
347     int yy_eof_status;      /* whether we've seen an EOF on this buffer */
348 
349 #define EOF_NOT_SEEN 0
350 
351     /* "pending" happens when the EOF has been seen but there's still
352      * some text process
353      */
354 
355 #define EOF_PENDING 1
356 #define EOF_DONE 2
357 };
358 
359 static YY_BUFFER_STATE yy_current_buffer;
360 
361 /* we provide macros for accessing buffer states in case in the
362  * future we want to put the buffer states in a more general
363  * "scanner state"
364  */
365 #define YY_CURRENT_BUFFER yy_current_buffer
366 
367 
368 /* yy_hold_char holds the character lost when yytext is formed */
369 static YY_CHAR yy_hold_char;
370 
371 static int yy_n_chars;      /* number of characters read into yy_ch_buf */
372 
373 
374 
375 #ifndef YY_USER_ACTION
376     #define YY_USER_ACTION
377 #endif
378 
379 #ifndef YY_USER_INIT
380     #define YY_USER_INIT
381 #endif
382 
383 extern YY_CHAR *yytext;
384 extern int yyleng;
385 extern FILE *yyin, *yyout;
386 
387 YY_CHAR *yytext;
388 int yyleng;
389 
390 FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
391 
392 #define YY_END_OF_BUFFER 18
393 typedef int yy_state_type;
394 static const short int yy_accept[34] =
395     {   0,
396         0,    0,   18,   16,   13,   14,   16,   16,    6,    7,
397        16,    8,   12,   16,    1,   11,    3,    9,   10,    2,
398         0,    5,    0,    0,    0,    4,    1,   15,    3,    5,
399         0,    0,    0
400     } ;
401 
402 static const YY_CHAR yy_ec[256] =
403     {   0,
404         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
405         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
406         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
407         1,    2,    1,    4,    1,    1,    1,    1,    5,    6,
408         7,    8,    9,   10,    9,   11,   12,   13,   13,   13,
409        13,   13,   13,   13,   13,   13,   13,    1,    1,    1,
410        14,    1,    1,    1,   15,   15,   15,   15,   15,   15,
411        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
412        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
413        16,   17,   18,    1,   15,    1,   15,   15,   15,   15,
414 
415        19,   15,   15,   15,   15,   15,   15,   15,   15,   15,
416        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
417        15,   15,    1,   20,    1,    1,    1,    1,    1,    1,
418         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
419         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
420         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
421         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
422         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
423         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
424         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
425 
426         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
427         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
428         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
429         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
430         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
431         1,    1,    1,    1,    1
432     } ;
433 
434 static const YY_CHAR yy_meta[21] =
435     {   0,
436         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
437         1,    1,    2,    1,    2,    1,    3,    1,    2,    1
438     } ;
439 
440 static const short int yy_base[37] =
441     {   0,
442         0,    0,   48,   55,   55,   55,   17,   42,   55,   55,
443        19,   55,   55,   23,   17,   55,    0,   55,   55,    0,
444        18,   55,   19,   23,   21,   55,   12,   55,    0,   24,
445        25,   29,   55,   49,   52,   22
446     } ;
447 
448 static const short int yy_def[37] =
449     {   0,
450        33,    1,   33,   33,   33,   33,   34,   35,   33,   33,
451        33,   33,   33,   33,   33,   33,   36,   33,   33,   36,
452        34,   33,   34,   34,   35,   33,   33,   33,   36,   34,
453        34,   34,    0,   33,   33,   33
454     } ;
455 
456 static const short int yy_nxt[76] =
457     {   0,
458         4,    5,    6,    7,    8,    9,   10,    4,   11,   12,
459        13,   14,   15,   16,   17,   18,    4,   19,   20,    4,
460        22,   22,   30,   29,   27,   26,   22,   22,   30,   27,
461        28,   27,   30,   23,   23,   23,   24,   24,   24,   31,
462        23,   32,   24,   24,   24,   23,   26,   33,   24,   21,
463        21,   21,   25,   25,    3,   33,   33,   33,   33,   33,
464        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
465        33,   33,   33,   33,   33
466     } ;
467 
468 static const short int yy_chk[76] =
469     {   0,
470         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
471         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
472         7,   21,   23,   36,   27,   25,   24,   30,   31,   15,
473        14,   11,   32,    7,   21,   23,    7,   21,   23,   24,
474        30,   31,   24,   30,   31,   32,    8,    3,   32,   34,
475        34,   34,   35,   35,   33,   33,   33,   33,   33,   33,
476        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
477        33,   33,   33,   33,   33
478     } ;
479 
480 static yy_state_type yy_last_accepting_state;
481 static YY_CHAR *yy_last_accepting_cpos;
482 
483 /* the intent behind this definition is that it'll catch
484  * any uses of REJECT which flex missed
485  */
486 #define REJECT reject_used_but_not_detected
487 #define yymore() yymore_used_but_not_detected
488 #define YY_MORE_ADJ 0
489 
490 /* these variables are all declared out here so that section 3 code can
491  * manipulate them
492  */
493 /* points to current character in buffer */
494 static YY_CHAR *yy_c_buf_p = (YY_CHAR *) 0;
495 static int yy_init = 1;     /* whether we need to initialize */
496 static int yy_start = 0;    /* start state number */
497 
498 /* flag which is used to allow yywrap()'s to do buffer switches
499  * instead of setting up a fresh yyin.  A bit of a hack ...
500  */
501 static int yy_did_buffer_switch_on_eof;
502 
503 static yy_state_type yy_get_previous_state YY_PROTO(( void ));
504 static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
505 static int yy_get_next_buffer YY_PROTO(( void ));
506 static void yyunput YY_PROTO(( YY_CHAR c, YY_CHAR *buf_ptr ));
507 void yyrestart YY_PROTO(( FILE *input_file ));
508 void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
509 void yy_load_buffer_state YY_PROTO(( void ));
510 YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
511 void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
512 void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
513 
514 #define yy_new_buffer yy_create_buffer
515 
516 #ifdef __cplusplus
517   static int yyinput YY_PROTO(( void ));
518 #else
519   static int input YY_PROTO(( void ));
520 #endif
521 
522 YY_DECL
523     {
524     register yy_state_type yy_current_state;
525     register YY_CHAR *yy_cp, *yy_bp;
526     register int yy_act;
527 
528 
529 
530 
531     if ( yy_init )
532     {
533         YY_USER_INIT;
534 
535         if ( ! yy_start )
536             yy_start = 1; /* first start state */
537 
538         if ( ! yyin )
539             yyin = stdin;
540 
541         if ( ! yyout )
542             yyout = stdout;
543 
544         if ( yy_current_buffer )
545             yy_init_buffer( yy_current_buffer, yyin );
546         else
547             yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
548 
549         yy_load_buffer_state();
550 
551         yy_init = 0;
552     }
553 
554 #if !defined(__VISAGECPP__)
555     while ( 1 ) /* loops until end-of-file is reached */
556 #else
557     os2var = 1;
558     if (os2var == 0) return 0;
559     while ( os2var == 1 )   /* loops until end-of-file is reached */
560 #endif
561     {
562         yy_cp = yy_c_buf_p;
563 
564         /* support of yytext */
565         *yy_cp = yy_hold_char;
566 
567         /* yy_bp points to the position in yy_ch_buf of the start of the
568          * current run.
569          */
570         yy_bp = yy_cp;
571 
572         yy_current_state = yy_start;
573 yy_match:
574         do
575         {
576             register YY_CHAR yy_c = yy_ec[*yy_cp];
577             if ( yy_accept[yy_current_state] )
578             {
579                 yy_last_accepting_state = yy_current_state;
580                 yy_last_accepting_cpos = yy_cp;
581             }
582             while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
583             {
584                 yy_current_state = yy_def[yy_current_state];
585                 if ( yy_current_state >= 34 )
586                     yy_c = yy_meta[yy_c];
587             }
588             yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
589             ++yy_cp;
590         }
591         while ( yy_current_state != 33 );
592         yy_cp = yy_last_accepting_cpos;
593         yy_current_state = yy_last_accepting_state;
594 
595 yy_find_action:
596         yy_act = yy_accept[yy_current_state];
597 
598         YY_DO_BEFORE_ACTION;
599         YY_USER_ACTION;
600 
601 do_action: /* this label is used only to access EOF actions */
602 
603 
604         switch ( yy_act )
605         {
606             case 0: /* must backtrack */
607             {
608                 /* undo the effects of YY_DO_BEFORE_ACTION */
609                 *yy_cp = yy_hold_char;
610                 yy_cp = yy_last_accepting_cpos;
611                 yy_current_state = yy_last_accepting_state;
612                 goto yy_find_action;
613             }
614 
615             case 1:
616             {
617                 yylval.s = strdup((const char*) yytext);
618                 return INTEGER;
619             }
620 
621             case 2:
622             {
623                 return EXP;
624             }
625 
626             case 3:
627             {
628                 yylval.s = strdup((const char*) yytext);
629                 return WORD;
630             }
631 
632             case 4:
633             {
634                 int len = strlen((const char*) yytext);
635                 yytext[len-1] = 0;
636                 yylval.s = strdup((const char*) (yytext+1));
637                 return WORD;
638             }
639 
640             case 5:
641             {
642                 yylval.s = strdup((const char*) yytext);
643                 return STRING;
644             }
645 
646             case 6:
647             {
648                 return OPEN;
649             }
650 
651             case 7:
652             {
653                 return CLOSE;
654             }
655 
656             case 8:
657             {
658                 return COMMA;
659             }
660 
661             case 9:
662             {
663                 return OPEN_SQUARE;
664             }
665 
666             case 10:
667             {
668                 return CLOSE_SQUARE;
669             }
670 
671             case 11:
672             {
673                 return EQUALS;
674             }
675 
676             case 12:
677             {
678                 return PERIOD;
679             }
680 
681             case 13:
682             {
683                 break;
684             }
685 
686             case 14:
687             {
688                 break;
689             }
690 
691             case 15:
692             {
693             loop:
694 #ifdef __cplusplus
695                 while (yyinput() != '*') ;
696                 switch (yyinput())
697 #else
698                 while (input() != '*') ;
699                 switch (input())
700 #endif
701                 {
702                     case '/':
703                         break;
704                     case '*':
705                         unput('*');
706                     default:
707                         goto loop;
708                 }
709                 break;
710             }
711 
712             case 16:
713             {
714                 return ERROR;
715             }
716 
717             case 17:
718             {
719                 ECHO;
720                 break;
721             }
722 
723             case YY_STATE_EOF(INITIAL):
724             {
725                 yyterminate();
726             }
727 
728             case YY_END_OF_BUFFER:
729             {
730                 /* amount of text matched not including the EOB char */
731                 int yy_amount_of_matched_text = yy_cp - yytext - 1;
732 
733                 /* undo the effects of YY_DO_BEFORE_ACTION */
734                 *yy_cp = yy_hold_char;
735 
736                 /* note that here we test for yy_c_buf_p "<=" to the position
737                  * of the first EOB in the buffer, since yy_c_buf_p will
738                  * already have been incremented past the NUL character
739                  * (since all states make transitions on EOB to the end-
740                  * of-buffer state).  Contrast this with the test in yyinput().
741                  */
742                 if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
743                 /* this was really a NUL */
744                 {
745                     yy_state_type yy_next_state;
746 
747                     yy_c_buf_p = yytext + yy_amount_of_matched_text;
748 
749                     yy_current_state = yy_get_previous_state();
750 
751                     /* okay, we're now positioned to make the
752                      * NUL transition.  We couldn't have
753                      * yy_get_previous_state() go ahead and do it
754                      * for us because it doesn't know how to deal
755                      * with the possibility of jamming (and we
756                      * don't want to build jamming into it because
757                      * then it will run more slowly)
758                      */
759 
760                     yy_next_state = yy_try_NUL_trans( yy_current_state );
761 
762                     yy_bp = yytext + YY_MORE_ADJ;
763 
764                     if ( yy_next_state )
765                     {
766                         /* consume the NUL */
767                         yy_cp = ++yy_c_buf_p;
768                         yy_current_state = yy_next_state;
769                         goto yy_match;
770                     }
771                     else
772                     {
773                         yy_cp = yy_last_accepting_cpos;
774                         yy_current_state = yy_last_accepting_state;
775                         goto yy_find_action;
776                     }
777                 }
778                 else switch ( yy_get_next_buffer() )
779                 {
780                     case EOB_ACT_END_OF_FILE:
781                     {
782                         yy_did_buffer_switch_on_eof = 0;
783 
784                         if ( yywrap() )
785                         {
786                             /* note: because we've taken care in
787                              * yy_get_next_buffer() to have set up yytext,
788                              * we can now set up yy_c_buf_p so that if some
789                              * total hoser (like flex itself) wants
790                              * to call the scanner after we return the
791                              * YY_NULL, it'll still work - another YY_NULL
792                              * will get returned.
793                              */
794                             yy_c_buf_p = yytext + YY_MORE_ADJ;
795 
796                             yy_act = YY_STATE_EOF((yy_start - 1) / 2);
797                             goto do_action;
798                         }
799                         else
800                         {
801                             if ( ! yy_did_buffer_switch_on_eof )
802                                 YY_NEW_FILE;
803                         }
804                     }
805                     break;
806 
807                     case EOB_ACT_CONTINUE_SCAN:
808                         yy_c_buf_p = yytext + yy_amount_of_matched_text;
809 
810                         yy_current_state = yy_get_previous_state();
811 
812                         yy_cp = yy_c_buf_p;
813                         yy_bp = yytext + YY_MORE_ADJ;
814                         goto yy_match;
815 
816                     case EOB_ACT_LAST_MATCH:
817                         yy_c_buf_p = &yy_current_buffer->yy_ch_buf[yy_n_chars];
818 
819                         yy_current_state = yy_get_previous_state();
820 
821                         yy_cp = yy_c_buf_p;
822                         yy_bp = yytext + YY_MORE_ADJ;
823                         goto yy_find_action;
824                 }
825             }
826             break;
827 
828             default:
829 #ifdef FLEX_DEBUG
830                 printf( "action # %d\n", yy_act );
831 #endif
832                 YY_FATAL_ERROR("fatal flex scanner internal error--no action found" );
833         }
834     }
835 
836 #if defined(__VISAGECPP__)
837     /* VA complains about proc maybe not returning a value so return one */
838     return 0;
839 #endif
840 }
841 
842 
843 /* yy_get_next_buffer - try to read in a new buffer
844  *
845  * synopsis
846  *     int yy_get_next_buffer();
847  *
848  * returns a code representing an action
849  *     EOB_ACT_LAST_MATCH -
850  *     EOB_ACT_CONTINUE_SCAN - continue scanning from current position
851  *     EOB_ACT_END_OF_FILE - end of file
852  */
853 
yy_get_next_buffer()854 static int yy_get_next_buffer()
855 {
856     register YY_CHAR *dest = yy_current_buffer->yy_ch_buf;
857     register YY_CHAR *source = yytext - 1; /* copy prev. char, too */
858     register int number_to_move, i;
859     int ret_val;
860 
861     if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
862         YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" );
863 
864     /* try to read more data */
865 
866     /* first move last chars to start of buffer */
867     number_to_move = yy_c_buf_p - yytext;
868 
869     for ( i = 0; i < number_to_move; ++i )
870         *(dest++) = *(source++);
871 
872     if ( yy_current_buffer->yy_eof_status != EOF_NOT_SEEN )
873         /* don't do the read, it's not guaranteed to return an EOF,
874          * just force an EOF
875          */
876         yy_n_chars = 0;
877 
878     else
879     {
880         int num_to_read = yy_current_buffer->yy_buf_size - number_to_move - 1;
881 
882         if ( num_to_read > YY_READ_BUF_SIZE )
883             num_to_read = YY_READ_BUF_SIZE;
884 
885         else if ( num_to_read <= 0 )
886             YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" );
887 
888         /* read in more data */
889         YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
890             yy_n_chars, num_to_read );
891     }
892 
893     if ( yy_n_chars == 0 )
894     {
895         if ( number_to_move == 1 )
896         {
897             ret_val = EOB_ACT_END_OF_FILE;
898             yy_current_buffer->yy_eof_status = EOF_DONE;
899         }
900 
901         else
902         {
903             ret_val = EOB_ACT_LAST_MATCH;
904             yy_current_buffer->yy_eof_status = EOF_PENDING;
905         }
906     }
907 
908     else
909         ret_val = EOB_ACT_CONTINUE_SCAN;
910 
911     yy_n_chars += number_to_move;
912     yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
913     yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
914 
915     /* yytext begins at the second character in yy_ch_buf; the first
916      * character is the one which preceded it before reading in the latest
917      * buffer; it needs to be kept around in case it's a newline, so
918      * yy_get_previous_state() will have with '^' rules active
919      */
920 
921     yytext = &yy_current_buffer->yy_ch_buf[1];
922 
923     return ( ret_val );
924 }
925 
926 
927 /* yy_get_previous_state - get the state just before the EOB char was reached
928  *
929  * synopsis
930  *     yy_state_type yy_get_previous_state();
931  */
932 
yy_get_previous_state()933 static yy_state_type yy_get_previous_state()
934 {
935     register yy_state_type yy_current_state;
936     register YY_CHAR *yy_cp;
937 
938     yy_current_state = yy_start;
939 
940     for ( yy_cp = yytext + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
941     {
942         register YY_CHAR yy_c = (*yy_cp ? yy_ec[*yy_cp] : 1);
943         if ( yy_accept[yy_current_state] )
944         {
945             yy_last_accepting_state = yy_current_state;
946             yy_last_accepting_cpos = yy_cp;
947         }
948         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
949         {
950             yy_current_state = yy_def[yy_current_state];
951             if ( yy_current_state >= 34 )
952                 yy_c = yy_meta[yy_c];
953         }
954         yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
955     }
956 
957     return ( yy_current_state );
958 }
959 
960 
961 /* yy_try_NUL_trans - try to make a transition on the NUL character
962  *
963  * synopsis
964  *     next_state = yy_try_NUL_trans( current_state );
965  */
966 
967 #ifdef YY_USE_PROTOS
yy_try_NUL_trans(register yy_state_type yy_current_state)968 static yy_state_type yy_try_NUL_trans( register yy_state_type yy_current_state )
969 #else
970 static yy_state_type yy_try_NUL_trans( yy_current_state )
971 register yy_state_type yy_current_state;
972 #endif
973 {
974     register int yy_is_jam;
975     register YY_CHAR *yy_cp = yy_c_buf_p;
976 
977     register YY_CHAR yy_c = 1;
978     if ( yy_accept[yy_current_state] )
979     {
980         yy_last_accepting_state = yy_current_state;
981         yy_last_accepting_cpos = yy_cp;
982     }
983     while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
984     {
985         yy_current_state = yy_def[yy_current_state];
986         if ( yy_current_state >= 34 )
987             yy_c = yy_meta[yy_c];
988     }
989     yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
990     yy_is_jam = (yy_current_state == 33);
991 
992     return ( yy_is_jam ? 0 : yy_current_state );
993 }
994 
995 
996 #ifdef YY_USE_PROTOS
yyunput(YY_CHAR c,register YY_CHAR * yy_bp)997 static void yyunput( YY_CHAR c, register YY_CHAR *yy_bp )
998 #else
999 static void yyunput( c, yy_bp )
1000 YY_CHAR c;
1001 register YY_CHAR *yy_bp;
1002 #endif
1003 {
1004     register YY_CHAR *yy_cp = yy_c_buf_p;
1005 
1006     /* undo effects of setting up yytext */
1007     *yy_cp = yy_hold_char;
1008 
1009     if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
1010     { /* need to shift things up to make room */
1011         register int number_to_move = yy_n_chars + 2; /* +2 for EOB chars */
1012         register YY_CHAR *dest =
1013             &yy_current_buffer->yy_ch_buf[yy_current_buffer->yy_buf_size + 2];
1014         register YY_CHAR *source =
1015             &yy_current_buffer->yy_ch_buf[number_to_move];
1016 
1017         while ( source > yy_current_buffer->yy_ch_buf )
1018             *--dest = *--source;
1019 
1020         yy_cp += dest - source;
1021         yy_bp += dest - source;
1022         yy_n_chars = yy_current_buffer->yy_buf_size;
1023 
1024         if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
1025             YY_FATAL_ERROR( "flex scanner push-back overflow" );
1026     }
1027 
1028     if ( yy_cp > yy_bp && yy_cp[-1] == '\n' )
1029         yy_cp[-2] = '\n';
1030 
1031     *--yy_cp = c;
1032 
1033     /* note: the formal parameter *must* be called "yy_bp" for this
1034      *       macro to now work correctly
1035      */
1036     YY_DO_BEFORE_ACTION; /* set up yytext again */
1037 }
1038 
1039 
1040 #ifdef __cplusplus
yyinput()1041 static int yyinput()
1042 #else
1043 static int input()
1044 #endif
1045 {
1046     int c;
1047     YY_CHAR *yy_cp = yy_c_buf_p;
1048 
1049     *yy_cp = yy_hold_char;
1050 
1051     if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
1052     {
1053         /* yy_c_buf_p now points to the character we want to return.
1054          * If this occurs *before* the EOB characters, then it's a
1055          * valid NUL; if not, then we've hit the end of the buffer.
1056          */
1057         if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
1058         { /* this was really a NUL */
1059            *yy_c_buf_p = '\0';
1060         }
1061         else
1062         { /* need more input */
1063             yytext = yy_c_buf_p;
1064             ++yy_c_buf_p;
1065 
1066             switch ( yy_get_next_buffer() )
1067             {
1068                 case EOB_ACT_END_OF_FILE:
1069                 {
1070                     if ( yywrap() )
1071                     {
1072                         yy_c_buf_p = yytext + YY_MORE_ADJ;
1073                         return ( EOF );
1074                     }
1075                     YY_NEW_FILE;
1076 
1077 #ifdef __cplusplus
1078                     return ( yyinput() );
1079 #else
1080                     return ( input() );
1081 #endif
1082                 }
1083 
1084                 case EOB_ACT_CONTINUE_SCAN:
1085                     yy_c_buf_p = yytext + YY_MORE_ADJ;
1086                     break;
1087 
1088                 case EOB_ACT_LAST_MATCH:
1089 #ifdef __cplusplus
1090                     YY_FATAL_ERROR( "unexpected last match in yyinput()" );
1091 #else
1092                     YY_FATAL_ERROR( "unexpected last match in input()" );
1093 #endif
1094             }
1095         }
1096     }
1097 
1098     c = *yy_c_buf_p;
1099     yy_hold_char = *++yy_c_buf_p;
1100 
1101     return ( c );
1102 }
1103 
1104 
1105 #ifdef YY_USE_PROTOS
yyrestart(FILE * input_file)1106 void yyrestart( FILE *input_file )
1107 #else
1108 void yyrestart( input_file )
1109 FILE *input_file;
1110 #endif
1111 {
1112     yy_init_buffer( yy_current_buffer, input_file );
1113     yy_load_buffer_state();
1114 }
1115 
1116 
1117 #ifdef YY_USE_PROTOS
yy_switch_to_buffer(YY_BUFFER_STATE new_buffer)1118 void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
1119 #else
1120 void yy_switch_to_buffer( new_buffer )
1121 YY_BUFFER_STATE new_buffer;
1122 #endif
1123 {
1124     if ( yy_current_buffer == new_buffer )
1125         return;
1126 
1127     if ( yy_current_buffer )
1128     {
1129         /* flush out information for old buffer */
1130         *yy_c_buf_p = yy_hold_char;
1131         yy_current_buffer->yy_buf_pos = yy_c_buf_p;
1132         yy_current_buffer->yy_n_chars = yy_n_chars;
1133     }
1134 
1135     yy_current_buffer = new_buffer;
1136     yy_load_buffer_state();
1137 
1138     /* we don't actually know whether we did this switch during
1139      * EOF (yywrap()) processing, but the only time this flag
1140      * is looked at is after yywrap() is called, so it's safe
1141      * to go ahead and always set it.
1142      */
1143     yy_did_buffer_switch_on_eof = 1;
1144 }
1145 
1146 
1147 #ifdef YY_USE_PROTOS
yy_load_buffer_state(void)1148 void yy_load_buffer_state( void )
1149 #else
1150 void yy_load_buffer_state()
1151 #endif
1152 {
1153     yy_n_chars = yy_current_buffer->yy_n_chars;
1154     yytext = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
1155     yyin = yy_current_buffer->yy_input_file;
1156     yy_hold_char = *yy_c_buf_p;
1157 }
1158 
1159 
1160 #ifdef YY_USE_PROTOS
yy_create_buffer(FILE * file,int size)1161 YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
1162 #else
1163 YY_BUFFER_STATE yy_create_buffer( file, size )
1164 FILE *file;
1165 int size;
1166 #endif
1167 {
1168     YY_BUFFER_STATE b;
1169 
1170     b = (YY_BUFFER_STATE) malloc( sizeof( struct yy_buffer_state ) );
1171 
1172     if ( ! b )
1173         YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
1174 
1175     b->yy_buf_size = size;
1176 
1177     /* yy_ch_buf has to be 2 characters longer than the size given because
1178      * we need to put in 2 end-of-buffer characters.
1179      */
1180     b->yy_ch_buf = (YY_CHAR *) malloc( (unsigned) (b->yy_buf_size + 2) );
1181 
1182     if ( ! b->yy_ch_buf )
1183         YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
1184 
1185     yy_init_buffer( b, file );
1186 
1187     return ( b );
1188 }
1189 
1190 
1191 #ifdef YY_USE_PROTOS
yy_delete_buffer(YY_BUFFER_STATE b)1192 void yy_delete_buffer( YY_BUFFER_STATE b )
1193 #else
1194 void yy_delete_buffer( b )
1195 YY_BUFFER_STATE b;
1196 #endif
1197 {
1198     if ( b == yy_current_buffer )
1199         yy_current_buffer = (YY_BUFFER_STATE) 0;
1200 
1201     free( (char *) b->yy_ch_buf );
1202     free( (char *) b );
1203 }
1204 
1205 
1206 #ifdef YY_USE_PROTOS
yy_init_buffer(YY_BUFFER_STATE b,FILE * file)1207 void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
1208 #else
1209 void yy_init_buffer( b, file )
1210 YY_BUFFER_STATE b;
1211 FILE *file;
1212 #endif
1213 {
1214     b->yy_input_file = file;
1215 
1216     /* we put in the '\n' and start reading from [1] so that an
1217      * initial match-at-newline will be true.
1218      */
1219 
1220     b->yy_ch_buf[0] = '\n';
1221     b->yy_n_chars = 1;
1222 
1223     /* we always need two end-of-buffer characters.  The first causes
1224      * a transition to the end-of-buffer state.  The second causes
1225      * a jam in that state.
1226      */
1227     b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
1228     b->yy_ch_buf[2] = YY_END_OF_BUFFER_CHAR;
1229 
1230     b->yy_buf_pos = &b->yy_ch_buf[1];
1231 
1232     b->yy_eof_status = EOF_NOT_SEEN;
1233 }
1234 /* # line 108 "lexer.l" */
1235 
1236 
1237 
1238 #ifdef FLEX_SCANNER
lex_input()1239     static int lex_input()
1240     {
1241   return input();
1242     }
1243 #else /* BSD/AT&T lex */
1244     #ifndef input
1245         #error "Sorry, but need either flex or AT&T lex"
1246     #endif
lex_input()1247     static int lex_input() {
1248   return input();
1249     }
1250 
1251     /*
1252     # undef unput
1253     # define unput(_c) my_unput(_c)
1254     */
1255 
1256     # undef input
1257     # define input() my_input()
my_unput(char c)1258     static int my_unput(char c)
1259     {
1260         if (lex_read_from_string)
1261         {
1262     /* Make sure we have something */
1263             if (lex_string_ptr)
1264             {
1265       if (c == '\n') yylineno--;
1266       lex_string_ptr--;
1267     }
1268         }
1269         else
1270         {
1271     yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;
1272             /* unput(c); Causes infinite recursion! */
1273   }
1274   return c;
1275     }
1276 #endif
1277 
1278 /* Public */
LexFromFile(FILE * fd)1279 void LexFromFile(FILE *fd)
1280 {
1281   lex_read_from_string = 0;
1282   yyin = fd;
1283   /* Don't know why this is necessary, but otherwise
1284    * lex only works _once_!
1285    */
1286 #ifdef FLEX_SCANNER
1287   yy_init = 1;
1288 #endif
1289 }
1290 
LexFromString(char * buffer)1291 void LexFromString(char *buffer)
1292 {
1293   lex_read_from_string = 1;
1294   lex_buffer = buffer;
1295   lex_buffer_length = strlen((const char*) buffer);
1296   lex_string_ptr = 0;
1297   /* Don't know why this is necessary, but otherwise
1298    * lex only works _once_!
1299    */
1300 #ifdef FLEX_SCANNER
1301   yy_init = 1;
1302 #endif
1303 }
1304 
my_input(void)1305 static int my_input( void )
1306 {
1307     if (lex_read_from_string)
1308     {
1309         if (lex_string_ptr == lex_buffer_length)
1310         {
1311             return 0;
1312         }
1313         else
1314         {
1315             char c = lex_buffer[lex_string_ptr++];
1316 #ifndef FLEX_SCANNER
1317             if (c == '\n') yylineno++;
1318 #endif
1319                 return c;
1320         }
1321     }
1322     else
1323     {
1324         return lex_input();
1325     }
1326 }
1327 
wxExprCleanUp()1328 void wxExprCleanUp()
1329 {
1330     if (yy_current_buffer)
1331         yy_delete_buffer(yy_current_buffer);
1332 }
1333 
1334 #ifdef __VISUALC__
1335     #pragma warning(pop)
1336 #endif
1337