]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - crypto/heimdal/lib/sl/slc-lex.c
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / crypto / heimdal / lib / sl / slc-lex.c
1
2 #line 3 "slc-lex.c"
3
4 #define  YY_INT_ALIGNED short int
5
6 /* A lexical scanner generated by flex */
7
8 #define FLEX_SCANNER
9 #define YY_FLEX_MAJOR_VERSION 2
10 #define YY_FLEX_MINOR_VERSION 5
11 #define YY_FLEX_SUBMINOR_VERSION 33
12 #if YY_FLEX_SUBMINOR_VERSION > 0
13 #define FLEX_BETA
14 #endif
15
16 /* First, we deal with  platform-specific or compiler-specific issues. */
17
18 /* begin standard C headers. */
19 #include <stdio.h>
20 #include <string.h>
21 #include <errno.h>
22 #include <stdlib.h>
23
24 /* end standard C headers. */
25
26 /* flex integer type definitions */
27
28 #ifndef FLEXINT_H
29 #define FLEXINT_H
30
31 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
32
33 #if __STDC_VERSION__ >= 199901L
34
35 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
36  * if you want the limit (max/min) macros for int types. 
37  */
38 #ifndef __STDC_LIMIT_MACROS
39 #define __STDC_LIMIT_MACROS 1
40 #endif
41
42 #include <inttypes.h>
43 typedef int8_t flex_int8_t;
44 typedef uint8_t flex_uint8_t;
45 typedef int16_t flex_int16_t;
46 typedef uint16_t flex_uint16_t;
47 typedef int32_t flex_int32_t;
48 typedef uint32_t flex_uint32_t;
49 #else
50 typedef signed char flex_int8_t;
51 typedef short int flex_int16_t;
52 typedef int flex_int32_t;
53 typedef unsigned char flex_uint8_t; 
54 typedef unsigned short int flex_uint16_t;
55 typedef unsigned int flex_uint32_t;
56 #endif /* ! C99 */
57
58 /* Limits of integral types. */
59 #ifndef INT8_MIN
60 #define INT8_MIN               (-128)
61 #endif
62 #ifndef INT16_MIN
63 #define INT16_MIN              (-32767-1)
64 #endif
65 #ifndef INT32_MIN
66 #define INT32_MIN              (-2147483647-1)
67 #endif
68 #ifndef INT8_MAX
69 #define INT8_MAX               (127)
70 #endif
71 #ifndef INT16_MAX
72 #define INT16_MAX              (32767)
73 #endif
74 #ifndef INT32_MAX
75 #define INT32_MAX              (2147483647)
76 #endif
77 #ifndef UINT8_MAX
78 #define UINT8_MAX              (255U)
79 #endif
80 #ifndef UINT16_MAX
81 #define UINT16_MAX             (65535U)
82 #endif
83 #ifndef UINT32_MAX
84 #define UINT32_MAX             (4294967295U)
85 #endif
86
87 #endif /* ! FLEXINT_H */
88
89 #ifdef __cplusplus
90
91 /* The "const" storage-class-modifier is valid. */
92 #define YY_USE_CONST
93
94 #else   /* ! __cplusplus */
95
96 #if __STDC__
97
98 #define YY_USE_CONST
99
100 #endif  /* __STDC__ */
101 #endif  /* ! __cplusplus */
102
103 #ifdef YY_USE_CONST
104 #define yyconst const
105 #else
106 #define yyconst
107 #endif
108
109 /* Returned upon end-of-file. */
110 #define YY_NULL 0
111
112 /* Promotes a possibly negative, possibly signed char to an unsigned
113  * integer for use as an array index.  If the signed char is negative,
114  * we want to instead treat it as an 8-bit unsigned char, hence the
115  * double cast.
116  */
117 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
118
119 /* Enter a start condition.  This macro really ought to take a parameter,
120  * but we do it the disgusting crufty way forced on us by the ()-less
121  * definition of BEGIN.
122  */
123 #define BEGIN (yy_start) = 1 + 2 *
124
125 /* Translate the current start state into a value that can be later handed
126  * to BEGIN to return to the state.  The YYSTATE alias is for lex
127  * compatibility.
128  */
129 #define YY_START (((yy_start) - 1) / 2)
130 #define YYSTATE YY_START
131
132 /* Action number for EOF rule of a given start state. */
133 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
134
135 /* Special action meaning "start processing a new file". */
136 #define YY_NEW_FILE yyrestart(yyin  )
137
138 #define YY_END_OF_BUFFER_CHAR 0
139
140 /* Size of default input buffer. */
141 #ifndef YY_BUF_SIZE
142 #define YY_BUF_SIZE 16384
143 #endif
144
145 /* The state buf must be large enough to hold one state per character in the main buffer.
146  */
147 #define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
148
149 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
150 #define YY_TYPEDEF_YY_BUFFER_STATE
151 typedef struct yy_buffer_state *YY_BUFFER_STATE;
152 #endif
153
154 extern int yyleng;
155
156 extern FILE *yyin, *yyout;
157
158 #define EOB_ACT_CONTINUE_SCAN 0
159 #define EOB_ACT_END_OF_FILE 1
160 #define EOB_ACT_LAST_MATCH 2
161
162     #define YY_LESS_LINENO(n)
163     
164 /* Return all but the first "n" matched characters back to the input stream. */
165 #define yyless(n) \
166         do \
167                 { \
168                 /* Undo effects of setting up yytext. */ \
169         int yyless_macro_arg = (n); \
170         YY_LESS_LINENO(yyless_macro_arg);\
171                 *yy_cp = (yy_hold_char); \
172                 YY_RESTORE_YY_MORE_OFFSET \
173                 (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
174                 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
175                 } \
176         while ( 0 )
177
178 #define unput(c) yyunput( c, (yytext_ptr)  )
179
180 /* The following is because we cannot portably get our hands on size_t
181  * (without autoconf's help, which isn't available because we want
182  * flex-generated scanners to compile on their own).
183  */
184
185 #ifndef YY_TYPEDEF_YY_SIZE_T
186 #define YY_TYPEDEF_YY_SIZE_T
187 typedef unsigned int yy_size_t;
188 #endif
189
190 #ifndef YY_STRUCT_YY_BUFFER_STATE
191 #define YY_STRUCT_YY_BUFFER_STATE
192 struct yy_buffer_state
193         {
194         FILE *yy_input_file;
195
196         char *yy_ch_buf;                /* input buffer */
197         char *yy_buf_pos;               /* current position in input buffer */
198
199         /* Size of input buffer in bytes, not including room for EOB
200          * characters.
201          */
202         yy_size_t yy_buf_size;
203
204         /* Number of characters read into yy_ch_buf, not including EOB
205          * characters.
206          */
207         int yy_n_chars;
208
209         /* Whether we "own" the buffer - i.e., we know we created it,
210          * and can realloc() it to grow it, and should free() it to
211          * delete it.
212          */
213         int yy_is_our_buffer;
214
215         /* Whether this is an "interactive" input source; if so, and
216          * if we're using stdio for input, then we want to use getc()
217          * instead of fread(), to make sure we stop fetching input after
218          * each newline.
219          */
220         int yy_is_interactive;
221
222         /* Whether we're considered to be at the beginning of a line.
223          * If so, '^' rules will be active on the next match, otherwise
224          * not.
225          */
226         int yy_at_bol;
227
228     int yy_bs_lineno; /**< The line count. */
229     int yy_bs_column; /**< The column count. */
230     
231         /* Whether to try to fill the input buffer when we reach the
232          * end of it.
233          */
234         int yy_fill_buffer;
235
236         int yy_buffer_status;
237
238 #define YY_BUFFER_NEW 0
239 #define YY_BUFFER_NORMAL 1
240         /* When an EOF's been seen but there's still some text to process
241          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
242          * shouldn't try reading from the input source any more.  We might
243          * still have a bunch of tokens to match, though, because of
244          * possible backing-up.
245          *
246          * When we actually see the EOF, we change the status to "new"
247          * (via yyrestart()), so that the user can continue scanning by
248          * just pointing yyin at a new input file.
249          */
250 #define YY_BUFFER_EOF_PENDING 2
251
252         };
253 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
254
255 /* Stack of input buffers. */
256 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
257 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
258 static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
259
260 /* We provide macros for accessing buffer states in case in the
261  * future we want to put the buffer states in a more general
262  * "scanner state".
263  *
264  * Returns the top of the stack, or NULL.
265  */
266 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
267                           ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
268                           : NULL)
269
270 /* Same as previous macro, but useful when we know that the buffer stack is not
271  * NULL or when we need an lvalue. For internal use only.
272  */
273 #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
274
275 /* yy_hold_char holds the character lost when yytext is formed. */
276 static char yy_hold_char;
277 static int yy_n_chars;          /* number of characters read into yy_ch_buf */
278 int yyleng;
279
280 /* Points to current character in buffer. */
281 static char *yy_c_buf_p = (char *) 0;
282 static int yy_init = 0;         /* whether we need to initialize */
283 static int yy_start = 0;        /* start state number */
284
285 /* Flag which is used to allow yywrap()'s to do buffer switches
286  * instead of setting up a fresh yyin.  A bit of a hack ...
287  */
288 static int yy_did_buffer_switch_on_eof;
289
290 void yyrestart (FILE *input_file  );
291 void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
292 YY_BUFFER_STATE yy_create_buffer (FILE *file,int size  );
293 void yy_delete_buffer (YY_BUFFER_STATE b  );
294 void yy_flush_buffer (YY_BUFFER_STATE b  );
295 void yypush_buffer_state (YY_BUFFER_STATE new_buffer  );
296 void yypop_buffer_state (void );
297
298 static void yyensure_buffer_stack (void );
299 static void yy_load_buffer_state (void );
300 static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
301
302 #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
303
304 YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
305 YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
306 YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len  );
307
308 void *yyalloc (yy_size_t  );
309 void *yyrealloc (void *,yy_size_t  );
310 void yyfree (void *  );
311
312 #define yy_new_buffer yy_create_buffer
313
314 #define yy_set_interactive(is_interactive) \
315         { \
316         if ( ! YY_CURRENT_BUFFER ){ \
317         yyensure_buffer_stack (); \
318                 YY_CURRENT_BUFFER_LVALUE =    \
319             yy_create_buffer(yyin,YY_BUF_SIZE ); \
320         } \
321         YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
322         }
323
324 #define yy_set_bol(at_bol) \
325         { \
326         if ( ! YY_CURRENT_BUFFER ){\
327         yyensure_buffer_stack (); \
328                 YY_CURRENT_BUFFER_LVALUE =    \
329             yy_create_buffer(yyin,YY_BUF_SIZE ); \
330         } \
331         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
332         }
333
334 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
335
336 /* Begin user sect3 */
337
338 typedef unsigned char YY_CHAR;
339
340 FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
341
342 typedef int yy_state_type;
343
344 extern int yylineno;
345
346 int yylineno = 1;
347
348 extern char *yytext;
349 #define yytext_ptr yytext
350
351 static yy_state_type yy_get_previous_state (void );
352 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
353 static int yy_get_next_buffer (void );
354 static void yy_fatal_error (yyconst char msg[]  );
355
356 /* Done after the current pattern has been matched and before the
357  * corresponding action - sets up yytext.
358  */
359 #define YY_DO_BEFORE_ACTION \
360         (yytext_ptr) = yy_bp; \
361         yyleng = (size_t) (yy_cp - yy_bp); \
362         (yy_hold_char) = *yy_cp; \
363         *yy_cp = '\0'; \
364         (yy_c_buf_p) = yy_cp;
365
366 #define YY_NUM_RULES 7
367 #define YY_END_OF_BUFFER 8
368 /* This struct is not used in this scanner,
369    but its presence is necessary. */
370 struct yy_trans_info
371         {
372         flex_int32_t yy_verify;
373         flex_int32_t yy_nxt;
374         };
375 static yyconst flex_int16_t yy_accept[14] =
376     {   0,
377         0,    0,    8,    7,    6,    3,    2,    7,    5,    1,
378         4,    1,    0
379     } ;
380
381 static yyconst flex_int32_t yy_ec[256] =
382     {   0,
383         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
384         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
385         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
386         1,    2,    1,    4,    1,    1,    1,    1,    1,    1,
387         1,    5,    1,    1,    6,    1,    7,    6,    6,    6,
388         6,    6,    6,    6,    6,    6,    6,    1,    1,    1,
389         8,    1,    1,    1,    9,    9,    9,    9,    9,    9,
390         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
391         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
392         1,    1,    1,    1,    6,    1,    9,    9,    9,    9,
393
394         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
395         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
396         9,    9,    8,    1,    8,    1,    1,    1,    1,    1,
397         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
398         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
399         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
400         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
401         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
402         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
403         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
404
405         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
406         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
407         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
408         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
409         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
410         1,    1,    1,    1,    1
411     } ;
412
413 static yyconst flex_int32_t yy_meta[10] =
414     {   0,
415         1,    1,    1,    1,    1,    2,    1,    1,    2
416     } ;
417
418 static yyconst flex_int16_t yy_base[15] =
419     {   0,
420         0,    0,   12,   13,   13,   13,   13,    6,   13,    0,
421        13,    0,   13,    8
422     } ;
423
424 static yyconst flex_int16_t yy_def[15] =
425     {   0,
426        13,    1,   13,   13,   13,   13,   13,   13,   13,   14,
427        13,   14,    0,   13
428     } ;
429
430 static yyconst flex_int16_t yy_nxt[23] =
431     {   0,
432         4,    5,    6,    7,    4,    4,    8,    9,   10,   12,
433        11,   13,    3,   13,   13,   13,   13,   13,   13,   13,
434        13,   13
435     } ;
436
437 static yyconst flex_int16_t yy_chk[23] =
438     {   0,
439         1,    1,    1,    1,    1,    1,    1,    1,    1,   14,
440         8,    3,   13,   13,   13,   13,   13,   13,   13,   13,
441        13,   13
442     } ;
443
444 static yy_state_type yy_last_accepting_state;
445 static char *yy_last_accepting_cpos;
446
447 extern int yy_flex_debug;
448 int yy_flex_debug = 0;
449
450 /* The intent behind this definition is that it'll catch
451  * any uses of REJECT which flex missed.
452  */
453 #define REJECT reject_used_but_not_detected
454 #define yymore() yymore_used_but_not_detected
455 #define YY_MORE_ADJ 0
456 #define YY_RESTORE_YY_MORE_OFFSET
457 char *yytext;
458 #line 1 "slc-lex.l"
459 #line 2 "slc-lex.l"
460 /*
461  * Copyright (c) 2004 Kungliga Tekniska Högskolan
462  * (Royal Institute of Technology, Stockholm, Sweden). 
463  * All rights reserved. 
464  *
465  * Redistribution and use in source and binary forms, with or without 
466  * modification, are permitted provided that the following conditions 
467  * are met: 
468  *
469  * 1. Redistributions of source code must retain the above copyright 
470  *    notice, this list of conditions and the following disclaimer. 
471  *
472  * 2. Redistributions in binary form must reproduce the above copyright 
473  *    notice, this list of conditions and the following disclaimer in the 
474  *    documentation and/or other materials provided with the distribution. 
475  *
476  * 3. Neither the name of the Institute nor the names of its contributors 
477  *    may be used to endorse or promote products derived from this software 
478  *    without specific prior written permission. 
479  *
480  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 
481  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
482  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
483  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 
484  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
485  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
486  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
487  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
488  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
489  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
490  * SUCH DAMAGE. 
491  */
492
493 /* $Id: slc-lex.l 15118 2005-05-10 22:19:01Z lha $ */
494
495 #undef ECHO
496
497 #include <stdio.h>
498 #include <string.h>
499 #include <stdarg.h>
500 #include <stdlib.h>
501 #include "slc.h"
502 #include "slc-gram.h"
503 unsigned lineno = 1;
504
505 static void handle_comment(void);
506 static char * handle_string(void);
507
508 #define YY_NO_UNPUT
509
510 #undef ECHO
511
512 #line 513 "slc-lex.c"
513
514 #define INITIAL 0
515
516 #ifndef YY_NO_UNISTD_H
517 /* Special case for "unistd.h", since it is non-ANSI. We include it way
518  * down here because we want the user's section 1 to have been scanned first.
519  * The user has a chance to override it with an option.
520  */
521 #include <unistd.h>
522 #endif
523
524 #ifndef YY_EXTRA_TYPE
525 #define YY_EXTRA_TYPE void *
526 #endif
527
528 static int yy_init_globals (void );
529
530 /* Macros after this point can all be overridden by user definitions in
531  * section 1.
532  */
533
534 #ifndef YY_SKIP_YYWRAP
535 #ifdef __cplusplus
536 extern "C" int yywrap (void );
537 #else
538 extern int yywrap (void );
539 #endif
540 #endif
541
542     static void yyunput (int c,char *buf_ptr  );
543     
544 #ifndef yytext_ptr
545 static void yy_flex_strncpy (char *,yyconst char *,int );
546 #endif
547
548 #ifdef YY_NEED_STRLEN
549 static int yy_flex_strlen (yyconst char * );
550 #endif
551
552 #ifndef YY_NO_INPUT
553
554 #ifdef __cplusplus
555 static int yyinput (void );
556 #else
557 static int input (void );
558 #endif
559
560 #endif
561
562 /* Amount of stuff to slurp up with each read. */
563 #ifndef YY_READ_BUF_SIZE
564 #define YY_READ_BUF_SIZE 8192
565 #endif
566
567 /* Copy whatever the last rule matched to the standard output. */
568 #ifndef ECHO
569 /* This used to be an fputs(), but since the string might contain NUL's,
570  * we now use fwrite().
571  */
572 #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
573 #endif
574
575 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
576  * is returned in "result".
577  */
578 #ifndef YY_INPUT
579 #define YY_INPUT(buf,result,max_size) \
580         if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
581                 { \
582                 int c = '*'; \
583                 size_t n; \
584                 for ( n = 0; n < max_size && \
585                              (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
586                         buf[n] = (char) c; \
587                 if ( c == '\n' ) \
588                         buf[n++] = (char) c; \
589                 if ( c == EOF && ferror( yyin ) ) \
590                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
591                 result = n; \
592                 } \
593         else \
594                 { \
595                 errno=0; \
596                 while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
597                         { \
598                         if( errno != EINTR) \
599                                 { \
600                                 YY_FATAL_ERROR( "input in flex scanner failed" ); \
601                                 break; \
602                                 } \
603                         errno=0; \
604                         clearerr(yyin); \
605                         } \
606                 }\
607 \
608
609 #endif
610
611 /* No semi-colon after return; correct usage is to write "yyterminate();" -
612  * we don't want an extra ';' after the "return" because that will cause
613  * some compilers to complain about unreachable statements.
614  */
615 #ifndef yyterminate
616 #define yyterminate() return YY_NULL
617 #endif
618
619 /* Number of entries by which start-condition stack grows. */
620 #ifndef YY_START_STACK_INCR
621 #define YY_START_STACK_INCR 25
622 #endif
623
624 /* Report a fatal error. */
625 #ifndef YY_FATAL_ERROR
626 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
627 #endif
628
629 /* end tables serialization structures and prototypes */
630
631 /* Default declaration of generated scanner - a define so the user can
632  * easily add parameters.
633  */
634 #ifndef YY_DECL
635 #define YY_DECL_IS_OURS 1
636
637 extern int yylex (void);
638
639 #define YY_DECL int yylex (void)
640 #endif /* !YY_DECL */
641
642 /* Code executed at the beginning of each rule, after yytext and yyleng
643  * have been set up.
644  */
645 #ifndef YY_USER_ACTION
646 #define YY_USER_ACTION
647 #endif
648
649 /* Code executed at the end of each rule. */
650 #ifndef YY_BREAK
651 #define YY_BREAK break;
652 #endif
653
654 #define YY_RULE_SETUP \
655         YY_USER_ACTION
656
657 /** The main scanner function which does all the work.
658  */
659 YY_DECL
660 {
661         register yy_state_type yy_current_state;
662         register char *yy_cp, *yy_bp;
663         register int yy_act;
664     
665 #line 55 "slc-lex.l"
666
667 #line 668 "slc-lex.c"
668
669         if ( !(yy_init) )
670                 {
671                 (yy_init) = 1;
672
673 #ifdef YY_USER_INIT
674                 YY_USER_INIT;
675 #endif
676
677                 if ( ! (yy_start) )
678                         (yy_start) = 1; /* first start state */
679
680                 if ( ! yyin )
681                         yyin = stdin;
682
683                 if ( ! yyout )
684                         yyout = stdout;
685
686                 if ( ! YY_CURRENT_BUFFER ) {
687                         yyensure_buffer_stack ();
688                         YY_CURRENT_BUFFER_LVALUE =
689                                 yy_create_buffer(yyin,YY_BUF_SIZE );
690                 }
691
692                 yy_load_buffer_state( );
693                 }
694
695         while ( 1 )             /* loops until end-of-file is reached */
696                 {
697                 yy_cp = (yy_c_buf_p);
698
699                 /* Support of yytext. */
700                 *yy_cp = (yy_hold_char);
701
702                 /* yy_bp points to the position in yy_ch_buf of the start of
703                  * the current run.
704                  */
705                 yy_bp = yy_cp;
706
707                 yy_current_state = (yy_start);
708 yy_match:
709                 do
710                         {
711                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
712                         if ( yy_accept[yy_current_state] )
713                                 {
714                                 (yy_last_accepting_state) = yy_current_state;
715                                 (yy_last_accepting_cpos) = yy_cp;
716                                 }
717                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
718                                 {
719                                 yy_current_state = (int) yy_def[yy_current_state];
720                                 if ( yy_current_state >= 14 )
721                                         yy_c = yy_meta[(unsigned int) yy_c];
722                                 }
723                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
724                         ++yy_cp;
725                         }
726                 while ( yy_base[yy_current_state] != 13 );
727
728 yy_find_action:
729                 yy_act = yy_accept[yy_current_state];
730                 if ( yy_act == 0 )
731                         { /* have to back up */
732                         yy_cp = (yy_last_accepting_cpos);
733                         yy_current_state = (yy_last_accepting_state);
734                         yy_act = yy_accept[yy_current_state];
735                         }
736
737                 YY_DO_BEFORE_ACTION;
738
739 do_action:      /* This label is used only to access EOF actions. */
740
741                 switch ( yy_act )
742         { /* beginning of action switch */
743                         case 0: /* must back up */
744                         /* undo the effects of YY_DO_BEFORE_ACTION */
745                         *yy_cp = (yy_hold_char);
746                         yy_cp = (yy_last_accepting_cpos);
747                         yy_current_state = (yy_last_accepting_state);
748                         goto yy_find_action;
749
750 case 1:
751 YY_RULE_SETUP
752 #line 56 "slc-lex.l"
753 {
754                           yylval.string = strdup ((const char *)yytext);
755                           return LITERAL;
756                         }
757         YY_BREAK
758 case 2:
759 YY_RULE_SETUP
760 #line 60 "slc-lex.l"
761 { yylval.string = handle_string(); return STRING; }
762         YY_BREAK
763 case 3:
764 /* rule 3 can match eol */
765 YY_RULE_SETUP
766 #line 61 "slc-lex.l"
767 { ++lineno; }
768         YY_BREAK
769 case 4:
770 YY_RULE_SETUP
771 #line 62 "slc-lex.l"
772 { handle_comment(); }
773         YY_BREAK
774 case 5:
775 YY_RULE_SETUP
776 #line 63 "slc-lex.l"
777 { return *yytext; }
778         YY_BREAK
779 case 6:
780 YY_RULE_SETUP
781 #line 64 "slc-lex.l"
782 ;
783         YY_BREAK
784 case 7:
785 YY_RULE_SETUP
786 #line 65 "slc-lex.l"
787 ECHO;
788         YY_BREAK
789 #line 790 "slc-lex.c"
790 case YY_STATE_EOF(INITIAL):
791         yyterminate();
792
793         case YY_END_OF_BUFFER:
794                 {
795                 /* Amount of text matched not including the EOB char. */
796                 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
797
798                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
799                 *yy_cp = (yy_hold_char);
800                 YY_RESTORE_YY_MORE_OFFSET
801
802                 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
803                         {
804                         /* We're scanning a new file or input source.  It's
805                          * possible that this happened because the user
806                          * just pointed yyin at a new source and called
807                          * yylex().  If so, then we have to assure
808                          * consistency between YY_CURRENT_BUFFER and our
809                          * globals.  Here is the right place to do so, because
810                          * this is the first action (other than possibly a
811                          * back-up) that will match for the new input source.
812                          */
813                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
814                         YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
815                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
816                         }
817
818                 /* Note that here we test for yy_c_buf_p "<=" to the position
819                  * of the first EOB in the buffer, since yy_c_buf_p will
820                  * already have been incremented past the NUL character
821                  * (since all states make transitions on EOB to the
822                  * end-of-buffer state).  Contrast this with the test
823                  * in input().
824                  */
825                 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
826                         { /* This was really a NUL. */
827                         yy_state_type yy_next_state;
828
829                         (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
830
831                         yy_current_state = yy_get_previous_state(  );
832
833                         /* Okay, we're now positioned to make the NUL
834                          * transition.  We couldn't have
835                          * yy_get_previous_state() go ahead and do it
836                          * for us because it doesn't know how to deal
837                          * with the possibility of jamming (and we don't
838                          * want to build jamming into it because then it
839                          * will run more slowly).
840                          */
841
842                         yy_next_state = yy_try_NUL_trans( yy_current_state );
843
844                         yy_bp = (yytext_ptr) + YY_MORE_ADJ;
845
846                         if ( yy_next_state )
847                                 {
848                                 /* Consume the NUL. */
849                                 yy_cp = ++(yy_c_buf_p);
850                                 yy_current_state = yy_next_state;
851                                 goto yy_match;
852                                 }
853
854                         else
855                                 {
856                                 yy_cp = (yy_c_buf_p);
857                                 goto yy_find_action;
858                                 }
859                         }
860
861                 else switch ( yy_get_next_buffer(  ) )
862                         {
863                         case EOB_ACT_END_OF_FILE:
864                                 {
865                                 (yy_did_buffer_switch_on_eof) = 0;
866
867                                 if ( yywrap( ) )
868                                         {
869                                         /* Note: because we've taken care in
870                                          * yy_get_next_buffer() to have set up
871                                          * yytext, we can now set up
872                                          * yy_c_buf_p so that if some total
873                                          * hoser (like flex itself) wants to
874                                          * call the scanner after we return the
875                                          * YY_NULL, it'll still work - another
876                                          * YY_NULL will get returned.
877                                          */
878                                         (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
879
880                                         yy_act = YY_STATE_EOF(YY_START);
881                                         goto do_action;
882                                         }
883
884                                 else
885                                         {
886                                         if ( ! (yy_did_buffer_switch_on_eof) )
887                                                 YY_NEW_FILE;
888                                         }
889                                 break;
890                                 }
891
892                         case EOB_ACT_CONTINUE_SCAN:
893                                 (yy_c_buf_p) =
894                                         (yytext_ptr) + yy_amount_of_matched_text;
895
896                                 yy_current_state = yy_get_previous_state(  );
897
898                                 yy_cp = (yy_c_buf_p);
899                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
900                                 goto yy_match;
901
902                         case EOB_ACT_LAST_MATCH:
903                                 (yy_c_buf_p) =
904                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
905
906                                 yy_current_state = yy_get_previous_state(  );
907
908                                 yy_cp = (yy_c_buf_p);
909                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
910                                 goto yy_find_action;
911                         }
912                 break;
913                 }
914
915         default:
916                 YY_FATAL_ERROR(
917                         "fatal flex scanner internal error--no action found" );
918         } /* end of action switch */
919                 } /* end of scanning one token */
920 } /* end of yylex */
921
922 /* yy_get_next_buffer - try to read in a new buffer
923  *
924  * Returns a code representing an action:
925  *      EOB_ACT_LAST_MATCH -
926  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
927  *      EOB_ACT_END_OF_FILE - end of file
928  */
929 static int yy_get_next_buffer (void)
930 {
931         register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
932         register char *source = (yytext_ptr);
933         register int number_to_move, i;
934         int ret_val;
935
936         if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
937                 YY_FATAL_ERROR(
938                 "fatal flex scanner internal error--end of buffer missed" );
939
940         if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
941                 { /* Don't try to fill the buffer, so this is an EOF. */
942                 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
943                         {
944                         /* We matched a single character, the EOB, so
945                          * treat this as a final EOF.
946                          */
947                         return EOB_ACT_END_OF_FILE;
948                         }
949
950                 else
951                         {
952                         /* We matched some text prior to the EOB, first
953                          * process it.
954                          */
955                         return EOB_ACT_LAST_MATCH;
956                         }
957                 }
958
959         /* Try to read more data. */
960
961         /* First move last chars to start of buffer. */
962         number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
963
964         for ( i = 0; i < number_to_move; ++i )
965                 *(dest++) = *(source++);
966
967         if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
968                 /* don't do the read, it's not guaranteed to return an EOF,
969                  * just force an EOF
970                  */
971                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
972
973         else
974                 {
975                         int num_to_read =
976                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
977
978                 while ( num_to_read <= 0 )
979                         { /* Not enough room in the buffer - grow it. */
980
981                         /* just a shorter name for the current buffer */
982                         YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
983
984                         int yy_c_buf_p_offset =
985                                 (int) ((yy_c_buf_p) - b->yy_ch_buf);
986
987                         if ( b->yy_is_our_buffer )
988                                 {
989                                 int new_size = b->yy_buf_size * 2;
990
991                                 if ( new_size <= 0 )
992                                         b->yy_buf_size += b->yy_buf_size / 8;
993                                 else
994                                         b->yy_buf_size *= 2;
995
996                                 b->yy_ch_buf = (char *)
997                                         /* Include room in for 2 EOB chars. */
998                                         yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
999                                 }
1000                         else
1001                                 /* Can't grow it, we don't own it. */
1002                                 b->yy_ch_buf = 0;
1003
1004                         if ( ! b->yy_ch_buf )
1005                                 YY_FATAL_ERROR(
1006                                 "fatal error - scanner input buffer overflow" );
1007
1008                         (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
1009
1010                         num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
1011                                                 number_to_move - 1;
1012
1013                         }
1014
1015                 if ( num_to_read > YY_READ_BUF_SIZE )
1016                         num_to_read = YY_READ_BUF_SIZE;
1017
1018                 /* Read in more data. */
1019                 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
1020                         (yy_n_chars), num_to_read );
1021
1022                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
1023                 }
1024
1025         if ( (yy_n_chars) == 0 )
1026                 {
1027                 if ( number_to_move == YY_MORE_ADJ )
1028                         {
1029                         ret_val = EOB_ACT_END_OF_FILE;
1030                         yyrestart(yyin  );
1031                         }
1032
1033                 else
1034                         {
1035                         ret_val = EOB_ACT_LAST_MATCH;
1036                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
1037                                 YY_BUFFER_EOF_PENDING;
1038                         }
1039                 }
1040
1041         else
1042                 ret_val = EOB_ACT_CONTINUE_SCAN;
1043
1044         (yy_n_chars) += number_to_move;
1045         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
1046         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
1047
1048         (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
1049
1050         return ret_val;
1051 }
1052
1053 /* yy_get_previous_state - get the state just before the EOB char was reached */
1054
1055     static yy_state_type yy_get_previous_state (void)
1056 {
1057         register yy_state_type yy_current_state;
1058         register char *yy_cp;
1059     
1060         yy_current_state = (yy_start);
1061
1062         for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
1063                 {
1064                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
1065                 if ( yy_accept[yy_current_state] )
1066                         {
1067                         (yy_last_accepting_state) = yy_current_state;
1068                         (yy_last_accepting_cpos) = yy_cp;
1069                         }
1070                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1071                         {
1072                         yy_current_state = (int) yy_def[yy_current_state];
1073                         if ( yy_current_state >= 14 )
1074                                 yy_c = yy_meta[(unsigned int) yy_c];
1075                         }
1076                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1077                 }
1078
1079         return yy_current_state;
1080 }
1081
1082 /* yy_try_NUL_trans - try to make a transition on the NUL character
1083  *
1084  * synopsis
1085  *      next_state = yy_try_NUL_trans( current_state );
1086  */
1087     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
1088 {
1089         register int yy_is_jam;
1090         register char *yy_cp = (yy_c_buf_p);
1091
1092         register YY_CHAR yy_c = 1;
1093         if ( yy_accept[yy_current_state] )
1094                 {
1095                 (yy_last_accepting_state) = yy_current_state;
1096                 (yy_last_accepting_cpos) = yy_cp;
1097                 }
1098         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1099                 {
1100                 yy_current_state = (int) yy_def[yy_current_state];
1101                 if ( yy_current_state >= 14 )
1102                         yy_c = yy_meta[(unsigned int) yy_c];
1103                 }
1104         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1105         yy_is_jam = (yy_current_state == 13);
1106
1107         return yy_is_jam ? 0 : yy_current_state;
1108 }
1109
1110     static void yyunput (int c, register char * yy_bp )
1111 {
1112         register char *yy_cp;
1113     
1114     yy_cp = (yy_c_buf_p);
1115
1116         /* undo effects of setting up yytext */
1117         *yy_cp = (yy_hold_char);
1118
1119         if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
1120                 { /* need to shift things up to make room */
1121                 /* +2 for EOB chars. */
1122                 register int number_to_move = (yy_n_chars) + 2;
1123                 register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
1124                                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
1125                 register char *source =
1126                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
1127
1128                 while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
1129                         *--dest = *--source;
1130
1131                 yy_cp += (int) (dest - source);
1132                 yy_bp += (int) (dest - source);
1133                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
1134                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
1135
1136                 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
1137                         YY_FATAL_ERROR( "flex scanner push-back overflow" );
1138                 }
1139
1140         *--yy_cp = (char) c;
1141
1142         (yytext_ptr) = yy_bp;
1143         (yy_hold_char) = *yy_cp;
1144         (yy_c_buf_p) = yy_cp;
1145 }
1146
1147 #ifndef YY_NO_INPUT
1148 #ifdef __cplusplus
1149     static int yyinput (void)
1150 #else
1151     static int input  (void)
1152 #endif
1153
1154 {
1155         int c;
1156     
1157         *(yy_c_buf_p) = (yy_hold_char);
1158
1159         if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
1160                 {
1161                 /* yy_c_buf_p now points to the character we want to return.
1162                  * If this occurs *before* the EOB characters, then it's a
1163                  * valid NUL; if not, then we've hit the end of the buffer.
1164                  */
1165                 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
1166                         /* This was really a NUL. */
1167                         *(yy_c_buf_p) = '\0';
1168
1169                 else
1170                         { /* need more input */
1171                         int offset = (yy_c_buf_p) - (yytext_ptr);
1172                         ++(yy_c_buf_p);
1173
1174                         switch ( yy_get_next_buffer(  ) )
1175                                 {
1176                                 case EOB_ACT_LAST_MATCH:
1177                                         /* This happens because yy_g_n_b()
1178                                          * sees that we've accumulated a
1179                                          * token and flags that we need to
1180                                          * try matching the token before
1181                                          * proceeding.  But for input(),
1182                                          * there's no matching to consider.
1183                                          * So convert the EOB_ACT_LAST_MATCH
1184                                          * to EOB_ACT_END_OF_FILE.
1185                                          */
1186
1187                                         /* Reset buffer status. */
1188                                         yyrestart(yyin );
1189
1190                                         /*FALLTHROUGH*/
1191
1192                                 case EOB_ACT_END_OF_FILE:
1193                                         {
1194                                         if ( yywrap( ) )
1195                                                 return 0;
1196
1197                                         if ( ! (yy_did_buffer_switch_on_eof) )
1198                                                 YY_NEW_FILE;
1199 #ifdef __cplusplus
1200                                         return yyinput();
1201 #else
1202                                         return input();
1203 #endif
1204                                         }
1205
1206                                 case EOB_ACT_CONTINUE_SCAN:
1207                                         (yy_c_buf_p) = (yytext_ptr) + offset;
1208                                         break;
1209                                 }
1210                         }
1211                 }
1212
1213         c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
1214         *(yy_c_buf_p) = '\0';   /* preserve yytext */
1215         (yy_hold_char) = *++(yy_c_buf_p);
1216
1217         return c;
1218 }
1219 #endif  /* ifndef YY_NO_INPUT */
1220
1221 /** Immediately switch to a different input stream.
1222  * @param input_file A readable stream.
1223  * 
1224  * @note This function does not reset the start condition to @c INITIAL .
1225  */
1226     void yyrestart  (FILE * input_file )
1227 {
1228     
1229         if ( ! YY_CURRENT_BUFFER ){
1230         yyensure_buffer_stack ();
1231                 YY_CURRENT_BUFFER_LVALUE =
1232             yy_create_buffer(yyin,YY_BUF_SIZE );
1233         }
1234
1235         yy_init_buffer(YY_CURRENT_BUFFER,input_file );
1236         yy_load_buffer_state( );
1237 }
1238
1239 /** Switch to a different input buffer.
1240  * @param new_buffer The new input buffer.
1241  * 
1242  */
1243     void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
1244 {
1245     
1246         /* TODO. We should be able to replace this entire function body
1247          * with
1248          *              yypop_buffer_state();
1249          *              yypush_buffer_state(new_buffer);
1250      */
1251         yyensure_buffer_stack ();
1252         if ( YY_CURRENT_BUFFER == new_buffer )
1253                 return;
1254
1255         if ( YY_CURRENT_BUFFER )
1256                 {
1257                 /* Flush out information for old buffer. */
1258                 *(yy_c_buf_p) = (yy_hold_char);
1259                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
1260                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
1261                 }
1262
1263         YY_CURRENT_BUFFER_LVALUE = new_buffer;
1264         yy_load_buffer_state( );
1265
1266         /* We don't actually know whether we did this switch during
1267          * EOF (yywrap()) processing, but the only time this flag
1268          * is looked at is after yywrap() is called, so it's safe
1269          * to go ahead and always set it.
1270          */
1271         (yy_did_buffer_switch_on_eof) = 1;
1272 }
1273
1274 static void yy_load_buffer_state  (void)
1275 {
1276         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
1277         (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
1278         yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
1279         (yy_hold_char) = *(yy_c_buf_p);
1280 }
1281
1282 /** Allocate and initialize an input buffer state.
1283  * @param file A readable stream.
1284  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
1285  * 
1286  * @return the allocated buffer state.
1287  */
1288     YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
1289 {
1290         YY_BUFFER_STATE b;
1291     
1292         b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
1293         if ( ! b )
1294                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
1295
1296         b->yy_buf_size = size;
1297
1298         /* yy_ch_buf has to be 2 characters longer than the size given because
1299          * we need to put in 2 end-of-buffer characters.
1300          */
1301         b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
1302         if ( ! b->yy_ch_buf )
1303                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
1304
1305         b->yy_is_our_buffer = 1;
1306
1307         yy_init_buffer(b,file );
1308
1309         return b;
1310 }
1311
1312 /** Destroy the buffer.
1313  * @param b a buffer created with yy_create_buffer()
1314  * 
1315  */
1316     void yy_delete_buffer (YY_BUFFER_STATE  b )
1317 {
1318     
1319         if ( ! b )
1320                 return;
1321
1322         if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
1323                 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
1324
1325         if ( b->yy_is_our_buffer )
1326                 yyfree((void *) b->yy_ch_buf  );
1327
1328         yyfree((void *) b  );
1329 }
1330
1331 #ifndef __cplusplus
1332 extern int isatty (int );
1333 #endif /* __cplusplus */
1334     
1335 /* Initializes or reinitializes a buffer.
1336  * This function is sometimes called more than once on the same buffer,
1337  * such as during a yyrestart() or at EOF.
1338  */
1339     static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
1340
1341 {
1342         int oerrno = errno;
1343     
1344         yy_flush_buffer(b );
1345
1346         b->yy_input_file = file;
1347         b->yy_fill_buffer = 1;
1348
1349     /* If b is the current buffer, then yy_init_buffer was _probably_
1350      * called from yyrestart() or through yy_get_next_buffer.
1351      * In that case, we don't want to reset the lineno or column.
1352      */
1353     if (b != YY_CURRENT_BUFFER){
1354         b->yy_bs_lineno = 1;
1355         b->yy_bs_column = 0;
1356     }
1357
1358         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
1359     
1360         errno = oerrno;
1361 }
1362
1363 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
1364  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
1365  * 
1366  */
1367     void yy_flush_buffer (YY_BUFFER_STATE  b )
1368 {
1369         if ( ! b )
1370                 return;
1371
1372         b->yy_n_chars = 0;
1373
1374         /* We always need two end-of-buffer characters.  The first causes
1375          * a transition to the end-of-buffer state.  The second causes
1376          * a jam in that state.
1377          */
1378         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
1379         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
1380
1381         b->yy_buf_pos = &b->yy_ch_buf[0];
1382
1383         b->yy_at_bol = 1;
1384         b->yy_buffer_status = YY_BUFFER_NEW;
1385
1386         if ( b == YY_CURRENT_BUFFER )
1387                 yy_load_buffer_state( );
1388 }
1389
1390 /** Pushes the new state onto the stack. The new state becomes
1391  *  the current state. This function will allocate the stack
1392  *  if necessary.
1393  *  @param new_buffer The new state.
1394  *  
1395  */
1396 void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
1397 {
1398         if (new_buffer == NULL)
1399                 return;
1400
1401         yyensure_buffer_stack();
1402
1403         /* This block is copied from yy_switch_to_buffer. */
1404         if ( YY_CURRENT_BUFFER )
1405                 {
1406                 /* Flush out information for old buffer. */
1407                 *(yy_c_buf_p) = (yy_hold_char);
1408                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
1409                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
1410                 }
1411
1412         /* Only push if top exists. Otherwise, replace top. */
1413         if (YY_CURRENT_BUFFER)
1414                 (yy_buffer_stack_top)++;
1415         YY_CURRENT_BUFFER_LVALUE = new_buffer;
1416
1417         /* copied from yy_switch_to_buffer. */
1418         yy_load_buffer_state( );
1419         (yy_did_buffer_switch_on_eof) = 1;
1420 }
1421
1422 /** Removes and deletes the top of the stack, if present.
1423  *  The next element becomes the new top.
1424  *  
1425  */
1426 void yypop_buffer_state (void)
1427 {
1428         if (!YY_CURRENT_BUFFER)
1429                 return;
1430
1431         yy_delete_buffer(YY_CURRENT_BUFFER );
1432         YY_CURRENT_BUFFER_LVALUE = NULL;
1433         if ((yy_buffer_stack_top) > 0)
1434                 --(yy_buffer_stack_top);
1435
1436         if (YY_CURRENT_BUFFER) {
1437                 yy_load_buffer_state( );
1438                 (yy_did_buffer_switch_on_eof) = 1;
1439         }
1440 }
1441
1442 /* Allocates the stack if it does not exist.
1443  *  Guarantees space for at least one push.
1444  */
1445 static void yyensure_buffer_stack (void)
1446 {
1447         int num_to_alloc;
1448     
1449         if (!(yy_buffer_stack)) {
1450
1451                 /* First allocation is just for 2 elements, since we don't know if this
1452                  * scanner will even need a stack. We use 2 instead of 1 to avoid an
1453                  * immediate realloc on the next call.
1454          */
1455                 num_to_alloc = 1;
1456                 (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
1457                                                                 (num_to_alloc * sizeof(struct yy_buffer_state*)
1458                                                                 );
1459                 
1460                 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
1461                                 
1462                 (yy_buffer_stack_max) = num_to_alloc;
1463                 (yy_buffer_stack_top) = 0;
1464                 return;
1465         }
1466
1467         if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
1468
1469                 /* Increase the buffer to prepare for a possible push. */
1470                 int grow_size = 8 /* arbitrary grow size */;
1471
1472                 num_to_alloc = (yy_buffer_stack_max) + grow_size;
1473                 (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
1474                                                                 ((yy_buffer_stack),
1475                                                                 num_to_alloc * sizeof(struct yy_buffer_state*)
1476                                                                 );
1477
1478                 /* zero only the new slots.*/
1479                 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
1480                 (yy_buffer_stack_max) = num_to_alloc;
1481         }
1482 }
1483
1484 /** Setup the input buffer state to scan directly from a user-specified character buffer.
1485  * @param base the character buffer
1486  * @param size the size in bytes of the character buffer
1487  * 
1488  * @return the newly allocated buffer state object. 
1489  */
1490 YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
1491 {
1492         YY_BUFFER_STATE b;
1493     
1494         if ( size < 2 ||
1495              base[size-2] != YY_END_OF_BUFFER_CHAR ||
1496              base[size-1] != YY_END_OF_BUFFER_CHAR )
1497                 /* They forgot to leave room for the EOB's. */
1498                 return 0;
1499
1500         b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
1501         if ( ! b )
1502                 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
1503
1504         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
1505         b->yy_buf_pos = b->yy_ch_buf = base;
1506         b->yy_is_our_buffer = 0;
1507         b->yy_input_file = 0;
1508         b->yy_n_chars = b->yy_buf_size;
1509         b->yy_is_interactive = 0;
1510         b->yy_at_bol = 1;
1511         b->yy_fill_buffer = 0;
1512         b->yy_buffer_status = YY_BUFFER_NEW;
1513
1514         yy_switch_to_buffer(b  );
1515
1516         return b;
1517 }
1518
1519 /** Setup the input buffer state to scan a string. The next call to yylex() will
1520  * scan from a @e copy of @a str.
1521  * @param str a NUL-terminated string to scan
1522  * 
1523  * @return the newly allocated buffer state object.
1524  * @note If you want to scan bytes that may contain NUL values, then use
1525  *       yy_scan_bytes() instead.
1526  */
1527 YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
1528 {
1529     
1530         return yy_scan_bytes(yystr,strlen(yystr) );
1531 }
1532
1533 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
1534  * scan from a @e copy of @a bytes.
1535  * @param bytes the byte buffer to scan
1536  * @param len the number of bytes in the buffer pointed to by @a bytes.
1537  * 
1538  * @return the newly allocated buffer state object.
1539  */
1540 YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
1541 {
1542         YY_BUFFER_STATE b;
1543         char *buf;
1544         yy_size_t n;
1545         int i;
1546     
1547         /* Get memory for full buffer, including space for trailing EOB's. */
1548         n = _yybytes_len + 2;
1549         buf = (char *) yyalloc(n  );
1550         if ( ! buf )
1551                 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
1552
1553         for ( i = 0; i < _yybytes_len; ++i )
1554                 buf[i] = yybytes[i];
1555
1556         buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
1557
1558         b = yy_scan_buffer(buf,n );
1559         if ( ! b )
1560                 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
1561
1562         /* It's okay to grow etc. this buffer, and we should throw it
1563          * away when we're done.
1564          */
1565         b->yy_is_our_buffer = 1;
1566
1567         return b;
1568 }
1569
1570 #ifndef YY_EXIT_FAILURE
1571 #define YY_EXIT_FAILURE 2
1572 #endif
1573
1574 static void yy_fatal_error (yyconst char* msg )
1575 {
1576         (void) fprintf( stderr, "%s\n", msg );
1577         exit( YY_EXIT_FAILURE );
1578 }
1579
1580 /* Redefine yyless() so it works in section 3 code. */
1581
1582 #undef yyless
1583 #define yyless(n) \
1584         do \
1585                 { \
1586                 /* Undo effects of setting up yytext. */ \
1587         int yyless_macro_arg = (n); \
1588         YY_LESS_LINENO(yyless_macro_arg);\
1589                 yytext[yyleng] = (yy_hold_char); \
1590                 (yy_c_buf_p) = yytext + yyless_macro_arg; \
1591                 (yy_hold_char) = *(yy_c_buf_p); \
1592                 *(yy_c_buf_p) = '\0'; \
1593                 yyleng = yyless_macro_arg; \
1594                 } \
1595         while ( 0 )
1596
1597 /* Accessor  methods (get/set functions) to struct members. */
1598
1599 /** Get the current line number.
1600  * 
1601  */
1602 int yyget_lineno  (void)
1603 {
1604         
1605     return yylineno;
1606 }
1607
1608 /** Get the input stream.
1609  * 
1610  */
1611 FILE *yyget_in  (void)
1612 {
1613         return yyin;
1614 }
1615
1616 /** Get the output stream.
1617  * 
1618  */
1619 FILE *yyget_out  (void)
1620 {
1621         return yyout;
1622 }
1623
1624 /** Get the length of the current token.
1625  * 
1626  */
1627 int yyget_leng  (void)
1628 {
1629         return yyleng;
1630 }
1631
1632 /** Get the current token.
1633  * 
1634  */
1635
1636 char *yyget_text  (void)
1637 {
1638         return yytext;
1639 }
1640
1641 /** Set the current line number.
1642  * @param line_number
1643  * 
1644  */
1645 void yyset_lineno (int  line_number )
1646 {
1647     
1648     yylineno = line_number;
1649 }
1650
1651 /** Set the input stream. This does not discard the current
1652  * input buffer.
1653  * @param in_str A readable stream.
1654  * 
1655  * @see yy_switch_to_buffer
1656  */
1657 void yyset_in (FILE *  in_str )
1658 {
1659         yyin = in_str ;
1660 }
1661
1662 void yyset_out (FILE *  out_str )
1663 {
1664         yyout = out_str ;
1665 }
1666
1667 int yyget_debug  (void)
1668 {
1669         return yy_flex_debug;
1670 }
1671
1672 void yyset_debug (int  bdebug )
1673 {
1674         yy_flex_debug = bdebug ;
1675 }
1676
1677 static int yy_init_globals (void)
1678 {
1679         /* Initialization is the same as for the non-reentrant scanner.
1680      * This function is called from yylex_destroy(), so don't allocate here.
1681      */
1682
1683     (yy_buffer_stack) = 0;
1684     (yy_buffer_stack_top) = 0;
1685     (yy_buffer_stack_max) = 0;
1686     (yy_c_buf_p) = (char *) 0;
1687     (yy_init) = 0;
1688     (yy_start) = 0;
1689
1690 /* Defined in main.c */
1691 #ifdef YY_STDINIT
1692     yyin = stdin;
1693     yyout = stdout;
1694 #else
1695     yyin = (FILE *) 0;
1696     yyout = (FILE *) 0;
1697 #endif
1698
1699     /* For future reference: Set errno on error, since we are called by
1700      * yylex_init()
1701      */
1702     return 0;
1703 }
1704
1705 /* yylex_destroy is for both reentrant and non-reentrant scanners. */
1706 int yylex_destroy  (void)
1707 {
1708     
1709     /* Pop the buffer stack, destroying each element. */
1710         while(YY_CURRENT_BUFFER){
1711                 yy_delete_buffer(YY_CURRENT_BUFFER  );
1712                 YY_CURRENT_BUFFER_LVALUE = NULL;
1713                 yypop_buffer_state();
1714         }
1715
1716         /* Destroy the stack itself. */
1717         yyfree((yy_buffer_stack) );
1718         (yy_buffer_stack) = NULL;
1719
1720     /* Reset the globals. This is important in a non-reentrant scanner so the next time
1721      * yylex() is called, initialization will occur. */
1722     yy_init_globals( );
1723
1724     return 0;
1725 }
1726
1727 /*
1728  * Internal utility routines.
1729  */
1730
1731 #ifndef yytext_ptr
1732 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
1733 {
1734         register int i;
1735         for ( i = 0; i < n; ++i )
1736                 s1[i] = s2[i];
1737 }
1738 #endif
1739
1740 #ifdef YY_NEED_STRLEN
1741 static int yy_flex_strlen (yyconst char * s )
1742 {
1743         register int n;
1744         for ( n = 0; s[n]; ++n )
1745                 ;
1746
1747         return n;
1748 }
1749 #endif
1750
1751 void *yyalloc (yy_size_t  size )
1752 {
1753         return (void *) malloc( size );
1754 }
1755
1756 void *yyrealloc  (void * ptr, yy_size_t  size )
1757 {
1758         /* The cast to (char *) in the following accommodates both
1759          * implementations that use char* generic pointers, and those
1760          * that use void* generic pointers.  It works with the latter
1761          * because both ANSI C and C++ allow castless assignment from
1762          * any pointer type to void*, and deal with argument conversions
1763          * as though doing an assignment.
1764          */
1765         return (void *) realloc( (char *) ptr, size );
1766 }
1767
1768 void yyfree (void * ptr )
1769 {
1770         free( (char *) ptr );   /* see yyrealloc() for (char *) cast */
1771 }
1772
1773 #define YYTABLES_NAME "yytables"
1774
1775 #line 65 "slc-lex.l"
1776
1777
1778
1779 void
1780 error_message (const char *format, ...)
1781 {
1782      va_list args;
1783
1784      va_start (args, format);
1785      fprintf (stderr, "%s:%d: ", filename, lineno);
1786      vfprintf (stderr, format, args);
1787      va_end (args);
1788      error_flag++;
1789 }
1790
1791 void
1792 yyerror (char *s)
1793 {
1794     error_message("%s\n", s);
1795 }
1796
1797 static void
1798 handle_comment(void)
1799 {
1800     int c;
1801     int start_lineno = lineno;
1802     int level = 1;
1803     int seen_star = 0;
1804     int seen_slash = 0;
1805     while((c = input()) != EOF) {
1806         if(c == '/') {
1807             if(seen_star) {
1808                 if(--level == 0)
1809                     return;
1810                 seen_star = 0;
1811                 continue;
1812             }
1813             seen_slash = 1;
1814             continue;
1815         }
1816         if(seen_star && c == '/') {
1817             if(--level == 0)
1818                 return;
1819             seen_star = 0;
1820             continue;
1821         }
1822         if(c == '*') {
1823             if(seen_slash) {
1824                 level++;
1825                 seen_star = seen_slash = 0;
1826                 continue;
1827             } 
1828             seen_star = 1;
1829             continue;
1830         }
1831         seen_star = seen_slash = 0;
1832         if(c == '\n') {
1833             lineno++;
1834             continue;
1835         }
1836     }
1837     if(c == EOF)
1838         error_message("unterminated comment, possibly started on line %d\n", start_lineno);
1839 }
1840
1841 static char *
1842 handle_string(void)
1843 {
1844     char x[1024];
1845     int i = 0;
1846     int c;
1847     int quote = 0;
1848     while((c = input()) != EOF){
1849         if(quote) {
1850             x[i++] = '\\';
1851             x[i++] = c;
1852             quote = 0;
1853             continue;
1854         }
1855         if(c == '\n'){
1856             error_message("unterminated string");
1857             lineno++;
1858             break;
1859         }
1860         if(c == '\\'){
1861             quote++;
1862             continue;
1863         }
1864         if(c == '\"')
1865             break;
1866         x[i++] = c;
1867     }
1868     x[i] = '\0';
1869     return strdup(x);
1870 }
1871
1872 int
1873 yywrap () 
1874 {
1875      return 1;
1876 }
1877