Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
d26d5300d49147dc0066df421f8afb239deb8600
[simgrid.git] / src / xbt / graphxml.c
1
2 #line 3 "src/xbt/graphxml.c"
3
4 #define  YY_INT_ALIGNED short int
5
6 /* A lexical scanner generated by flex */
7
8 #define yy_create_buffer xbt_graph_parse__create_buffer
9 #define yy_delete_buffer xbt_graph_parse__delete_buffer
10 #define yy_flex_debug xbt_graph_parse__flex_debug
11 #define yy_init_buffer xbt_graph_parse__init_buffer
12 #define yy_flush_buffer xbt_graph_parse__flush_buffer
13 #define yy_load_buffer_state xbt_graph_parse__load_buffer_state
14 #define yy_switch_to_buffer xbt_graph_parse__switch_to_buffer
15 #define yyin xbt_graph_parse_in
16 #define yyleng xbt_graph_parse_leng
17 #define yylex xbt_graph_parse_lex
18 #define yylineno xbt_graph_parse_lineno
19 #define yyout xbt_graph_parse_out
20 #define yyrestart xbt_graph_parse_restart
21 #define yytext xbt_graph_parse_text
22 #define yywrap xbt_graph_parse_wrap
23 #define yyalloc xbt_graph_parse_alloc
24 #define yyrealloc xbt_graph_parse_realloc
25 #define yyfree xbt_graph_parse_free
26
27 #define FLEX_SCANNER
28 #define YY_FLEX_MAJOR_VERSION 2
29 #define YY_FLEX_MINOR_VERSION 5
30 #define YY_FLEX_SUBMINOR_VERSION 35
31 #if YY_FLEX_SUBMINOR_VERSION > 0
32 #define FLEX_BETA
33 #endif
34
35 /* First, we deal with  platform-specific or compiler-specific issues. */
36
37 /* begin standard C headers. */
38 #include <stdio.h>
39 #include <string.h>
40 #include <errno.h>
41 #include <stdlib.h>
42
43 /* end standard C headers. */
44
45 /* flex integer type definitions */
46
47 #ifndef FLEXINT_H
48 #define FLEXINT_H
49
50 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
51
52 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
53
54 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
55  * if you want the limit (max/min) macros for int types. 
56  */
57 #ifndef __STDC_LIMIT_MACROS
58 #define __STDC_LIMIT_MACROS 1
59 #endif
60
61 #include <inttypes.h>
62 typedef int8_t flex_int8_t;
63 typedef uint8_t flex_uint8_t;
64 typedef int16_t flex_int16_t;
65 typedef uint16_t flex_uint16_t;
66 typedef int32_t flex_int32_t;
67 typedef uint32_t flex_uint32_t;
68 #else
69 typedef signed char flex_int8_t;
70 typedef short int flex_int16_t;
71 typedef int flex_int32_t;
72 typedef unsigned char flex_uint8_t; 
73 typedef unsigned short int flex_uint16_t;
74 typedef unsigned int flex_uint32_t;
75
76 /* Limits of integral types. */
77 #ifndef INT8_MIN
78 #define INT8_MIN               (-128)
79 #endif
80 #ifndef INT16_MIN
81 #define INT16_MIN              (-32767-1)
82 #endif
83 #ifndef INT32_MIN
84 #define INT32_MIN              (-2147483647-1)
85 #endif
86 #ifndef INT8_MAX
87 #define INT8_MAX               (127)
88 #endif
89 #ifndef INT16_MAX
90 #define INT16_MAX              (32767)
91 #endif
92 #ifndef INT32_MAX
93 #define INT32_MAX              (2147483647)
94 #endif
95 #ifndef UINT8_MAX
96 #define UINT8_MAX              (255U)
97 #endif
98 #ifndef UINT16_MAX
99 #define UINT16_MAX             (65535U)
100 #endif
101 #ifndef UINT32_MAX
102 #define UINT32_MAX             (4294967295U)
103 #endif
104
105 #endif /* ! C99 */
106
107 #endif /* ! FLEXINT_H */
108
109 #ifdef __cplusplus
110
111 /* The "const" storage-class-modifier is valid. */
112 #define YY_USE_CONST
113
114 #else   /* ! __cplusplus */
115
116 /* C99 requires __STDC__ to be defined as 1. */
117 #if defined (__STDC__)
118
119 #define YY_USE_CONST
120
121 #endif  /* defined (__STDC__) */
122 #endif  /* ! __cplusplus */
123
124 #ifdef YY_USE_CONST
125 #define yyconst const
126 #else
127 #define yyconst
128 #endif
129
130 /* Returned upon end-of-file. */
131 #define YY_NULL 0
132
133 /* Promotes a possibly negative, possibly signed char to an unsigned
134  * integer for use as an array index.  If the signed char is negative,
135  * we want to instead treat it as an 8-bit unsigned char, hence the
136  * double cast.
137  */
138 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
139
140 /* Enter a start condition.  This macro really ought to take a parameter,
141  * but we do it the disgusting crufty way forced on us by the ()-less
142  * definition of BEGIN.
143  */
144 #define BEGIN (yy_start) = 1 + 2 *
145
146 /* Translate the current start state into a value that can be later handed
147  * to BEGIN to return to the state.  The YYSTATE alias is for lex
148  * compatibility.
149  */
150 #define YY_START (((yy_start) - 1) / 2)
151 #define YYSTATE YY_START
152
153 /* Action number for EOF rule of a given start state. */
154 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
155
156 /* Special action meaning "start processing a new file". */
157 #define YY_NEW_FILE xbt_graph_parse_restart(xbt_graph_parse_in  )
158
159 #define YY_END_OF_BUFFER_CHAR 0
160
161 /* Size of default input buffer. */
162 #ifndef YY_BUF_SIZE
163 #ifdef __ia64__
164 /* On IA-64, the buffer size is 16k, not 8k.
165  * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
166  * Ditto for the __ia64__ case accordingly.
167  */
168 #define YY_BUF_SIZE 32768
169 #else
170 #define YY_BUF_SIZE 16384
171 #endif /* __ia64__ */
172 #endif
173
174 /* The state buf must be large enough to hold one state per character in the main buffer.
175  */
176 #define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
177
178 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
179 #define YY_TYPEDEF_YY_BUFFER_STATE
180 typedef struct yy_buffer_state *YY_BUFFER_STATE;
181 #endif
182
183 extern int xbt_graph_parse_leng;
184
185 extern FILE *xbt_graph_parse_in, *xbt_graph_parse_out;
186
187 #define EOB_ACT_CONTINUE_SCAN 0
188 #define EOB_ACT_END_OF_FILE 1
189 #define EOB_ACT_LAST_MATCH 2
190
191     /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
192      *       access to the local variable yy_act. Since yyless() is a macro, it would break
193      *       existing scanners that call yyless() from OUTSIDE xbt_graph_parse_lex. 
194      *       One obvious solution it to make yy_act a global. I tried that, and saw
195      *       a 5% performance hit in a non-xbt_graph_parse_lineno scanner, because yy_act is
196      *       normally declared as a register variable-- so it is not worth it.
197      */
198     #define  YY_LESS_LINENO(n) \
199             do { \
200                 int yyl;\
201                 for ( yyl = n; yyl < xbt_graph_parse_leng; ++yyl )\
202                     if ( xbt_graph_parse_text[yyl] == '\n' )\
203                         --xbt_graph_parse_lineno;\
204             }while(0)
205     
206 /* Return all but the first "n" matched characters back to the input stream. */
207 #define yyless(n) \
208         do \
209                 { \
210                 /* Undo effects of setting up xbt_graph_parse_text. */ \
211         int yyless_macro_arg = (n); \
212         YY_LESS_LINENO(yyless_macro_arg);\
213                 *yy_cp = (yy_hold_char); \
214                 YY_RESTORE_YY_MORE_OFFSET \
215                 (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
216                 YY_DO_BEFORE_ACTION; /* set up xbt_graph_parse_text again */ \
217                 } \
218         while ( 0 )
219
220 #define unput(c) yyunput( c, (yytext_ptr)  )
221
222 #ifndef YY_TYPEDEF_YY_SIZE_T
223 #define YY_TYPEDEF_YY_SIZE_T
224 typedef size_t yy_size_t;
225 #endif
226
227 #ifndef YY_STRUCT_YY_BUFFER_STATE
228 #define YY_STRUCT_YY_BUFFER_STATE
229 struct yy_buffer_state
230         {
231         FILE *yy_input_file;
232
233         char *yy_ch_buf;                /* input buffer */
234         char *yy_buf_pos;               /* current position in input buffer */
235
236         /* Size of input buffer in bytes, not including room for EOB
237          * characters.
238          */
239         yy_size_t yy_buf_size;
240
241         /* Number of characters read into yy_ch_buf, not including EOB
242          * characters.
243          */
244         int yy_n_chars;
245
246         /* Whether we "own" the buffer - i.e., we know we created it,
247          * and can realloc() it to grow it, and should free() it to
248          * delete it.
249          */
250         int yy_is_our_buffer;
251
252         /* Whether this is an "interactive" input source; if so, and
253          * if we're using stdio for input, then we want to use getc()
254          * instead of fread(), to make sure we stop fetching input after
255          * each newline.
256          */
257         int yy_is_interactive;
258
259         /* Whether we're considered to be at the beginning of a line.
260          * If so, '^' rules will be active on the next match, otherwise
261          * not.
262          */
263         int yy_at_bol;
264
265     int yy_bs_lineno; /**< The line count. */
266     int yy_bs_column; /**< The column count. */
267     
268         /* Whether to try to fill the input buffer when we reach the
269          * end of it.
270          */
271         int yy_fill_buffer;
272
273         int yy_buffer_status;
274
275 #define YY_BUFFER_NEW 0
276 #define YY_BUFFER_NORMAL 1
277         /* When an EOF's been seen but there's still some text to process
278          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
279          * shouldn't try reading from the input source any more.  We might
280          * still have a bunch of tokens to match, though, because of
281          * possible backing-up.
282          *
283          * When we actually see the EOF, we change the status to "new"
284          * (via xbt_graph_parse_restart()), so that the user can continue scanning by
285          * just pointing xbt_graph_parse_in at a new input file.
286          */
287 #define YY_BUFFER_EOF_PENDING 2
288
289         };
290 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
291
292 /* Stack of input buffers. */
293 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
294 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
295 static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
296
297 /* We provide macros for accessing buffer states in case in the
298  * future we want to put the buffer states in a more general
299  * "scanner state".
300  *
301  * Returns the top of the stack, or NULL.
302  */
303 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
304                           ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
305                           : NULL)
306
307 /* Same as previous macro, but useful when we know that the buffer stack is not
308  * NULL or when we need an lvalue. For internal use only.
309  */
310 #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
311
312 /* yy_hold_char holds the character lost when xbt_graph_parse_text is formed. */
313 static char yy_hold_char;
314 static int yy_n_chars;          /* number of characters read into yy_ch_buf */
315 int xbt_graph_parse_leng;
316
317 /* Points to current character in buffer. */
318 static char *yy_c_buf_p = (char *) 0;
319 static int yy_init = 0;         /* whether we need to initialize */
320 static int yy_start = 0;        /* start state number */
321
322 /* Flag which is used to allow xbt_graph_parse_wrap()'s to do buffer switches
323  * instead of setting up a fresh xbt_graph_parse_in.  A bit of a hack ...
324  */
325 static int yy_did_buffer_switch_on_eof;
326
327 void xbt_graph_parse_restart (FILE *input_file  );
328 void xbt_graph_parse__switch_to_buffer (YY_BUFFER_STATE new_buffer  );
329 YY_BUFFER_STATE xbt_graph_parse__create_buffer (FILE *file,int size  );
330 void xbt_graph_parse__delete_buffer (YY_BUFFER_STATE b  );
331 void xbt_graph_parse__flush_buffer (YY_BUFFER_STATE b  );
332 void xbt_graph_parse_push_buffer_state (YY_BUFFER_STATE new_buffer  );
333 void xbt_graph_parse_pop_buffer_state (void );
334
335 static void xbt_graph_parse_ensure_buffer_stack (void );
336 static void xbt_graph_parse__load_buffer_state (void );
337 static void xbt_graph_parse__init_buffer (YY_BUFFER_STATE b,FILE *file  );
338
339 #define YY_FLUSH_BUFFER xbt_graph_parse__flush_buffer(YY_CURRENT_BUFFER )
340
341 YY_BUFFER_STATE xbt_graph_parse__scan_buffer (char *base,yy_size_t size  );
342 YY_BUFFER_STATE xbt_graph_parse__scan_string (yyconst char *yy_str  );
343 YY_BUFFER_STATE xbt_graph_parse__scan_bytes (yyconst char *bytes,int len  );
344
345 void *xbt_graph_parse_alloc (yy_size_t  );
346 void *xbt_graph_parse_realloc (void *,yy_size_t  );
347 void xbt_graph_parse_free (void *  );
348
349 #define yy_new_buffer xbt_graph_parse__create_buffer
350
351 #define yy_set_interactive(is_interactive) \
352         { \
353         if ( ! YY_CURRENT_BUFFER ){ \
354         xbt_graph_parse_ensure_buffer_stack (); \
355                 YY_CURRENT_BUFFER_LVALUE =    \
356             xbt_graph_parse__create_buffer(xbt_graph_parse_in,YY_BUF_SIZE ); \
357         } \
358         YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
359         }
360
361 #define yy_set_bol(at_bol) \
362         { \
363         if ( ! YY_CURRENT_BUFFER ){\
364         xbt_graph_parse_ensure_buffer_stack (); \
365                 YY_CURRENT_BUFFER_LVALUE =    \
366             xbt_graph_parse__create_buffer(xbt_graph_parse_in,YY_BUF_SIZE ); \
367         } \
368         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
369         }
370
371 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
372
373 /* Begin user sect3 */
374
375 #define xbt_graph_parse_wrap(n) 1
376 #define YY_SKIP_YYWRAP
377
378 typedef unsigned char YY_CHAR;
379
380 FILE *xbt_graph_parse_in = (FILE *) 0, *xbt_graph_parse_out = (FILE *) 0;
381
382 typedef int yy_state_type;
383
384 extern int xbt_graph_parse_lineno;
385
386 int xbt_graph_parse_lineno = 1;
387
388 extern char *xbt_graph_parse_text;
389 #define yytext_ptr xbt_graph_parse_text
390
391 static yy_state_type yy_get_previous_state (void );
392 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
393 static int yy_get_next_buffer (void );
394 static void yy_fatal_error (yyconst char msg[]  );
395
396 /* Done after the current pattern has been matched and before the
397  * corresponding action - sets up xbt_graph_parse_text.
398  */
399 #define YY_DO_BEFORE_ACTION \
400         (yytext_ptr) = yy_bp; \
401         xbt_graph_parse_leng = (size_t) (yy_cp - yy_bp); \
402         (yy_hold_char) = *yy_cp; \
403         *yy_cp = '\0'; \
404         (yy_c_buf_p) = yy_cp;
405
406 #define YY_NUM_RULES 92
407 #define YY_END_OF_BUFFER 93
408 /* This struct is not used in this scanner,
409    but its presence is necessary. */
410 struct yy_trans_info
411         {
412         flex_int32_t yy_verify;
413         flex_int32_t yy_nxt;
414         };
415 static yyconst flex_int16_t yy_accept[564] =
416     {   0,
417         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
418         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
419         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
420         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
421         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
422        93,   91,   17,   10,   10,   17,   17,   71,   10,   71,
423         5,    6,    5,    8,    9,    8,   87,   79,   80,   88,
424        85,   88,   86,   90,   79,   80,   90,   91,   26,   10,
425        26,   26,   26,   24,   26,   30,   10,   30,   30,   91,
426        91,   30,   91,   45,   10,   45,   45,   45,   43,   45,
427
428        45,   45,   45,   49,   10,   49,   91,   66,   10,   66,
429        66,   66,   64,   66,   66,   66,   66,   66,   70,   10,
430        70,   88,   87,   10,    0,    2,    2,    0,    4,    7,
431        82,   81,    0,    0,    0,    0,    0,    0,    0,   25,
432        27,   27,    0,    0,    0,    0,    0,    0,   44,   46,
433        46,   46,   46,   46,    0,   65,   67,   67,   67,   67,
434        67,   67,   67,    0,    0,    0,    0,    0,    0,    0,
435         3,    0,    0,    0,    0,    0,    0,    0,   89,    0,
436        27,    0,    0,    0,    0,    0,    0,    0,   46,   46,
437        46,   46,    0,    0,   67,   67,   67,   67,   67,   67,
438
439         0,    0,    0,   84,    0,   16,    1,    0,    0,   77,
440         0,    0,    0,   74,   73,    0,    0,   27,    0,    0,
441        29,    0,    0,    0,    0,    0,    0,   46,   46,   46,
442        46,    0,    0,   48,    0,   67,   67,   67,   67,   67,
443        67,    0,    0,   69,    0,    0,    0,    0,   78,   72,
444         0,    0,    0,   27,    0,   51,    0,   32,   31,   50,
445         0,    0,   46,    0,    0,   46,    0,    0,    0,   67,
446        67,    0,    0,   67,   67,    0,    0,    0,    0,    0,
447        12,    0,   75,   76,   19,   27,    0,   51,   18,   32,
448        31,   50,    0,   38,   37,    0,    0,    0,   36,   35,
449
450        46,    0,    0,   63,   62,    0,    0,   67,    0,   55,
451        54,   67,   67,    0,    0,    0,    0,    0,   11,   19,
452        27,    0,   18,    0,   34,   33,   46,    0,   47,    0,
453        53,   52,    0,    0,    0,    0,    0,    0,    0,   68,
454         0,    0,    0,    0,   27,    0,   28,   46,    0,   61,
455        60,    0,   57,   56,    0,   59,   58,    0,    0,    0,
456         0,   27,   46,   83,    0,    0,    0,   27,   46,   46,
457         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
458         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
459        40,   39,    0,   42,   41,    0,    0,    0,    0,    0,
460
461         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
462         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
463         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
464         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
465         0,    0,    0,   12,    0,   12,    0,    0,   21,    0,
466        20,    0,    0,    0,    0,    0,    0,    0,   23,   22,
467         0,    0,    0,    0,    0,    0,    0,   11,    0,    0,
468         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
469         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
470         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
471
472         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
473         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
474         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
475         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
476         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
477         0,    0,    0,    0,    0,    0,   13,    0,    0,   14,
478         0,   15,    0
479     } ;
480
481 static yyconst flex_int32_t yy_ec[256] =
482     {   0,
483         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
484         1,    2,    4,    1,    1,    1,    1,    1,    1,    1,
485         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
486         1,    2,    5,    6,    7,    1,    1,    8,    9,    1,
487         1,    1,    1,    1,   10,   11,   12,   13,   13,   13,
488        13,   13,   13,   13,   13,   13,   13,   14,   15,   16,
489        17,   18,   19,    1,   20,   21,   22,   23,   24,   21,
490        14,   14,   14,   14,   14,   14,   25,   14,   26,   27,
491        14,   14,   28,   29,   14,   14,   14,   14,   30,   14,
492        31,    1,   32,    1,   33,    1,   34,   35,   36,   37,
493
494        38,   39,   40,   41,   42,   14,   14,   43,   44,   45,
495        46,   47,   48,   49,   50,   51,   52,   53,   14,   54,
496        55,   14,    1,    1,    1,    1,    1,    1,    1,    1,
497         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
498         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
499         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
500         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
501         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
502         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
503         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
504
505         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
506         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
507         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
508         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
509         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
510         1,    1,    1,    1,    1
511     } ;
512
513 static yyconst flex_int32_t yy_meta[56] =
514     {   0,
515         1,    2,    2,    2,    1,    1,    1,    1,    1,    3,
516         3,    1,    4,    5,    1,    1,    1,    6,    1,    7,
517         7,    7,    7,    7,    5,    5,    5,    5,    5,    5,
518         1,    1,    5,    7,    7,    7,    7,    7,    7,    5,
519         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
520         5,    5,    5,    5,    5
521     } ;
522
523 static yyconst flex_int16_t yy_base[594] =
524     {   0,
525         0,    0,    0,    3,    6,    9,   24,   27,   11,   14,
526        15,   17,   29,   38,   45,   52,   59,   61,   67,   70,
527        93,  135,   73,   76,  111,  114,  117,  153,  156,  159,
528       176,  179,  182,  185,  200,  203,  206,  209,  225,    0,
529       279,  282,  285,  288,  304,    0,  358,  361,  363,  365,
530      1585, 1586, 1586,  380,  383,   47,   62, 1586,  386,  171,
531      1586, 1586, 1574, 1586, 1586, 1565, 1586, 1578, 1578,  365,
532      1586, 1586, 1586, 1586, 1576, 1576, 1546,  375, 1586,  389,
533      1559,    0,  195, 1586, 1526, 1586,  398,  391,  399,  402,
534       411,  414,  393, 1586,  420, 1557,    0,  401, 1586, 1540,
535
536      1539, 1538, 1525, 1586,  458,  422,  427, 1586,  464, 1552,
537         0,  409, 1586, 1535,    1, 1534, 1521, 1532, 1586,  467,
538       438, 1560, 1532,  470,   34, 1509, 1586, 1552, 1543, 1586,
539      1586, 1586,   69,   40, 1509, 1508, 1506, 1539, 1507, 1586,
540         0, 1532, 1514, 1516, 1503, 1505, 1504, 1512, 1586,    0,
541      1497, 1512, 1502, 1495, 1499, 1586,    0, 1492, 1507, 1496,
542      1496, 1487, 1489, 1499, 1505, 1517, 1516, 1523,  108, 1488,
543      1586,   75,    0, 1484, 1484, 1514, 1513, 1481, 1586, 1492,
544      1483,  473,  476, 1484, 1489, 1485, 1484, 1480, 1485, 1480,
545      1479, 1474,  479,  482, 1481, 1476, 1473, 1474, 1462, 1470,
546
547       485,  502, 1487, 1586, 1490, 1586, 1586,  110, 1464, 1586,
548      1491, 1490, 1454, 1586, 1586, 1452, 1455, 1452,  505,  508,
549      1586,  511, 1462, 1452, 1460, 1459, 1458,  514, 1452,  530,
550      1443,  533,  538, 1586,  546,  550, 1450, 1373,  555, 1387,
551      1375,  558,  566, 1586,  571, 1387,  435,  575, 1586, 1586,
552      1392, 1389, 1356, 1354,  578,  583, 1346,  588,  595,  598,
553       601,  604,  612,  617,  624, 1263,  620,  633,  637,  645,
554      1263,  649,  661, 1264, 1250,  653, 1280,  472, 1280,  657,
555      1586, 1279, 1586, 1586,  670, 1260,  674,  677,  680,  683,
556       686,  694,  697, 1586, 1586,  705,  710,  721, 1586, 1586,
557
558      1248,  729,  732, 1586, 1586,  740,  746,  756,  759, 1586,
559      1586,  767,  772,  775, 1264,   32,  104,  153, 1586,  778,
560      1226,  783,  788,  793, 1586, 1586, 1230,  801, 1586,  804,
561      1586, 1586,  812,  818,  828,  831,  839,  844,  855, 1586,
562      1234,  146,  179,  147, 1212,  858, 1586, 1215,  861, 1586,
563      1586,  875, 1586, 1586,  883, 1586, 1586, 1111,  891,  175,
564       445, 1066,  119, 1586,  894,  181,   89,  897,  900,  903,
565       501,  360,  399,  480,  475,  919,  922,  938,  941,  949,
566       954,  506,  509,  526,  599,  624,  965,  654,  678,  973,
567      1586, 1586,  981, 1586, 1586,  417,  176,  594,  548,  989,
568
569      1058, 1003, 1016,  937,  992,  407,  995,  998, 1001, 1018,
570       930,  918,  922,  910, 1026, 1029, 1035, 1038, 1055, 1063,
571      1081, 1113,  819,  790,  733,  616,  710, 1073,  721, 1131,
572       748,  284, 1149, 1181,  557,  565,  458,  449,  537,  770,
573       676,  805,  278,  369,  285,  291, 1076,  293, 1586,  211,
574      1586,  708,  693,  727,  162,  110,   76, 1105, 1586, 1586,
575       352,  735,  794,    5,  199,  820,  474, 1586, 1144,  850,
576      1173, 1199, 1207, 1212,  591,  754, 1220,  799,  831,  749,
577       833,  834,  848,  862,  897,  684,  791,  900,  912,  895,
578       901,  483,  808,  920,  930,  836,  890,  627,  892,  941,
579
580       962,  971,  993,  818,  873, 1005, 1007,  954,  960,  702,
581       872,  963, 1008, 1027, 1092, 1017, 1025, 1151, 1160, 1031,
582      1084, 1093, 1152, 1176, 1188, 1161, 1209, 1033, 1087, 1217,
583      1221, 1123, 1155, 1088, 1108, 1215, 1216, 1120, 1156, 1218,
584      1219, 1222, 1223, 1224, 1225, 1239, 1240, 1226, 1228, 1241,
585      1242, 1264, 1258, 1260, 1268, 1277, 1586, 1281, 1285, 1586,
586      1288, 1586, 1586, 1306, 1313, 1320, 1327, 1334, 1341, 1348,
587      1355, 1362, 1369, 1376, 1381, 1386, 1391, 1398, 1401, 1404,
588      1407, 1414, 1418, 1424, 1430, 1436, 1443, 1450, 1457, 1464,
589      1471, 1478, 1485
590
591     } ;
592
593 static yyconst flex_int16_t yy_def[594] =
594     {   0,
595       564,  564,  565,  565,  565,  565,  566,  566,  567,  567,
596       568,  568,  569,  569,  569,  569,  570,  570,  564,  564,
597       571,  571,  572,  572,  572,  572,  564,  564,  572,  572,
598       564,  564,  572,  572,  572,  572,  564,  564,  563,   39,
599       573,  573,  564,  564,  563,   45,  574,  574,  569,  569,
600       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
601       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
602       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
603       563,  575,  563,  563,  575,  563,  563,  563,  563,  563,
604       563,  563,  563,  563,  563,  563,  576,  563,  563,  576,
605
606       576,  576,  576,  563,  563,  563,  563,  563,  563,  563,
607       577,  563,  563,  577,  577,  577,  577,  577,  563,  563,
608       563,  563,  563,  563,  578,  563,  563,  563,  563,  563,
609       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
610       575,  575,  579,  563,  563,  563,  563,  563,  563,  576,
611       576,  576,  576,  576,  580,  563,  577,  577,  577,  577,
612       577,  577,  577,  581,  563,  563,  582,  563,  582,  563,
613       563,  563,  583,  563,  563,  563,  563,  563,  563,  563,
614       575,  584,  584,  563,  563,  563,  563,  563,  576,  576,
615       576,  576,  585,  585,  577,  577,  577,  577,  577,  577,
616
617       586,  586,  563,  563,  582,  563,  563,  582,  563,  563,
618       583,  563,  563,  563,  563,  563,  563,  575,  563,  584,
619       563,  584,  563,  563,  563,  563,  563,  576,  576,  576,
620       576,  563,  585,  563,  585,  577,  577,  577,  577,  577,
621       577,  563,  586,  563,  586,  563,  582,  587,  563,  563,
622       563,  563,  563,  575,  584,  563,  563,  563,  563,  563,
623       563,  563,  576,  563,  563,  576,  585,  563,  563,  577,
624       577,  563,  563,  577,  577,  586,  563,  582,  587,  587,
625       563,  587,  563,  563,  563,  575,  584,  563,  563,  563,
626       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
627
628       576,  585,  563,  563,  563,  563,  563,  577,  563,  563,
629       563,  577,  577,  586,  563,  582,  587,  587,  563,  563,
630       575,  584,  563,  563,  563,  563,  576,  563,  563,  563,
631       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
632       563,  582,  587,  587,  575,  563,  563,  576,  563,  563,
633       563,  563,  563,  563,  563,  563,  563,  563,  582,  587,
634       587,  575,  576,  563,  582,  587,  587,  575,  576,  576,
635       582,  582,  582,  587,  587,  563,  563,  563,  563,  563,
636       563,  582,  582,  582,  587,  587,  563,  563,  563,  563,
637       563,  563,  563,  563,  563,  582,  582,  582,  587,  587,
638
639       563,  563,  563,  563,  582,  582,  582,  587,  587,  587,
640       563,  563,  563,  563,  582,  582,  582,  587,  587,  587,
641       588,  589,  563,  563,  563,  563,  582,  582,  582,  587,
642       590,  591,  588,  589,  563,  563,  563,  563,  582,  582,
643       582,  590,  587,  592,  591,  593,  587,  563,  563,  563,
644       563,  582,  582,  582,  592,  563,  593,  587,  563,  563,
645       582,  582,  582,  563,  582,  582,  582,  563,  582,  582,
646       582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
647       582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
648       582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
649
650       582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
651       582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
652       582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
653       582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
654       582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
655       582,  582,  582,  582,  582,  582,  563,  582,  582,  563,
656       582,  563,    0,  563,  563,  563,  563,  563,  563,  563,
657       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
658       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
659       563,  563,  563
660
661     } ;
662
663 static yyconst flex_int16_t yy_nxt[1642] =
664     {   0,
665       563,   54,   55,   54,   54,   55,   54,   54,   55,   54,
666        54,   55,   54,   62,  563,   56,   62,   65,   56,   65,
667        63,   57,  468,   63,   57,   59,   55,   59,   59,   55,
668        59,   68,   69,   66,  159,   66,   70,   71,  160,   60,
669        68,   69,   60,  168,   72,   70,   71,   68,   69,  206,
670        73,  125,   70,   72,   68,   69,  169,   73,  342,   70,
671        72,   75,   76,   75,   76,  126,  125,   72,   55,   55,
672        55,   55,   55,   55,   87,   55,   87,   87,   55,   87,
673       127,  172,   78,  174,  456,   78,  175,  172,   88,  210,
674        77,   88,   77,   79,   80,   55,   80,   79,   79,   79,
675
676        79,   79,   79,   79,   81,   79,  281,   79,   83,   79,
677        84,   79,   87,   55,   87,   87,   55,   87,   55,   55,
678        55,  281,  173,   79,   79,  206,   89,  206,  464,   89,
679       375,  247,   90,  208,   85,   79,   80,   55,   80,   79,
680        79,   79,   79,   79,   79,   79,   81,   79,  343,   79,
681        83,   79,   84,   79,   55,   55,   55,   87,   55,   87,
682        87,   55,   87,  206,  281,   79,   79,  456,   90,  359,
683       281,   88,  369,  370,   88,  128,   85,   55,   55,   55,
684        55,   55,   55,   87,   55,   87,   87,   55,   87,  127,
685       344,   91,  281,  206,   91,  361,  281,   89,  281,  128,
686
687        89,   87,   55,   87,   87,   55,   87,   55,   55,   55,
688        55,   55,   55,  127,  360,   92,  206,  374,   92,  460,
689       366,   93,  406,  469,   93,   94,   95,   55,   95,   94,
690        94,   94,   94,   94,   94,   94,   96,   94,   97,   94,
691        98,   94,   99,   94,   97,   97,   97,   97,   97,   97,
692        97,   97,   97,   97,   97,   94,   94,   97,   97,   97,
693        97,  100,   97,   97,   97,   97,   97,  101,   97,  102,
694        97,  103,   97,   97,   97,   97,   97,   97,   97,   97,
695       105,   55,  105,  105,   55,  105,   55,   55,   55,   55,
696        55,   55,  443,  443,  106,  281,  282,  106,  459,  456,
697
698       107,  446,  446,  107,  108,  109,   55,  109,  108,  108,
699       108,  108,  108,  108,  108,  110,  108,  111,  108,  112,
700       108,  113,  108,  111,  111,  111,  111,  111,  111,  111,
701       111,  111,  111,  111,  108,  108,  111,  111,  111,  111,
702       114,  111,  111,  111,  111,  111,  115,  111,  116,  111,
703       111,  111,  111,  117,  118,  111,  111,  111,  111,  120,
704        55,  120,  120,   55,  120,   68,   69,   68,   69,  206,
705        70,  133,   70,  121,  456,  465,  121,  206,  122,  128,
706       122,  124,  124,  124,  124,  124,  124,  124,  124,  124,
707       124,  124,  124,  127,  123,  128,  123,  128,  134,  124,
708
709       124,  124,  143,  128,  135,  128,  128,  136,  383,  127,
710       143,  127,  137,  128,  139,  128,  206,  127,  128,  127,
711       127,  124,  124,  124,  206,  143,  128,  127,  144,  127,
712       145,  128,  127,  155,  206,  146,  144,  146,  145,  148,
713       127,  145,  128,  147,  384,  127,  146,  416,  144,  164,
714       145,  148,  206,  145,  405,  147,  127,  451,  147,  124,
715       124,  124,  281,  278,  144,  124,  124,  124,  124,  124,
716       124,  124,  124,  124,  219,  219,  219,  219,  219,  219,
717       232,  232,  232,  232,  232,  232,  242,  242,  242,  206,
718       221,  206,  281,  221,  367,  450,  234,  281,  471,  234,
719
720       206,  316,  244,  242,  242,  242,  219,  219,  219,  219,
721       219,  219,  219,  219,  219,  261,  261,  261,  206,  244,
722       386,  385,  221,  206,  222,  221,  206,  235,  221,  498,
723       262,  264,  264,  264,  232,  232,  232,  382,  245,  232,
724       232,  232,  397,  206,  255,  396,  265,  232,  232,  232,
725       234,  268,  268,  268,  206,  234,  272,  272,  272,  242,
726       242,  242,  398,  234,  452,  281,  269,  242,  242,  242,
727       449,  273,  242,  242,  242,  244,  280,  280,  280,  219,
728       219,  219,  267,  244,  288,  288,  288,  408,  244,  290,
729       290,  290,  281,  282,  448,  221,  291,  291,  291,  292,
730
731       292,  292,  261,  261,  261,  293,  293,  293,  206,  294,
732       276,  206,  295,  296,  296,  296,  281,  262,  264,  264,
733       264,  232,  232,  232,  287,  298,  298,  298,  297,  299,
734       480,  407,  300,  265,  268,  268,  268,  234,  303,  303,
735       303,  281,  304,  399,  206,  305,  306,  306,  306,  269,
736       272,  272,  272,  438,  242,  242,  242,  302,  280,  280,
737       280,  307,  309,  309,  309,  273,  310,  504,  400,  311,
738       244,  320,  320,  320,  281,  219,  219,  219,  288,  288,
739       288,  323,  323,  323,  290,  290,  290,  291,  291,  291,
740       314,  221,  401,  206,  317,  292,  292,  292,  293,  293,
741
742       293,  206,  294,  454,  402,  295,  296,  296,  296,  318,
743       206,  324,  324,  324,  322,  325,  403,  492,  326,  206,
744       462,  297,  298,  298,  298,  206,  299,  206,  404,  300,
745       328,  328,  328,  303,  303,  303,  461,  304,  206,  439,
746       305,  306,  306,  306,  206,  516,  329,  330,  330,  330,
747       441,  331,  206,  443,  332,  463,  307,  333,  333,  333,
748       309,  309,  309,  466,  310,  444,  206,  311,  335,  335,
749       335,  206,  334,  337,  337,  337,  339,  339,  339,  320,
750       320,  320,  437,  336,  346,  346,  346,  206,  338,  323,
751       323,  323,  340,  481,  324,  324,  324,  486,  325,  453,
752
753       347,  326,  328,  328,  328,  330,  330,  330,  206,  331,
754       443,  206,  332,  333,  333,  333,  206,  467,  329,  349,
755       349,  349,  444,  350,  493,  206,  351,  436,  334,  335,
756       335,  335,  352,  352,  352,  206,  353,  206,  484,  354,
757       337,  337,  337,  470,  336,  355,  355,  355,  206,  356,
758       206,  206,  357,  206,  499,  338,  339,  339,  339,  346,
759       346,  346,  349,  349,  349,  206,  350,  206,  435,  351,
760       485,  510,  340,  488,  473,  347,  352,  352,  352,  206,
761       353,  487,  502,  354,  355,  355,  355,  489,  356,  206,
762       206,  357,  365,  365,  365,  365,  365,  365,  376,  376,
763
764       376,  378,  378,  378,  380,  380,  380,  206,  206,  206,
765       490,  206,  206,  377,  206,  517,  379,  206,  206,  381,
766       376,  376,  376,  387,  387,  387,  511,  388,  496,  206,
767       389,  371,  505,  372,  497,  377,  503,  206,  373,  378,
768       378,  378,  390,  390,  390,  491,  391,  206,  494,  392,
769       380,  380,  380,  500,  379,  393,  393,  393,  206,  394,
770       495,  426,  395,  501,  425,  381,  387,  387,  387,  424,
771       388,  206,  423,  389,  390,  390,  390,  206,  391,  206,
772       206,  392,  393,  393,  393,  414,  394,  506,  206,  395,
773       409,  409,  409,  415,  415,  415,  417,  417,  417,  418,
774
775       418,  418,  409,  409,  409,  410,  281,  514,  507,  206,
776       206,  508,  206,  515,  419,  281,  518,  410,  281,  420,
777       420,  420,  206,  421,  206,  206,  422,  415,  415,  415,
778       428,  428,  428,  509,  206,  281,  417,  417,  417,  418,
779       418,  418,  206,  206,  206,  512,  206,  513,  206,  413,
780       206,  412,  206,  427,  419,  281,  430,  430,  430,  522,
781       431,  519,  429,  432,  420,  420,  420,  523,  421,  534,
782       520,  422,  281,  526,  428,  428,  428,  458,  458,  458,
783       281,  279,  279,  279,  279,  279,  279,  279,  279,  279,
784       206,  411,  279,  281,  282,  279,  279,  279,  281,  279,
785
786       440,  206,  368,  528,  206,  206,  458,  458,  458,  206,
787       206,  279,  279,  279,  279,  279,  279,  279,  279,  279,
788       279,  279,  281,  535,  279,  206,  527,  279,  279,  279,
789       281,  279,  430,  430,  430,  521,  431,  206,  540,  432,
790       206,  364,  317,  279,  279,  472,  472,  472,  281,  279,
791       279,  279,  279,  279,  447,  279,  279,  279,  541,  538,
792       279,  206,  529,  279,  279,  279,  281,  279,  206,  206,
793       544,  532,  206,  206,  474,  474,  474,  206,  206,  279,
794       279,  279,  279,  279,  279,  279,  279,  279,  279,  447,
795       206,  539,  279,  206,  524,  279,  279,  279,  281,  279,
796
797       472,  472,  472,  525,  475,  206,  545,  476,  477,  477,
798       477,  279,  279,  474,  474,  474,  206,  478,  530,  533,
799       479,  477,  477,  477,  206,  482,  206,  536,  483,  206,
800       531,  537,  206,  206,  206,  206,  206,  206,  206,  206,
801       206,  206,  206,  206,  552,  206,  555,  363,  552,  362,
802       555,  542,  543,  358,  546,  547,  206,  206,  206,  206,
803       550,  551,  553,  558,  554,  556,  556,  556,  558,  559,
804       559,  559,  548,  549,  348,  206,  345,  206,  556,  556,
805       556,  557,  561,  561,  561,  560,  559,  559,  559,  561,
806       561,  561,  341,  327,  557,  321,  319,  281,  562,  315,
807
808       313,  312,  560,  308,  301,  562,   52,   52,   52,   52,
809        52,   52,   52,   53,   53,   53,   53,   53,   53,   53,
810        58,   58,   58,   58,   58,   58,   58,   61,   61,   61,
811        61,   61,   61,   61,   64,   64,   64,   64,   64,   64,
812        64,   67,   67,   67,   67,   67,   67,   67,   74,   74,
813        74,   74,   74,   74,   74,   82,   82,   82,   82,   82,
814        82,   82,   86,   86,   86,   86,   86,   86,   86,  104,
815       104,  104,  104,  104,  104,  104,  119,  119,  119,  119,
816       119,  119,  119,  141,  141,  141,  289,  141,  150,  150,
817       150,  286,  150,  157,  157,  157,  285,  157,  167,  167,
818
819       167,  167,  167,  284,  167,  182,  283,  182,  193,  277,
820       193,  201,  275,  201,  205,  205,  205,  205,  205,  205,
821       205,  211,  274,  271,  211,  220,  220,  220,  220,  220,
822       220,  233,  233,  233,  233,  233,  233,  243,  243,  243,
823       243,  243,  243,  279,  279,  279,  279,  279,  279,  279,
824       433,  433,  433,  433,  433,  433,  433,  434,  434,  434,
825       434,  434,  434,  434,  442,  442,  442,  442,  442,  442,
826       442,  445,  445,  445,  445,  445,  445,  445,  455,  455,
827       455,  455,  455,  455,  455,  457,  457,  457,  457,  457,
828       457,  457,  270,  266,  263,  260,  259,  258,  257,  256,
829
830       254,  253,  252,  251,  250,  249,  248,  206,  246,  241,
831       240,  239,  238,  237,  236,  231,  230,  229,  228,  227,
832       226,  225,  224,  223,  218,  217,  216,  215,  214,  213,
833       212,  209,  207,  206,  204,  203,  202,  200,  199,  198,
834       197,  196,  195,  194,  192,  191,  190,  189,  188,  187,
835       186,  185,  184,  183,  181,  180,  179,  178,  177,  176,
836       171,  168,  170,  166,  165,  163,  162,  161,  158,  156,
837       154,  153,  152,  151,  149,  142,  140,  138,  132,  131,
838       132,  131,  130,  129,  563,   51,  563,  563,  563,  563,
839       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
840
841       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
842       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
843       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
844       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
845       563
846     } ;
847
848 static yyconst flex_int16_t yy_chk[1642] =
849     {   0,
850         0,    3,    3,    3,    4,    4,    4,    5,    5,    5,
851         6,    6,    6,    9,    0,    3,   10,   11,    4,   12,
852         9,    5,  464,   10,    6,    7,    7,    7,    8,    8,
853         8,   13,   13,   11,  115,   12,   13,   13,  115,    7,
854        14,   14,    8,  125,   13,   14,   14,   15,   15,  316,
855        15,   56,   15,   14,   16,   16,  125,   16,  316,   16,
856        15,   17,   17,   18,   18,   56,   57,   16,   19,   19,
857        19,   20,   20,   20,   23,   23,   23,   24,   24,   24,
858        57,  133,   19,  134,  457,   20,  134,  172,   23,  172,
859        17,   24,   18,   21,   21,   21,   21,   21,   21,   21,
860
861        21,   21,   21,   21,   21,   21,  367,   21,   21,   21,
862        21,   21,   25,   25,   25,   26,   26,   26,   27,   27,
863        27,  317,  133,   21,   21,  169,   25,  208,  456,   26,
864       367,  208,   27,  169,   21,   22,   22,   22,   22,   22,
865        22,   22,   22,   22,   22,   22,   22,   22,  317,   22,
866        22,   22,   22,   22,   28,   28,   28,   29,   29,   29,
867        30,   30,   30,  342,  344,   22,   22,  455,   28,  342,
868       318,   29,  363,  363,   30,   60,   22,   31,   31,   31,
869        32,   32,   32,   33,   33,   33,   34,   34,   34,   60,
870       318,   31,  360,  397,   32,  344,  343,   33,  366,   83,
871
872        34,   35,   35,   35,   36,   36,   36,   37,   37,   37,
873        38,   38,   38,   83,  343,   35,  465,  366,   36,  450,
874       360,   37,  397,  465,   38,   39,   39,   39,   39,   39,
875        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
876        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
877        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
878        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
879        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
880        41,   41,   41,   42,   42,   42,   43,   43,   43,   44,
881        44,   44,  432,  445,   41,  443,  443,   42,  448,  446,
882
883        43,  432,  445,   44,   45,   45,   45,   45,   45,   45,
884        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
885        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
886        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
887        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
888        45,   45,   45,   45,   45,   45,   45,   45,   45,   47,
889        47,   47,   48,   48,   48,   49,   49,   50,   50,  461,
890        49,   70,   50,   47,  444,  461,   48,  372,   49,   78,
891        50,   54,   54,   54,   55,   55,   55,   59,   59,   59,
892        80,   80,   80,   78,   49,   88,   50,   93,   70,   87,
893
894        87,   87,   88,   89,   70,   98,   90,   70,  372,   88,
895        89,   93,   70,  112,   78,   91,  373,   89,   92,   98,
896        90,   95,   95,   95,  406,   92,  106,  112,   88,   91,
897        88,  107,   92,  106,  396,   88,   89,   93,   89,   90,
898       106,   90,  121,   89,  373,  107,   90,  406,   91,  121,
899        91,   92,  247,   92,  396,   91,  121,  438,   92,  105,
900       105,  105,  361,  247,  107,  109,  109,  109,  120,  120,
901       120,  124,  124,  124,  182,  182,  182,  183,  183,  183,
902       193,  193,  193,  194,  194,  194,  201,  201,  201,  278,
903       182,  467,  375,  183,  361,  437,  193,  374,  467,  194,
904
905       492,  278,  201,  202,  202,  202,  219,  219,  219,  220,
906       220,  220,  222,  222,  222,  228,  228,  228,  371,  202,
907       375,  374,  219,  382,  183,  220,  383,  194,  222,  492,
908       228,  230,  230,  230,  232,  232,  232,  371,  202,  233,
909       233,  233,  383,  384,  222,  382,  230,  235,  235,  235,
910       232,  236,  236,  236,  439,  233,  239,  239,  239,  242,
911       242,  242,  384,  235,  439,  399,  236,  243,  243,  243,
912       436,  239,  245,  245,  245,  242,  248,  248,  248,  255,
913       255,  255,  235,  243,  256,  256,  256,  399,  245,  258,
914       258,  258,  248,  248,  435,  255,  259,  259,  259,  260,
915
916       260,  260,  261,  261,  261,  262,  262,  262,  475,  262,
917       245,  398,  262,  263,  263,  263,  385,  261,  264,  264,
918       264,  267,  267,  267,  255,  265,  265,  265,  263,  265,
919       475,  398,  265,  264,  268,  268,  268,  267,  269,  269,
920       269,  386,  269,  385,  498,  269,  270,  270,  270,  268,
921       272,  272,  272,  426,  276,  276,  276,  267,  280,  280,
922       280,  270,  273,  273,  273,  272,  273,  498,  386,  273,
923       276,  285,  285,  285,  280,  287,  287,  287,  288,  288,
924       288,  289,  289,  289,  290,  290,  290,  291,  291,  291,
925       276,  287,  388,  441,  280,  292,  292,  292,  293,  293,
926
927       293,  486,  293,  441,  388,  293,  296,  296,  296,  280,
928       453,  297,  297,  297,  287,  297,  389,  486,  297,  510,
929       453,  296,  298,  298,  298,  452,  298,  427,  389,  298,
930       302,  302,  302,  303,  303,  303,  452,  303,  429,  427,
931       303,  306,  306,  306,  454,  510,  302,  307,  307,  307,
932       429,  307,  462,  431,  307,  454,  306,  308,  308,  308,
933       309,  309,  309,  462,  309,  431,  480,  309,  312,  312,
934       312,  476,  308,  313,  313,  313,  314,  314,  314,  320,
935       320,  320,  425,  312,  322,  322,  322,  440,  313,  323,
936       323,  323,  314,  476,  324,  324,  324,  480,  324,  440,
937
938       322,  324,  328,  328,  328,  330,  330,  330,  487,  330,
939       442,  463,  330,  333,  333,  333,  478,  463,  328,  334,
940       334,  334,  442,  334,  487,  493,  334,  424,  333,  335,
941       335,  335,  336,  336,  336,  504,  336,  466,  478,  336,
942       337,  337,  337,  466,  335,  338,  338,  338,  479,  338,
943       481,  482,  338,  496,  493,  337,  339,  339,  339,  346,
944       346,  346,  349,  349,  349,  483,  349,  470,  423,  349,
945       479,  504,  339,  482,  470,  346,  352,  352,  352,  484,
946       352,  481,  496,  352,  355,  355,  355,  483,  355,  511,
947       505,  355,  359,  359,  359,  365,  365,  365,  368,  368,
948
949       368,  369,  369,  369,  370,  370,  370,  497,  359,  499,
950       484,  365,  490,  368,  485,  511,  369,  488,  491,  370,
951       376,  376,  376,  377,  377,  377,  505,  377,  490,  489,
952       377,  365,  499,  365,  491,  376,  497,  494,  365,  378,
953       378,  378,  379,  379,  379,  485,  379,  495,  488,  379,
954       380,  380,  380,  494,  378,  381,  381,  381,  500,  381,
955       489,  414,  381,  495,  413,  380,  387,  387,  387,  412,
956       387,  508,  411,  387,  390,  390,  390,  509,  390,  501,
957       512,  390,  393,  393,  393,  404,  393,  500,  502,  393,
958       400,  400,  400,  405,  405,  405,  407,  407,  407,  408,
959
960       408,  408,  409,  409,  409,  400,  400,  508,  501,  405,
961       503,  502,  407,  509,  408,  408,  512,  409,  409,  410,
962       410,  410,  506,  410,  507,  513,  410,  415,  415,  415,
963       416,  416,  416,  503,  516,  410,  417,  417,  417,  418,
964       418,  418,  517,  415,  514,  506,  416,  507,  520,  403,
965       528,  402,  417,  415,  418,  418,  419,  419,  419,  516,
966       419,  513,  417,  419,  420,  420,  420,  517,  420,  528,
967       514,  420,  419,  520,  428,  428,  428,  447,  447,  447,
968       420,  421,  421,  421,  421,  421,  421,  421,  421,  421,
969       428,  401,  421,  447,  447,  421,  421,  421,  421,  421,
970
971       428,  521,  362,  522,  529,  534,  458,  458,  458,  515,
972       522,  421,  421,  422,  422,  422,  422,  422,  422,  422,
973       422,  422,  458,  529,  422,  535,  521,  422,  422,  422,
974       422,  422,  430,  430,  430,  515,  430,  538,  534,  430,
975       532,  358,  458,  422,  422,  469,  469,  469,  430,  433,
976       433,  433,  433,  433,  433,  433,  433,  433,  535,  532,
977       433,  469,  523,  433,  433,  433,  433,  433,  518,  523,
978       538,  526,  533,  539,  471,  471,  471,  519,  526,  433,
979       433,  434,  434,  434,  434,  434,  434,  434,  434,  434,
980       471,  533,  434,  524,  518,  434,  434,  434,  434,  434,
981
982       472,  472,  472,  519,  472,  525,  539,  472,  473,  473,
983       473,  434,  434,  474,  474,  474,  472,  474,  524,  527,
984       474,  477,  477,  477,  473,  477,  527,  530,  477,  474,
985       525,  531,  536,  537,  530,  540,  541,  477,  531,  542,
986       543,  544,  545,  548,  546,  549,  550,  348,  547,  345,
987       551,  536,  537,  341,  540,  541,  546,  547,  550,  551,
988       544,  545,  548,  553,  549,  552,  552,  552,  554,  555,
989       555,  555,  542,  543,  327,  553,  321,  554,  556,  556,
990       556,  552,  558,  558,  558,  555,  559,  559,  559,  561,
991       561,  561,  315,  301,  556,  286,  282,  279,  558,  277,
992
993       275,  274,  559,  271,  266,  561,  564,  564,  564,  564,
994       564,  564,  564,  565,  565,  565,  565,  565,  565,  565,
995       566,  566,  566,  566,  566,  566,  566,  567,  567,  567,
996       567,  567,  567,  567,  568,  568,  568,  568,  568,  568,
997       568,  569,  569,  569,  569,  569,  569,  569,  570,  570,
998       570,  570,  570,  570,  570,  571,  571,  571,  571,  571,
999       571,  571,  572,  572,  572,  572,  572,  572,  572,  573,
1000       573,  573,  573,  573,  573,  573,  574,  574,  574,  574,
1001       574,  574,  574,  575,  575,  575,  257,  575,  576,  576,
1002       576,  254,  576,  577,  577,  577,  253,  577,  578,  578,
1003
1004       578,  578,  578,  252,  578,  579,  251,  579,  580,  246,
1005       580,  581,  241,  581,  582,  582,  582,  582,  582,  582,
1006       582,  583,  240,  238,  583,  584,  584,  584,  584,  584,
1007       584,  585,  585,  585,  585,  585,  585,  586,  586,  586,
1008       586,  586,  586,  587,  587,  587,  587,  587,  587,  587,
1009       588,  588,  588,  588,  588,  588,  588,  589,  589,  589,
1010       589,  589,  589,  589,  590,  590,  590,  590,  590,  590,
1011       590,  591,  591,  591,  591,  591,  591,  591,  592,  592,
1012       592,  592,  592,  592,  592,  593,  593,  593,  593,  593,
1013       593,  593,  237,  231,  229,  227,  226,  225,  224,  223,
1014
1015       218,  217,  216,  213,  212,  211,  209,  205,  203,  200,
1016       199,  198,  197,  196,  195,  192,  191,  190,  189,  188,
1017       187,  186,  185,  184,  181,  180,  178,  177,  176,  175,
1018       174,  170,  168,  167,  166,  165,  164,  163,  162,  161,
1019       160,  159,  158,  155,  154,  153,  152,  151,  148,  147,
1020       146,  145,  144,  143,  142,  139,  138,  137,  136,  135,
1021       129,  128,  126,  123,  122,  118,  117,  116,  114,  110,
1022       103,  102,  101,  100,   96,   85,   81,   77,   76,   75,
1023        69,   68,   66,   63,   51,  563,  563,  563,  563,  563,
1024       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
1025
1026       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
1027       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
1028       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
1029       563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
1030       563
1031     } ;
1032
1033 /* Table of booleans, true if rule could match eol. */
1034 static yyconst flex_int32_t yy_rule_can_match_eol[93] =
1035     {   0,
1036 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 
1037     1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1038     1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1039     1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
1040     1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,     };
1041
1042 static yy_state_type yy_last_accepting_state;
1043 static char *yy_last_accepting_cpos;
1044
1045 extern int xbt_graph_parse__flex_debug;
1046 int xbt_graph_parse__flex_debug = 0;
1047
1048 /* The intent behind this definition is that it'll catch
1049  * any uses of REJECT which flex missed.
1050  */
1051 #define REJECT reject_used_but_not_detected
1052 #define yymore() yymore_used_but_not_detected
1053 #define YY_MORE_ADJ 0
1054 #define YY_RESTORE_YY_MORE_OFFSET
1055 char *xbt_graph_parse_text;
1056 /* Validating XML processor for src/xbt/graphxml.dtd.
1057  * Generated 2010/10/11 11:35:07.
1058  *
1059  * This program was generated with the FleXML XML processor generator.
1060  * FleXML is Copyright (C) 1999-2005 Kristoffer Rose.  All rights reserved.
1061  * FleXML is Copyright (C) 2003-2006 Martin Quinson.  All rights reserved.
1062  * (Id: flexml.pl,v 1.62 2007/10/11 10:00:14 mquinson Exp).
1063  * 
1064  * There are two, intertwined parts to this program, part A and part B.
1065  *
1066  * Part A
1067  * ------
1068  * 
1069  * Some parts, here collectively called "Part A", are found in the 
1070  * FleXML package.  They are Copyright (C) 1999-2005 Kristoffer Rose
1071  * and Copyright (C) 2003-2006 Martin Quinson. All rights reserved.
1072  *
1073  * You can redistribute, use, perform, display and/or modify "Part A"
1074  * provided the following two conditions hold:
1075  *
1076  * 1. The program is distributed WITHOUT ANY WARRANTY from the author of
1077  *    FleXML; without even the implied warranty of MERCHANTABILITY or
1078  *    FITNESS FOR A PARTICULAR PURPOSE.
1079  *
1080  * 2. The program distribution conditions do not in any way affect the
1081  *    distribution conditions of the FleXML system used to generate this
1082  *    file or any version of FleXML derived from that system.
1083  *
1084  * Notice that these are explicit rights granted to you for files
1085  * generated by the FleXML system.  For your rights in connection with
1086  * the FleXML system itself please consult the GNU General Public License.
1087  * 
1088  * Part B
1089  * ------
1090  * 
1091  * The other parts, here collectively called "Part B", and which came 
1092  * from the DTD used by FleXML to generate this program, can be 
1093  * distributed (or not, as the case may be) under the terms of whoever
1094  * wrote them, provided these terms respect and obey the two conditions 
1095  * above under the heading "Part A".
1096  *
1097  * The author of and contributors to FleXML specifically disclaim
1098  * any copyright interest in "Part B", unless "Part B" was written 
1099  * by the author of or contributors to FleXML.
1100  * 
1101  */
1102
1103 /* Version strings. */
1104 const char rcs_graphxml_flexml_skeleton[] =
1105  "$" "Id: skel,v 1.40 2007/10/11 09:57:24 mquinson Exp $";
1106 const char rcs_graphxml_flexml[] =
1107  "$" "Id: flexml.pl,v 1.62 2007/10/11 10:00:14 mquinson Exp $";
1108
1109 /* ANSI headers. */
1110 #include <stdlib.h> /* for realloc() -- needed here when using flex 2.5.4 */
1111 #include <stdio.h>
1112 #include <string.h>
1113 #include <assert.h>
1114 #include <stdarg.h>
1115 #include <ctype.h>
1116      
1117 #if defined(_XBT_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__TOS_WIN__)
1118 # ifndef __STRICT_ANSI__
1119 #  include <io.h>
1120 #  include <process.h>
1121 # endif
1122 #else
1123 # include <unistd.h>
1124 #endif
1125      
1126 #ifndef FLEXML_INDEXSTACKSIZE
1127 #define FLEXML_INDEXSTACKSIZE 1000
1128 #endif
1129
1130 /* Generated definitions. */
1131 #define FLEXML_yylineno
1132 #ifndef FLEXML_BUFFERSTACKSIZE
1133 #define FLEXML_BUFFERSTACKSIZE 1000000
1134 #endif
1135 #define FLEXML_NEED_BUFFERLIT
1136
1137 /* XML processor api. */
1138 /* FleXML-provided data. */
1139 int graphxml_pcdata_ix;
1140 extern char *graphxml_bufferstack;
1141 #define graphxml_pcdata (graphxml_bufferstack + graphxml_pcdata_ix)
1142 AT_graphxml_node_name AX_graphxml_node_name;
1143 #define A_graphxml_node_name (graphxml_bufferstack + AX_graphxml_node_name)
1144 AT_graphxml_edge_source AX_graphxml_edge_source;
1145 #define A_graphxml_edge_source (graphxml_bufferstack + AX_graphxml_edge_source)
1146 AT_graphxml_node_position_y AX_graphxml_node_position_y;
1147 #define A_graphxml_node_position_y (graphxml_bufferstack + AX_graphxml_node_position_y)
1148 AT_graphxml_node_position_x AX_graphxml_node_position_x;
1149 #define A_graphxml_node_position_x (graphxml_bufferstack + AX_graphxml_node_position_x)
1150 AT_graphxml_edge_data AX_graphxml_edge_data;
1151 #define A_graphxml_edge_data (graphxml_bufferstack + AX_graphxml_edge_data)
1152 AT_graphxml_edge_target AX_graphxml_edge_target;
1153 #define A_graphxml_edge_target (graphxml_bufferstack + AX_graphxml_edge_target)
1154 AT_graphxml_graph_isDirected AX_graphxml_graph_isDirected;
1155 #define A_graphxml_graph_isDirected AX_graphxml_graph_isDirected
1156 AT_graphxml_node_label AX_graphxml_node_label;
1157 #define A_graphxml_node_label (graphxml_bufferstack + AX_graphxml_node_label)
1158 AT_graphxml_node_data AX_graphxml_node_data;
1159 #define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data)
1160 AT_graphxml_edge_label AX_graphxml_edge_label;
1161 #define A_graphxml_edge_label (graphxml_bufferstack + AX_graphxml_edge_label)
1162 AT_graphxml_edge_length AX_graphxml_edge_length;
1163 #define A_graphxml_edge_length (graphxml_bufferstack + AX_graphxml_edge_length)
1164 AT_graphxml_edge_name AX_graphxml_edge_name;
1165 #define A_graphxml_edge_name (graphxml_bufferstack + AX_graphxml_edge_name)
1166
1167 /* XML state. */
1168 #ifdef FLEX_DEBUG
1169 # define ENTER(state)   debug_enter(state,#state)
1170 # define LEAVE          debug_leave()
1171 # define SET(state)     debug_set(state,#state)
1172   static void debug_enter(int, const char*);
1173   static void debug_leave(void);
1174   static void debug_set(int, const char*);
1175 #else
1176 # define ENTER(state)   (yy_push_state(state))
1177 # define LEAVE          (yy_pop_state())
1178 # define SET(state)     BEGIN(state)
1179 #endif
1180
1181 /* Generic actions. */
1182 #define SKIP    /*skip*/
1183 #define SUCCEED        CLEANUP; return 0
1184
1185 #define FAIL    return fail
1186 static int fail(const char*, ...);
1187
1188 enum {flexml_max_err_msg_size = 512};
1189 static char flexml_err_msg[flexml_max_err_msg_size];
1190 const char * graphxml_parse_err_msg()
1191 {
1192     return flexml_err_msg;
1193 }
1194 static void reset_graphxml_parse_err_msg()
1195 {
1196     flexml_err_msg[0] = '\0';
1197 }
1198
1199 /* Cleanup */
1200 static void cleanup(void);
1201 #define CLEANUP  cleanup()
1202
1203 /* Text buffer stack handling. */
1204 char *graphxml_bufferstack = NULL;
1205 static int blimit = FLEXML_BUFFERSTACKSIZE;
1206 static int bnext = 1;
1207
1208 static int *indexstack = NULL;
1209 static int ilimit = FLEXML_INDEXSTACKSIZE;
1210 static int inext = 1;
1211
1212 #define BUFFERSET(P)  (P = bnext)
1213 #define BUFFERPUTC(C) (ck_blimit(), graphxml_bufferstack[bnext++] = (C))
1214 #define BUFFERDONE    (BUFFERPUTC('\0'))
1215
1216 #define BUFFERLITERAL(C, P) graphxml_bufferliteral(C, &(P), xbt_graph_parse_text)
1217
1218 /* after this is called, there are at least 2 slots left in the stack */
1219 static int ck_blimit()
1220 {
1221      if (bnext >= blimit) {
1222          blimit += FLEXML_BUFFERSTACKSIZE + 2;
1223          {
1224              char *temp = (char *) realloc(graphxml_bufferstack, blimit);
1225              assert(temp);
1226              graphxml_bufferstack = temp;
1227          }
1228      }
1229      return 0;
1230 }
1231
1232 /* after this is called, there are at least 2 slots left in the stack */
1233 static int ck_ilimit()
1234 {
1235      if (inext >= ilimit) {
1236          ilimit += FLEXML_INDEXSTACKSIZE + 2;
1237          {
1238              int *temp = (int *) realloc(indexstack, ilimit);
1239              assert(temp);
1240              indexstack = temp;
1241          }
1242      }
1243      return 0;
1244 }
1245
1246 #ifdef FLEXML_NEED_BUFFERLIT
1247 static void graphxml_bufferliteral(char c, int* pp, const char* text)
1248 {
1249   const char *s = (c ? strchr(text,c) : text-1), *e = strrchr(text,c);
1250   assert(s <= e); BUFFERSET(*pp);
1251   while (++s<e) {
1252     if (isspace(*s) && c) { BUFFERPUTC(' '); while (isspace(*s)) ++s; }
1253     else BUFFERPUTC(*s);
1254   }
1255   BUFFERDONE;
1256 }
1257 #endif
1258
1259 static void pushbuffer(int p)
1260 {
1261     ck_ilimit();
1262     indexstack[inext++] = p;
1263     indexstack[inext++] = bnext;    
1264 }
1265
1266 static int popbuffer(void)
1267 {
1268     assert(inext >= 2);
1269     bnext = indexstack[--inext];
1270     return indexstack[--inext];
1271 }
1272
1273 /* General internal entities are `unput' back onto the input stream... */
1274 #define ENTITYTEXT(T) \
1275   { char *s = (T), *e = s+strlen(s);\
1276     while (--e >= s) { unput(*e); }}
1277
1278 /* Flex standard options. */
1279 #define YY_NO_INPUT 1
1280 /* Flex user-requested options. */
1281 /* XML character classes (currently restricted to ASCII). */
1282 /* "Common syntactic structures." */
1283 /* "Names and Tokens." */
1284 /* Miscellaneous. */
1285 /* Parser states (flex `exclusive start conditions'):
1286  *
1287  * PROLOG       the XML prolog of the document before <?xml...>
1288  * DOCTYPE      the XML prolog of the document after <?xml...>
1289  * EPILOG       after the root element
1290  * INCOMMENT    inside an XML comment <!--....-->
1291  * INPI         inside an XML PI <?...?>
1292  * VALUE1       inside a '...'-delimited literal
1293  * VALUE2       inside a "..."-delimited literal
1294  * CDATA        inside a <![CDATA[...] ]> section.
1295  * ROOT_<tag>   expect root element <tag>
1296  * AL_<tag>     inside the attribute list for <tag>
1297  * IN_<tag>     inside a <tag> with element contents (ready for end tag)
1298  * IMPOSSIBLE   dummy to permit disabling rules; must be last
1299  */
1300
1301 /* State names. */
1302 const char* *graphxml_statenames=NULL;
1303
1304 #define INITIAL 0
1305 #define PROLOG 1
1306 #define DOCTYPE 2
1307 #define EPILOG 3
1308 #define INCOMMENT 4
1309 #define INPI 5
1310 #define VALUE1 6
1311 #define VALUE2 7
1312 #define CDATA 8
1313 #define ROOT_graphxml_graph 9
1314 #define AL_graphxml_graph 10
1315 #define S_graphxml_graph 11
1316 #define S_graphxml_graph_1 12
1317 #define S_graphxml_graph_2 13
1318 #define S_graphxml_graph_3 14
1319 #define S_graphxml_graph_4 15
1320 #define S_graphxml_graph_5 16
1321 #define E_graphxml_graph 17
1322 #define ROOT_graphxml_node 18
1323 #define AL_graphxml_node 19
1324 #define E_graphxml_node 20
1325 #define ROOT_graphxml_edge 21
1326 #define AL_graphxml_edge 22
1327 #define E_graphxml_edge 23
1328 #define IMPOSSIBLE 24
1329
1330 #ifndef YY_NO_UNISTD_H
1331 /* Special case for "unistd.h", since it is non-ANSI. We include it way
1332  * down here because we want the user's section 1 to have been scanned first.
1333  * The user has a chance to override it with an option.
1334  */
1335 #if defined(_XBT_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__TOS_WIN__)
1336 #  ifndef __STRICT_ANSI__
1337 #    include <io.h>
1338 #    include <process.h>
1339 #  endif
1340 #else
1341 #  include <unistd.h>
1342 #endif
1343 #endif
1344
1345 #ifndef YY_EXTRA_TYPE
1346 #define YY_EXTRA_TYPE void *
1347 #endif
1348
1349 static int yy_init_globals (void );
1350
1351 /* Accessor methods to globals.
1352    These are made visible to non-reentrant scanners for convenience. */
1353
1354 int xbt_graph_parse_lex_destroy (void );
1355
1356 int xbt_graph_parse_get_debug (void );
1357
1358 void xbt_graph_parse_set_debug (int debug_flag  );
1359
1360 YY_EXTRA_TYPE xbt_graph_parse_get_extra (void );
1361
1362 void xbt_graph_parse_set_extra (YY_EXTRA_TYPE user_defined  );
1363
1364 FILE *xbt_graph_parse_get_in (void );
1365
1366 void xbt_graph_parse_set_in  (FILE * in_str  );
1367
1368 FILE *xbt_graph_parse_get_out (void );
1369
1370 void xbt_graph_parse_set_out  (FILE * out_str  );
1371
1372 int xbt_graph_parse_get_leng (void );
1373
1374 char *xbt_graph_parse_get_text (void );
1375
1376 int xbt_graph_parse_get_lineno (void );
1377
1378 void xbt_graph_parse_set_lineno (int line_number  );
1379
1380 /* Macros after this point can all be overridden by user definitions in
1381  * section 1.
1382  */
1383
1384 #ifndef YY_SKIP_YYWRAP
1385 #ifdef __cplusplus
1386 extern "C" int xbt_graph_parse_wrap (void );
1387 #else
1388 extern int xbt_graph_parse_wrap (void );
1389 #endif
1390 #endif
1391
1392 #ifndef yytext_ptr
1393 static void yy_flex_strncpy (char *,yyconst char *,int );
1394 #endif
1395
1396 #ifdef YY_NEED_STRLEN
1397 static int yy_flex_strlen (yyconst char * );
1398 #endif
1399
1400 #ifndef YY_NO_INPUT
1401
1402 #ifdef __cplusplus
1403 static int yyinput (void );
1404 #else
1405 static int input (void );
1406 #endif
1407
1408 #endif
1409
1410         static int yy_start_stack_ptr = 0;
1411         static int yy_start_stack_depth = 0;
1412         static int *yy_start_stack = NULL;
1413     
1414     static void yy_push_state (int new_state );
1415     
1416     static void yy_pop_state (void );
1417     
1418 /* Amount of stuff to slurp up with each read. */
1419 #ifndef YY_READ_BUF_SIZE
1420 #ifdef __ia64__
1421 /* On IA-64, the buffer size is 16k, not 8k */
1422 #define YY_READ_BUF_SIZE 16384
1423 #else
1424 #define YY_READ_BUF_SIZE 8192
1425 #endif /* __ia64__ */
1426 #endif
1427
1428 /* Copy whatever the last rule matched to the standard output. */
1429 #ifndef ECHO
1430 /* This used to be an fputs(), but since the string might contain NUL's,
1431  * we now use fwrite().
1432  */
1433 #define ECHO do { if (fwrite( xbt_graph_parse_text, xbt_graph_parse_leng, 1, xbt_graph_parse_out )) {} } while (0)
1434 #endif
1435
1436 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
1437  * is returned in "result".
1438  */
1439 #ifndef YY_INPUT
1440 #define YY_INPUT(buf,result,max_size) \
1441         if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
1442                 { \
1443                 int c = '*'; \
1444                 size_t n; \
1445                 for ( n = 0; n < max_size && \
1446                              (c = getc( xbt_graph_parse_in )) != EOF && c != '\n'; ++n ) \
1447                         buf[n] = (char) c; \
1448                 if ( c == '\n' ) \
1449                         buf[n++] = (char) c; \
1450                 if ( c == EOF && ferror( xbt_graph_parse_in ) ) \
1451                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
1452                 result = n; \
1453                 } \
1454         else \
1455                 { \
1456                 errno=0; \
1457                 while ( (result = fread(buf, 1, max_size, xbt_graph_parse_in))==0 && ferror(xbt_graph_parse_in)) \
1458                         { \
1459                         if( errno != EINTR) \
1460                                 { \
1461                                 YY_FATAL_ERROR( "input in flex scanner failed" ); \
1462                                 break; \
1463                                 } \
1464                         errno=0; \
1465                         clearerr(xbt_graph_parse_in); \
1466                         } \
1467                 }\
1468 \
1469
1470 #endif
1471
1472 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1473  * we don't want an extra ';' after the "return" because that will cause
1474  * some compilers to complain about unreachable statements.
1475  */
1476 #ifndef yyterminate
1477 #define yyterminate() return YY_NULL
1478 #endif
1479
1480 /* Number of entries by which start-condition stack grows. */
1481 #ifndef YY_START_STACK_INCR
1482 #define YY_START_STACK_INCR 25
1483 #endif
1484
1485 /* Report a fatal error. */
1486 #ifndef YY_FATAL_ERROR
1487 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
1488 #endif
1489
1490 /* end tables serialization structures and prototypes */
1491
1492 /* Default declaration of generated scanner - a define so the user can
1493  * easily add parameters.
1494  */
1495 #ifndef YY_DECL
1496 #define YY_DECL_IS_OURS 1
1497
1498 extern int xbt_graph_parse_lex (void);
1499
1500 #define YY_DECL int xbt_graph_parse_lex (void)
1501 #endif /* !YY_DECL */
1502
1503 /* Code executed at the beginning of each rule, after xbt_graph_parse_text and xbt_graph_parse_leng
1504  * have been set up.
1505  */
1506 #ifndef YY_USER_ACTION
1507 #define YY_USER_ACTION
1508 #endif
1509
1510 /* Code executed at the end of each rule. */
1511 #ifndef YY_BREAK
1512 #define YY_BREAK break;
1513 #endif
1514
1515 #define YY_RULE_SETUP \
1516         YY_USER_ACTION
1517
1518 /** The main scanner function which does all the work.
1519  */
1520 YY_DECL
1521 {
1522         register yy_state_type yy_current_state;
1523         register char *yy_cp, *yy_bp;
1524         register int yy_act;
1525     
1526  /* Bypass Flex's default INITIAL state and begin by parsing the XML prolog. */
1527  SET(PROLOG);
1528  reset_graphxml_parse_err_msg();
1529  graphxml_bufferstack = (char *) malloc(FLEXML_BUFFERSTACKSIZE);
1530  assert(graphxml_bufferstack);
1531  #ifdef FLEX_DEBUG
1532  {
1533      int i;
1534      for (i = 0; i < blimit; i++) {
1535          graphxml_bufferstack[i] = '\377';
1536      }
1537  }
1538  #endif
1539  graphxml_bufferstack[0] = '\0';
1540  indexstack = (int *) malloc(FLEXML_INDEXSTACKSIZE * sizeof(int));
1541  assert(indexstack);
1542  indexstack[0] = 0;
1543
1544   /* FleXML_init */
1545   bnext = inext = 1;
1546   graphxml_bufferliteral('\0', &bnext, "-1.0");
1547   graphxml_bufferliteral('\0', &bnext, "-1.0");
1548   graphxml_bufferliteral('\0', &bnext, "-1.0");
1549   if(!graphxml_statenames) {graphxml_statenames= (const char **)calloc(IMPOSSIBLE,sizeof(char*));
1550   graphxml_statenames[PROLOG] = NULL;
1551   graphxml_statenames[DOCTYPE] = NULL;
1552   graphxml_statenames[EPILOG] = NULL;
1553   graphxml_statenames[INCOMMENT] = NULL;
1554   graphxml_statenames[INPI] = NULL;
1555   graphxml_statenames[VALUE1] = NULL;
1556   graphxml_statenames[VALUE2] = NULL;
1557   graphxml_statenames[CDATA] = NULL;
1558   graphxml_statenames[ROOT_graphxml_graph] = NULL;
1559   graphxml_statenames[AL_graphxml_graph] = NULL;
1560   graphxml_statenames[S_graphxml_graph] = "graph";
1561   graphxml_statenames[S_graphxml_graph_1] = "graph";
1562   graphxml_statenames[S_graphxml_graph_2] = "graph";
1563   graphxml_statenames[S_graphxml_graph_3] = "graph";
1564   graphxml_statenames[S_graphxml_graph_4] = "graph";
1565   graphxml_statenames[S_graphxml_graph_5] = "graph";
1566   graphxml_statenames[E_graphxml_graph] = "graph";
1567   graphxml_statenames[ROOT_graphxml_node] = NULL;
1568   graphxml_statenames[AL_graphxml_node] = NULL;
1569   graphxml_statenames[E_graphxml_node] = "node";
1570   graphxml_statenames[ROOT_graphxml_edge] = NULL;
1571   graphxml_statenames[AL_graphxml_edge] = NULL;
1572   graphxml_statenames[E_graphxml_edge] = "edge";
1573   }
1574
1575  /* COMMENTS and PIs: handled uniformly for efficiency. */
1576
1577         if ( !(yy_init) )
1578                 {
1579                 (yy_init) = 1;
1580
1581 #ifdef YY_USER_INIT
1582                 YY_USER_INIT;
1583 #endif
1584
1585                 if ( ! (yy_start) )
1586                         (yy_start) = 1; /* first start state */
1587
1588                 if ( ! xbt_graph_parse_in )
1589                         xbt_graph_parse_in = stdin;
1590
1591                 if ( ! xbt_graph_parse_out )
1592                         xbt_graph_parse_out = stdout;
1593
1594                 if ( ! YY_CURRENT_BUFFER ) {
1595                         xbt_graph_parse_ensure_buffer_stack ();
1596                         YY_CURRENT_BUFFER_LVALUE =
1597                                 xbt_graph_parse__create_buffer(xbt_graph_parse_in,YY_BUF_SIZE );
1598                 }
1599
1600                 xbt_graph_parse__load_buffer_state( );
1601                 }
1602
1603         while ( 1 )             /* loops until end-of-file is reached */
1604                 {
1605                 yy_cp = (yy_c_buf_p);
1606
1607                 /* Support of xbt_graph_parse_text. */
1608                 *yy_cp = (yy_hold_char);
1609
1610                 /* yy_bp points to the position in yy_ch_buf of the start of
1611                  * the current run.
1612                  */
1613                 yy_bp = yy_cp;
1614
1615                 yy_current_state = (yy_start);
1616 yy_match:
1617                 do
1618                         {
1619                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
1620                         if ( yy_accept[yy_current_state] )
1621                                 {
1622                                 (yy_last_accepting_state) = yy_current_state;
1623                                 (yy_last_accepting_cpos) = yy_cp;
1624                                 }
1625                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1626                                 {
1627                                 yy_current_state = (int) yy_def[yy_current_state];
1628                                 if ( yy_current_state >= 564 )
1629                                         yy_c = yy_meta[(unsigned int) yy_c];
1630                                 }
1631                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1632                         ++yy_cp;
1633                         }
1634                 while ( yy_base[yy_current_state] != 1586 );
1635
1636 yy_find_action:
1637                 yy_act = yy_accept[yy_current_state];
1638                 if ( yy_act == 0 )
1639                         { /* have to back up */
1640                         yy_cp = (yy_last_accepting_cpos);
1641                         yy_current_state = (yy_last_accepting_state);
1642                         yy_act = yy_accept[yy_current_state];
1643                         }
1644
1645                 YY_DO_BEFORE_ACTION;
1646
1647                 if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
1648                         {
1649                         int yyl;
1650                         for ( yyl = 0; yyl < xbt_graph_parse_leng; ++yyl )
1651                                 if ( xbt_graph_parse_text[yyl] == '\n' )
1652                                            
1653     xbt_graph_parse_lineno++;
1654 ;
1655                         }
1656
1657 do_action:      /* This label is used only to access EOF actions. */
1658
1659                 switch ( yy_act )
1660         { /* beginning of action switch */
1661                         case 0: /* must back up */
1662                         /* undo the effects of YY_DO_BEFORE_ACTION */
1663                         *yy_cp = (yy_hold_char);
1664                         yy_cp = (yy_last_accepting_cpos);
1665                         yy_current_state = (yy_last_accepting_state);
1666                         goto yy_find_action;
1667
1668 case 1:
1669 YY_RULE_SETUP
1670 ENTER(INCOMMENT);
1671         YY_BREAK
1672 case 2:
1673 YY_RULE_SETUP
1674 ENTER(INPI);
1675         YY_BREAK
1676
1677 case 3:
1678 YY_RULE_SETUP
1679 LEAVE;
1680         YY_BREAK
1681 case 4:
1682 case 5:
1683 case 6:
1684 /* rule 6 can match eol */
1685 YY_RULE_SETUP
1686 SKIP;
1687         YY_BREAK
1688 case YY_STATE_EOF(INCOMMENT):
1689 FAIL("EOF in comment.");
1690         YY_BREAK
1691
1692 case 7:
1693 YY_RULE_SETUP
1694 LEAVE;
1695         YY_BREAK
1696 case 8:
1697 case 9:
1698 /* rule 9 can match eol */
1699 YY_RULE_SETUP
1700 SKIP;
1701         YY_BREAK
1702 case YY_STATE_EOF(INPI):
1703 FAIL("EOF in PI (processing instruction).");
1704         YY_BREAK
1705
1706 /* SPACES: skipped uniformly */
1707 case 10:
1708 /* rule 10 can match eol */
1709 YY_RULE_SETUP
1710 SKIP;
1711         YY_BREAK
1712 /* PROLOG: determine root element and process it. */
1713
1714 case 11:
1715 /* rule 11 can match eol */
1716 YY_RULE_SETUP
1717 SET(DOCTYPE); 
1718         YY_BREAK
1719 case 12:
1720 /* rule 12 can match eol */
1721 YY_RULE_SETUP
1722 FAIL("Bad declaration %s.",xbt_graph_parse_text);
1723         YY_BREAK
1724
1725 case 13:
1726 /* rule 13 can match eol */
1727 YY_RULE_SETUP
1728 SET(ROOT_graphxml_edge);
1729         YY_BREAK
1730 case 14:
1731 /* rule 14 can match eol */
1732 YY_RULE_SETUP
1733 SET(ROOT_graphxml_node);
1734         YY_BREAK
1735 case 15:
1736 /* rule 15 can match eol */
1737 YY_RULE_SETUP
1738 SET(ROOT_graphxml_graph);
1739         YY_BREAK
1740 case 16:
1741 /* rule 16 can match eol */
1742 YY_RULE_SETUP
1743 FAIL("Bad declaration %s.",xbt_graph_parse_text);
1744         YY_BREAK
1745 case 17:
1746 YY_RULE_SETUP
1747 FAIL("Unexpected character `%c' in prolog.", xbt_graph_parse_text[0]);
1748         YY_BREAK
1749 case YY_STATE_EOF(PROLOG):
1750 case YY_STATE_EOF(DOCTYPE):
1751 FAIL("EOF in prolog.");
1752         YY_BREAK
1753
1754 /* RULES DERIVED FROM DTD. */
1755 /* <!-- Small DTD for xbt graphs. -->  */
1756 /*     isDirected (true|false) "true"
1757   * >  */
1758 case 18:
1759 /* rule 18 can match eol */
1760 YY_RULE_SETUP
1761 FAIL("Starting tag <graph> is not allowed here.");
1762         YY_BREAK
1763 case 19:
1764 /* rule 19 can match eol */
1765 YY_RULE_SETUP
1766 {
1767   AX_graphxml_graph_isDirected = A_graphxml_graph_isDirected_true;
1768   ENTER(AL_graphxml_graph); pushbuffer(0);
1769   }
1770         YY_BREAK
1771
1772 case 20:
1773 /* rule 20 can match eol */
1774 case 21:
1775 /* rule 21 can match eol */
1776 YY_RULE_SETUP
1777 A_graphxml_graph_isDirected = A_graphxml_graph_isDirected_true;
1778         YY_BREAK
1779 case 22:
1780 /* rule 22 can match eol */
1781 case 23:
1782 /* rule 23 can match eol */
1783 YY_RULE_SETUP
1784 A_graphxml_graph_isDirected = A_graphxml_graph_isDirected_false;
1785         YY_BREAK
1786 case 24:
1787 YY_RULE_SETUP
1788 {
1789   LEAVE; STag_graphxml_graph();graphxml_pcdata_ix = 0; ENTER(S_graphxml_graph);
1790  }
1791         YY_BREAK
1792 case 25:
1793 YY_RULE_SETUP
1794 {
1795   LEAVE; STag_graphxml_graph(); graphxml_pcdata_ix = 0; ETag_graphxml_graph(); popbuffer(); /* attribute */
1796   switch (YY_START) {
1797    case ROOT_graphxml_graph: SET(EPILOG); break;
1798   }
1799  }
1800         YY_BREAK
1801 case 26:
1802 YY_RULE_SETUP
1803 FAIL("Unexpected character `%c' in attribute list of graph element.", xbt_graph_parse_text[0]);
1804         YY_BREAK
1805 case 27:
1806 YY_RULE_SETUP
1807 FAIL("Bad attribute `%s' in `graph' element start tag.",xbt_graph_parse_text);
1808         YY_BREAK
1809 case YY_STATE_EOF(AL_graphxml_graph):
1810 FAIL("EOF in attribute list of `graph' element.");
1811         YY_BREAK
1812
1813 case 28:
1814 /* rule 28 can match eol */
1815 YY_RULE_SETUP
1816 {
1817   LEAVE;
1818   ETag_graphxml_graph();
1819   popbuffer(); /* attribute */
1820   switch (YY_START) {
1821    case ROOT_graphxml_graph: SET(EPILOG); break;
1822   }
1823  }
1824         YY_BREAK
1825 case 29:
1826 /* rule 29 can match eol */
1827 YY_RULE_SETUP
1828 FAIL("Unexpected end-tag `%s': `</graph>' expected.",xbt_graph_parse_text);
1829         YY_BREAK
1830 case 30:
1831 YY_RULE_SETUP
1832 FAIL("Unexpected character `%c': `</graph>' expected.",xbt_graph_parse_text[0]);
1833         YY_BREAK
1834 case YY_STATE_EOF(S_graphxml_graph_1):
1835 case YY_STATE_EOF(E_graphxml_graph):
1836 case YY_STATE_EOF(S_graphxml_graph_3):
1837 case YY_STATE_EOF(S_graphxml_graph_5):
1838 case YY_STATE_EOF(S_graphxml_graph):
1839 FAIL("Premature EOF: `</graph>' expected.");
1840         YY_BREAK
1841
1842 /*     label           CDATA                ""
1843   *     name            CDATA                #REQUIRED
1844   *     data            CDATA                ""
1845   *     position_x          CDATA                "-1.0"
1846   *     position_y          CDATA                "-1.0"
1847   * >  */
1848 case 31:
1849 /* rule 31 can match eol */
1850 YY_RULE_SETUP
1851 FAIL("Starting tag <node> is not allowed here.");
1852         YY_BREAK
1853 case 32:
1854 /* rule 32 can match eol */
1855 YY_RULE_SETUP
1856 {
1857   AX_graphxml_node_label = 0;
1858   AX_graphxml_node_name = 0;
1859   AX_graphxml_node_data = 0;
1860   AX_graphxml_node_position_x = 1;
1861   AX_graphxml_node_position_y = 6;
1862   ENTER(AL_graphxml_node); pushbuffer(0);
1863   }
1864         YY_BREAK
1865
1866 case 33:
1867 /* rule 33 can match eol */
1868 YY_RULE_SETUP
1869 ENTER(VALUE1); BUFFERSET(AX_graphxml_node_label);
1870         YY_BREAK
1871 case 34:
1872 /* rule 34 can match eol */
1873 YY_RULE_SETUP
1874 ENTER(VALUE2); BUFFERSET(AX_graphxml_node_label);
1875         YY_BREAK
1876 case 35:
1877 /* rule 35 can match eol */
1878 YY_RULE_SETUP
1879 ENTER(VALUE1); BUFFERSET(AX_graphxml_node_name);
1880         YY_BREAK
1881 case 36:
1882 /* rule 36 can match eol */
1883 YY_RULE_SETUP
1884 ENTER(VALUE2); BUFFERSET(AX_graphxml_node_name);
1885         YY_BREAK
1886 case 37:
1887 /* rule 37 can match eol */
1888 YY_RULE_SETUP
1889 ENTER(VALUE1); BUFFERSET(AX_graphxml_node_data);
1890         YY_BREAK
1891 case 38:
1892 /* rule 38 can match eol */
1893 YY_RULE_SETUP
1894 ENTER(VALUE2); BUFFERSET(AX_graphxml_node_data);
1895         YY_BREAK
1896 case 39:
1897 /* rule 39 can match eol */
1898 YY_RULE_SETUP
1899 ENTER(VALUE1); BUFFERSET(AX_graphxml_node_position_x);
1900         YY_BREAK
1901 case 40:
1902 /* rule 40 can match eol */
1903 YY_RULE_SETUP
1904 ENTER(VALUE2); BUFFERSET(AX_graphxml_node_position_x);
1905         YY_BREAK
1906 case 41:
1907 /* rule 41 can match eol */
1908 YY_RULE_SETUP
1909 ENTER(VALUE1); BUFFERSET(AX_graphxml_node_position_y);
1910         YY_BREAK
1911 case 42:
1912 /* rule 42 can match eol */
1913 YY_RULE_SETUP
1914 ENTER(VALUE2); BUFFERSET(AX_graphxml_node_position_y);
1915         YY_BREAK
1916 case 43:
1917 YY_RULE_SETUP
1918 {
1919   if (!AX_graphxml_node_name) FAIL("Required attribute `name' not set for `node' element.");
1920   LEAVE; STag_graphxml_node();graphxml_pcdata_ix = 0; ENTER(E_graphxml_node);
1921  }
1922         YY_BREAK
1923 case 44:
1924 YY_RULE_SETUP
1925 {
1926   if (!AX_graphxml_node_name) FAIL("Required attribute `name' not set for `node' element.");
1927   LEAVE; STag_graphxml_node(); graphxml_pcdata_ix = 0; ETag_graphxml_node(); popbuffer(); /* attribute */
1928   switch (YY_START) {
1929    case S_graphxml_graph_2: case S_graphxml_graph_3: case S_graphxml_graph: SET(S_graphxml_graph_3); break;
1930    case ROOT_graphxml_node: SET(EPILOG); break;
1931   }
1932  }
1933         YY_BREAK
1934 case 45:
1935 YY_RULE_SETUP
1936 FAIL("Unexpected character `%c' in attribute list of node element.", xbt_graph_parse_text[0]);
1937         YY_BREAK
1938 case 46:
1939 YY_RULE_SETUP
1940 FAIL("Bad attribute `%s' in `node' element start tag.",xbt_graph_parse_text);
1941         YY_BREAK
1942 case YY_STATE_EOF(AL_graphxml_node):
1943 FAIL("EOF in attribute list of `node' element.");
1944         YY_BREAK
1945
1946 case 47:
1947 /* rule 47 can match eol */
1948 YY_RULE_SETUP
1949 {
1950   LEAVE;
1951   ETag_graphxml_node();
1952   popbuffer(); /* attribute */
1953   switch (YY_START) {
1954    case S_graphxml_graph_2: case S_graphxml_graph_3: case S_graphxml_graph: SET(S_graphxml_graph_3); break;
1955    case ROOT_graphxml_node: SET(EPILOG); break;
1956   }
1957  }
1958         YY_BREAK
1959 case 48:
1960 /* rule 48 can match eol */
1961 YY_RULE_SETUP
1962 FAIL("Unexpected end-tag `%s': `</node>' expected.",xbt_graph_parse_text);
1963         YY_BREAK
1964 case 49:
1965 YY_RULE_SETUP
1966 FAIL("Unexpected character `%c': `</node>' expected.",xbt_graph_parse_text[0]);
1967         YY_BREAK
1968 case YY_STATE_EOF(E_graphxml_node):
1969 FAIL("Premature EOF: `</node>' expected.");
1970         YY_BREAK
1971
1972 /*     label           CDATA                ""
1973   *     name            CDATA               #IMPLIED
1974   *     source          CDATA               #REQUIRED
1975   *     target          CDATA               #REQUIRED
1976   *     length          CDATA               "-1.0"
1977   *     data            CDATA               ""
1978   * >  */
1979 case 50:
1980 /* rule 50 can match eol */
1981 YY_RULE_SETUP
1982 FAIL("Starting tag <edge> is not allowed here.");
1983         YY_BREAK
1984 case 51:
1985 /* rule 51 can match eol */
1986 YY_RULE_SETUP
1987 {
1988   AX_graphxml_edge_label = 0;
1989   AX_graphxml_edge_name = 0;
1990   AX_graphxml_edge_source = 0;
1991   AX_graphxml_edge_target = 0;
1992   AX_graphxml_edge_length = 11;
1993   AX_graphxml_edge_data = 0;
1994   ENTER(AL_graphxml_edge); pushbuffer(0);
1995   }
1996         YY_BREAK
1997
1998 case 52:
1999 /* rule 52 can match eol */
2000 YY_RULE_SETUP
2001 ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_label);
2002         YY_BREAK
2003 case 53:
2004 /* rule 53 can match eol */
2005 YY_RULE_SETUP
2006 ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_label);
2007         YY_BREAK
2008 case 54:
2009 /* rule 54 can match eol */
2010 YY_RULE_SETUP
2011 ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_name);
2012         YY_BREAK
2013 case 55:
2014 /* rule 55 can match eol */
2015 YY_RULE_SETUP
2016 ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_name);
2017         YY_BREAK
2018 case 56:
2019 /* rule 56 can match eol */
2020 YY_RULE_SETUP
2021 ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_source);
2022         YY_BREAK
2023 case 57:
2024 /* rule 57 can match eol */
2025 YY_RULE_SETUP
2026 ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_source);
2027         YY_BREAK
2028 case 58:
2029 /* rule 58 can match eol */
2030 YY_RULE_SETUP
2031 ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_target);
2032         YY_BREAK
2033 case 59:
2034 /* rule 59 can match eol */
2035 YY_RULE_SETUP
2036 ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_target);
2037         YY_BREAK
2038 case 60:
2039 /* rule 60 can match eol */
2040 YY_RULE_SETUP
2041 ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_length);
2042         YY_BREAK
2043 case 61:
2044 /* rule 61 can match eol */
2045 YY_RULE_SETUP
2046 ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_length);
2047         YY_BREAK
2048 case 62:
2049 /* rule 62 can match eol */
2050 YY_RULE_SETUP
2051 ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_data);
2052         YY_BREAK
2053 case 63:
2054 /* rule 63 can match eol */
2055 YY_RULE_SETUP
2056 ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_data);
2057         YY_BREAK
2058 case 64:
2059 YY_RULE_SETUP
2060 {
2061   if (!AX_graphxml_edge_source) FAIL("Required attribute `source' not set for `edge' element.");
2062   if (!AX_graphxml_edge_target) FAIL("Required attribute `target' not set for `edge' element.");
2063   LEAVE; STag_graphxml_edge();graphxml_pcdata_ix = 0; ENTER(E_graphxml_edge);
2064  }
2065         YY_BREAK
2066 case 65:
2067 YY_RULE_SETUP
2068 {
2069   if (!AX_graphxml_edge_source) FAIL("Required attribute `source' not set for `edge' element.");
2070   if (!AX_graphxml_edge_target) FAIL("Required attribute `target' not set for `edge' element.");
2071   LEAVE; STag_graphxml_edge(); graphxml_pcdata_ix = 0; ETag_graphxml_edge(); popbuffer(); /* attribute */
2072   switch (YY_START) {
2073    case S_graphxml_graph_1: case S_graphxml_graph_3: case S_graphxml_graph_5: case S_graphxml_graph_4: case S_graphxml_graph: SET(S_graphxml_graph_5); break;
2074    case ROOT_graphxml_edge: SET(EPILOG); break;
2075   }
2076  }
2077         YY_BREAK
2078 case 66:
2079 YY_RULE_SETUP
2080 FAIL("Unexpected character `%c' in attribute list of edge element.", xbt_graph_parse_text[0]);
2081         YY_BREAK
2082 case 67:
2083 YY_RULE_SETUP
2084 FAIL("Bad attribute `%s' in `edge' element start tag.",xbt_graph_parse_text);
2085         YY_BREAK
2086 case YY_STATE_EOF(AL_graphxml_edge):
2087 FAIL("EOF in attribute list of `edge' element.");
2088         YY_BREAK
2089
2090 case 68:
2091 /* rule 68 can match eol */
2092 YY_RULE_SETUP
2093 {
2094   LEAVE;
2095   ETag_graphxml_edge();
2096   popbuffer(); /* attribute */
2097   switch (YY_START) {
2098    case S_graphxml_graph_1: case S_graphxml_graph_3: case S_graphxml_graph_5: case S_graphxml_graph_4: case S_graphxml_graph: SET(S_graphxml_graph_5); break;
2099    case ROOT_graphxml_edge: SET(EPILOG); break;
2100   }
2101  }
2102         YY_BREAK
2103 case 69:
2104 /* rule 69 can match eol */
2105 YY_RULE_SETUP
2106 FAIL("Unexpected end-tag `%s': `</edge>' expected.",xbt_graph_parse_text);
2107         YY_BREAK
2108 case 70:
2109 YY_RULE_SETUP
2110 FAIL("Unexpected character `%c': `</edge>' expected.",xbt_graph_parse_text[0]);
2111         YY_BREAK
2112 case YY_STATE_EOF(E_graphxml_edge):
2113 FAIL("Premature EOF: `</edge>' expected.");
2114         YY_BREAK
2115
2116 /* EPILOG: after the root element. */
2117
2118 case 71:
2119 YY_RULE_SETUP
2120 {SET(PROLOG); yyless(0); CLEANUP; return -1;}
2121         YY_BREAK
2122 case YY_STATE_EOF(EPILOG):
2123 SUCCEED;
2124         YY_BREAK
2125
2126 /* CHARACTER DATA. */
2127
2128 /* Non-defined standard entities... */
2129 case 72:
2130 YY_RULE_SETUP
2131 BUFFERPUTC('&');
2132         YY_BREAK
2133 case 73:
2134 YY_RULE_SETUP
2135 BUFFERPUTC('<');
2136         YY_BREAK
2137 case 74:
2138 YY_RULE_SETUP
2139 BUFFERPUTC('>');
2140         YY_BREAK
2141 case 75:
2142 YY_RULE_SETUP
2143 BUFFERPUTC('\'');
2144         YY_BREAK
2145 case 76:
2146 YY_RULE_SETUP
2147 BUFFERPUTC('"');
2148         YY_BREAK
2149 /* Character entities. */
2150 case 77:
2151 YY_RULE_SETUP
2152 BUFFERPUTC((unsigned char)atoi(xbt_graph_parse_text+2));
2153         YY_BREAK
2154 case 78:
2155 YY_RULE_SETUP
2156 BUFFERPUTC((unsigned char)strtol(xbt_graph_parse_text+3,NULL,16));
2157         YY_BREAK
2158
2159 case 79:
2160 /* rule 79 can match eol */
2161 case 80:
2162 /* rule 80 can match eol */
2163 case 81:
2164 /* rule 81 can match eol */
2165 case 82:
2166 /* rule 82 can match eol */
2167 YY_RULE_SETUP
2168 BUFFERPUTC('\n');
2169         YY_BREAK
2170
2171 case 83:
2172 YY_RULE_SETUP
2173 ENTER(CDATA);
2174         YY_BREAK
2175 case 84:
2176 YY_RULE_SETUP
2177 FAIL("Unexpected `]""]>' in character data.");
2178         YY_BREAK
2179
2180 case 85:
2181 YY_RULE_SETUP
2182 BUFFERDONE; LEAVE;
2183         YY_BREAK
2184 case YY_STATE_EOF(VALUE1):
2185 FAIL("EOF in literal (\"'\" expected).");
2186         YY_BREAK
2187
2188 case 86:
2189 YY_RULE_SETUP
2190 BUFFERDONE; LEAVE;
2191         YY_BREAK
2192 case YY_STATE_EOF(VALUE2):
2193 FAIL("EOF in literal (`\"' expected).");
2194         YY_BREAK
2195
2196 case 87:
2197 /* rule 87 can match eol */
2198 YY_RULE_SETUP
2199 BUFFERPUTC(xbt_graph_parse_text[0]);
2200         YY_BREAK
2201 case 88:
2202 YY_RULE_SETUP
2203 FAIL("Spurious `%c' in character data.",xbt_graph_parse_text[0]);
2204         YY_BREAK
2205
2206 case 89:
2207 YY_RULE_SETUP
2208 LEAVE;
2209         YY_BREAK
2210 /* "]""]"               BUFFERPUTC(xbt_graph_parse_text[0]); BUFFERPUTC(xbt_graph_parse_text[1]); */
2211 case 90:
2212 YY_RULE_SETUP
2213 BUFFERPUTC(xbt_graph_parse_text[0]);
2214         YY_BREAK
2215 case YY_STATE_EOF(CDATA):
2216 FAIL("EOF in CDATA section.");
2217         YY_BREAK
2218
2219 /* Impossible rules to avoid warnings from flex(1). */
2220 /* Ideally, this should be replaced by code in flexml.pl that
2221     generates just the states not covered by other rules. */
2222
2223 case 91:
2224 /* rule 91 can match eol */
2225 YY_RULE_SETUP
2226 FAIL("Syntax error on character `%c'.", xbt_graph_parse_text[0]);
2227         YY_BREAK
2228
2229 case 92:
2230 YY_RULE_SETUP
2231 ECHO;
2232         YY_BREAK
2233 case YY_STATE_EOF(INITIAL):
2234 case YY_STATE_EOF(ROOT_graphxml_graph):
2235 case YY_STATE_EOF(S_graphxml_graph_2):
2236 case YY_STATE_EOF(S_graphxml_graph_4):
2237 case YY_STATE_EOF(ROOT_graphxml_node):
2238 case YY_STATE_EOF(ROOT_graphxml_edge):
2239 case YY_STATE_EOF(IMPOSSIBLE):
2240         yyterminate();
2241
2242         case YY_END_OF_BUFFER:
2243                 {
2244                 /* Amount of text matched not including the EOB char. */
2245                 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
2246
2247                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
2248                 *yy_cp = (yy_hold_char);
2249                 YY_RESTORE_YY_MORE_OFFSET
2250
2251                 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
2252                         {
2253                         /* We're scanning a new file or input source.  It's
2254                          * possible that this happened because the user
2255                          * just pointed xbt_graph_parse_in at a new source and called
2256                          * xbt_graph_parse_lex().  If so, then we have to assure
2257                          * consistency between YY_CURRENT_BUFFER and our
2258                          * globals.  Here is the right place to do so, because
2259                          * this is the first action (other than possibly a
2260                          * back-up) that will match for the new input source.
2261                          */
2262                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
2263                         YY_CURRENT_BUFFER_LVALUE->yy_input_file = xbt_graph_parse_in;
2264                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
2265                         }
2266
2267                 /* Note that here we test for yy_c_buf_p "<=" to the position
2268                  * of the first EOB in the buffer, since yy_c_buf_p will
2269                  * already have been incremented past the NUL character
2270                  * (since all states make transitions on EOB to the
2271                  * end-of-buffer state).  Contrast this with the test
2272                  * in input().
2273                  */
2274                 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
2275                         { /* This was really a NUL. */
2276                         yy_state_type yy_next_state;
2277
2278                         (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
2279
2280                         yy_current_state = yy_get_previous_state(  );
2281
2282                         /* Okay, we're now positioned to make the NUL
2283                          * transition.  We couldn't have
2284                          * yy_get_previous_state() go ahead and do it
2285                          * for us because it doesn't know how to deal
2286                          * with the possibility of jamming (and we don't
2287                          * want to build jamming into it because then it
2288                          * will run more slowly).
2289                          */
2290
2291                         yy_next_state = yy_try_NUL_trans( yy_current_state );
2292
2293                         yy_bp = (yytext_ptr) + YY_MORE_ADJ;
2294
2295                         if ( yy_next_state )
2296                                 {
2297                                 /* Consume the NUL. */
2298                                 yy_cp = ++(yy_c_buf_p);
2299                                 yy_current_state = yy_next_state;
2300                                 goto yy_match;
2301                                 }
2302
2303                         else
2304                                 {
2305                                 yy_cp = (yy_c_buf_p);
2306                                 goto yy_find_action;
2307                                 }
2308                         }
2309
2310                 else switch ( yy_get_next_buffer(  ) )
2311                         {
2312                         case EOB_ACT_END_OF_FILE:
2313                                 {
2314                                 (yy_did_buffer_switch_on_eof) = 0;
2315
2316                                 if ( xbt_graph_parse_wrap( ) )
2317                                         {
2318                                         /* Note: because we've taken care in
2319                                          * yy_get_next_buffer() to have set up
2320                                          * xbt_graph_parse_text, we can now set up
2321                                          * yy_c_buf_p so that if some total
2322                                          * hoser (like flex itself) wants to
2323                                          * call the scanner after we return the
2324                                          * YY_NULL, it'll still work - another
2325                                          * YY_NULL will get returned.
2326                                          */
2327                                         (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
2328
2329                                         yy_act = YY_STATE_EOF(YY_START);
2330                                         goto do_action;
2331                                         }
2332
2333                                 else
2334                                         {
2335                                         if ( ! (yy_did_buffer_switch_on_eof) )
2336                                                 YY_NEW_FILE;
2337                                         }
2338                                 break;
2339                                 }
2340
2341                         case EOB_ACT_CONTINUE_SCAN:
2342                                 (yy_c_buf_p) =
2343                                         (yytext_ptr) + yy_amount_of_matched_text;
2344
2345                                 yy_current_state = yy_get_previous_state(  );
2346
2347                                 yy_cp = (yy_c_buf_p);
2348                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
2349                                 goto yy_match;
2350
2351                         case EOB_ACT_LAST_MATCH:
2352                                 (yy_c_buf_p) =
2353                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
2354
2355                                 yy_current_state = yy_get_previous_state(  );
2356
2357                                 yy_cp = (yy_c_buf_p);
2358                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
2359                                 goto yy_find_action;
2360                         }
2361                 break;
2362                 }
2363
2364         default:
2365                 YY_FATAL_ERROR(
2366                         "fatal flex scanner internal error--no action found" );
2367         } /* end of action switch */
2368                 } /* end of scanning one token */
2369 } /* end of xbt_graph_parse_lex */
2370
2371 /* yy_get_next_buffer - try to read in a new buffer
2372  *
2373  * Returns a code representing an action:
2374  *      EOB_ACT_LAST_MATCH -
2375  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
2376  *      EOB_ACT_END_OF_FILE - end of file
2377  */
2378 static int yy_get_next_buffer (void)
2379 {
2380         register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
2381         register char *source = (yytext_ptr);
2382         register int number_to_move, i;
2383         int ret_val;
2384
2385         if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
2386                 YY_FATAL_ERROR(
2387                 "fatal flex scanner internal error--end of buffer missed" );
2388
2389         if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
2390                 { /* Don't try to fill the buffer, so this is an EOF. */
2391                 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
2392                         {
2393                         /* We matched a single character, the EOB, so
2394                          * treat this as a final EOF.
2395                          */
2396                         return EOB_ACT_END_OF_FILE;
2397                         }
2398
2399                 else
2400                         {
2401                         /* We matched some text prior to the EOB, first
2402                          * process it.
2403                          */
2404                         return EOB_ACT_LAST_MATCH;
2405                         }
2406                 }
2407
2408         /* Try to read more data. */
2409
2410         /* First move last chars to start of buffer. */
2411         number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
2412
2413         for ( i = 0; i < number_to_move; ++i )
2414                 *(dest++) = *(source++);
2415
2416         if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
2417                 /* don't do the read, it's not guaranteed to return an EOF,
2418                  * just force an EOF
2419                  */
2420                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
2421
2422         else
2423                 {
2424                         int num_to_read =
2425                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
2426
2427                 while ( num_to_read <= 0 )
2428                         { /* Not enough room in the buffer - grow it. */
2429
2430                         /* just a shorter name for the current buffer */
2431                         YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
2432
2433                         int yy_c_buf_p_offset =
2434                                 (int) ((yy_c_buf_p) - b->yy_ch_buf);
2435
2436                         if ( b->yy_is_our_buffer )
2437                                 {
2438                                 int new_size = b->yy_buf_size * 2;
2439
2440                                 if ( new_size <= 0 )
2441                                         b->yy_buf_size += b->yy_buf_size / 8;
2442                                 else
2443                                         b->yy_buf_size *= 2;
2444
2445                                 b->yy_ch_buf = (char *)
2446                                         /* Include room in for 2 EOB chars. */
2447                                         xbt_graph_parse_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
2448                                 }
2449                         else
2450                                 /* Can't grow it, we don't own it. */
2451                                 b->yy_ch_buf = 0;
2452
2453                         if ( ! b->yy_ch_buf )
2454                                 YY_FATAL_ERROR(
2455                                 "fatal error - scanner input buffer overflow" );
2456
2457                         (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
2458
2459                         num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
2460                                                 number_to_move - 1;
2461
2462                         }
2463
2464                 if ( num_to_read > YY_READ_BUF_SIZE )
2465                         num_to_read = YY_READ_BUF_SIZE;
2466
2467                 /* Read in more data. */
2468                 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
2469                         (yy_n_chars), (size_t) num_to_read );
2470
2471                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
2472                 }
2473
2474         if ( (yy_n_chars) == 0 )
2475                 {
2476                 if ( number_to_move == YY_MORE_ADJ )
2477                         {
2478                         ret_val = EOB_ACT_END_OF_FILE;
2479                         xbt_graph_parse_restart(xbt_graph_parse_in  );
2480                         }
2481
2482                 else
2483                         {
2484                         ret_val = EOB_ACT_LAST_MATCH;
2485                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
2486                                 YY_BUFFER_EOF_PENDING;
2487                         }
2488                 }
2489
2490         else
2491                 ret_val = EOB_ACT_CONTINUE_SCAN;
2492
2493         if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
2494                 /* Extend the array by 50%, plus the number we really need. */
2495                 yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
2496                 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) xbt_graph_parse_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
2497                 if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
2498                         YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
2499         }
2500
2501         (yy_n_chars) += number_to_move;
2502         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
2503         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
2504
2505         (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
2506
2507         return ret_val;
2508 }
2509
2510 /* yy_get_previous_state - get the state just before the EOB char was reached */
2511
2512     static yy_state_type yy_get_previous_state (void)
2513 {
2514         register yy_state_type yy_current_state;
2515         register char *yy_cp;
2516     
2517         yy_current_state = (yy_start);
2518
2519         for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
2520                 {
2521                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
2522                 if ( yy_accept[yy_current_state] )
2523                         {
2524                         (yy_last_accepting_state) = yy_current_state;
2525                         (yy_last_accepting_cpos) = yy_cp;
2526                         }
2527                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2528                         {
2529                         yy_current_state = (int) yy_def[yy_current_state];
2530                         if ( yy_current_state >= 564 )
2531                                 yy_c = yy_meta[(unsigned int) yy_c];
2532                         }
2533                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2534                 }
2535
2536         return yy_current_state;
2537 }
2538
2539 /* yy_try_NUL_trans - try to make a transition on the NUL character
2540  *
2541  * synopsis
2542  *      next_state = yy_try_NUL_trans( current_state );
2543  */
2544     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
2545 {
2546         register int yy_is_jam;
2547         register char *yy_cp = (yy_c_buf_p);
2548
2549         register YY_CHAR yy_c = 1;
2550         if ( yy_accept[yy_current_state] )
2551                 {
2552                 (yy_last_accepting_state) = yy_current_state;
2553                 (yy_last_accepting_cpos) = yy_cp;
2554                 }
2555         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2556                 {
2557                 yy_current_state = (int) yy_def[yy_current_state];
2558                 if ( yy_current_state >= 564 )
2559                         yy_c = yy_meta[(unsigned int) yy_c];
2560                 }
2561         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2562         yy_is_jam = (yy_current_state == 563);
2563
2564         return yy_is_jam ? 0 : yy_current_state;
2565 }
2566
2567 #ifndef YY_NO_INPUT
2568 #ifdef __cplusplus
2569     static int yyinput (void)
2570 #else
2571     static int input  (void)
2572 #endif
2573
2574 {
2575         int c;
2576     
2577         *(yy_c_buf_p) = (yy_hold_char);
2578
2579         if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
2580                 {
2581                 /* yy_c_buf_p now points to the character we want to return.
2582                  * If this occurs *before* the EOB characters, then it's a
2583                  * valid NUL; if not, then we've hit the end of the buffer.
2584                  */
2585                 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
2586                         /* This was really a NUL. */
2587                         *(yy_c_buf_p) = '\0';
2588
2589                 else
2590                         { /* need more input */
2591                         int offset = (yy_c_buf_p) - (yytext_ptr);
2592                         ++(yy_c_buf_p);
2593
2594                         switch ( yy_get_next_buffer(  ) )
2595                                 {
2596                                 case EOB_ACT_LAST_MATCH:
2597                                         /* This happens because yy_g_n_b()
2598                                          * sees that we've accumulated a
2599                                          * token and flags that we need to
2600                                          * try matching the token before
2601                                          * proceeding.  But for input(),
2602                                          * there's no matching to consider.
2603                                          * So convert the EOB_ACT_LAST_MATCH
2604                                          * to EOB_ACT_END_OF_FILE.
2605                                          */
2606
2607                                         /* Reset buffer status. */
2608                                         xbt_graph_parse_restart(xbt_graph_parse_in );
2609
2610                                         /*FALLTHROUGH*/
2611
2612                                 case EOB_ACT_END_OF_FILE:
2613                                         {
2614                                         if ( xbt_graph_parse_wrap( ) )
2615                                                 return EOF;
2616
2617                                         if ( ! (yy_did_buffer_switch_on_eof) )
2618                                                 YY_NEW_FILE;
2619 #ifdef __cplusplus
2620                                         return yyinput();
2621 #else
2622                                         return input();
2623 #endif
2624                                         }
2625
2626                                 case EOB_ACT_CONTINUE_SCAN:
2627                                         (yy_c_buf_p) = (yytext_ptr) + offset;
2628                                         break;
2629                                 }
2630                         }
2631                 }
2632
2633         c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
2634         *(yy_c_buf_p) = '\0';   /* preserve xbt_graph_parse_text */
2635         (yy_hold_char) = *++(yy_c_buf_p);
2636
2637         if ( c == '\n' )
2638                    
2639     xbt_graph_parse_lineno++;
2640 ;
2641
2642         return c;
2643 }
2644 #endif  /* ifndef YY_NO_INPUT */
2645
2646 /** Immediately switch to a different input stream.
2647  * @param input_file A readable stream.
2648  * 
2649  * @note This function does not reset the start condition to @c INITIAL .
2650  */
2651     void xbt_graph_parse_restart  (FILE * input_file )
2652 {
2653     
2654         if ( ! YY_CURRENT_BUFFER ){
2655         xbt_graph_parse_ensure_buffer_stack ();
2656                 YY_CURRENT_BUFFER_LVALUE =
2657             xbt_graph_parse__create_buffer(xbt_graph_parse_in,YY_BUF_SIZE );
2658         }
2659
2660         xbt_graph_parse__init_buffer(YY_CURRENT_BUFFER,input_file );
2661         xbt_graph_parse__load_buffer_state( );
2662 }
2663
2664 /** Switch to a different input buffer.
2665  * @param new_buffer The new input buffer.
2666  * 
2667  */
2668     void xbt_graph_parse__switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
2669 {
2670     
2671         /* TODO. We should be able to replace this entire function body
2672          * with
2673          *              xbt_graph_parse_pop_buffer_state();
2674          *              xbt_graph_parse_push_buffer_state(new_buffer);
2675      */
2676         xbt_graph_parse_ensure_buffer_stack ();
2677         if ( YY_CURRENT_BUFFER == new_buffer )
2678                 return;
2679
2680         if ( YY_CURRENT_BUFFER )
2681                 {
2682                 /* Flush out information for old buffer. */
2683                 *(yy_c_buf_p) = (yy_hold_char);
2684                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
2685                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
2686                 }
2687
2688         YY_CURRENT_BUFFER_LVALUE = new_buffer;
2689         xbt_graph_parse__load_buffer_state( );
2690
2691         /* We don't actually know whether we did this switch during
2692          * EOF (xbt_graph_parse_wrap()) processing, but the only time this flag
2693          * is looked at is after xbt_graph_parse_wrap() is called, so it's safe
2694          * to go ahead and always set it.
2695          */
2696         (yy_did_buffer_switch_on_eof) = 1;
2697 }
2698
2699 static void xbt_graph_parse__load_buffer_state  (void)
2700 {
2701         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
2702         (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
2703         xbt_graph_parse_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
2704         (yy_hold_char) = *(yy_c_buf_p);
2705 }
2706
2707 /** Allocate and initialize an input buffer state.
2708  * @param file A readable stream.
2709  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
2710  * 
2711  * @return the allocated buffer state.
2712  */
2713     YY_BUFFER_STATE xbt_graph_parse__create_buffer  (FILE * file, int  size )
2714 {
2715         YY_BUFFER_STATE b;
2716     
2717         b = (YY_BUFFER_STATE) xbt_graph_parse_alloc(sizeof( struct yy_buffer_state )  );
2718         if ( ! b )
2719                 YY_FATAL_ERROR( "out of dynamic memory in xbt_graph_parse__create_buffer()" );
2720
2721         b->yy_buf_size = size;
2722
2723         /* yy_ch_buf has to be 2 characters longer than the size given because
2724          * we need to put in 2 end-of-buffer characters.
2725          */
2726         b->yy_ch_buf = (char *) xbt_graph_parse_alloc(b->yy_buf_size + 2  );
2727         if ( ! b->yy_ch_buf )
2728                 YY_FATAL_ERROR( "out of dynamic memory in xbt_graph_parse__create_buffer()" );
2729
2730         b->yy_is_our_buffer = 1;
2731
2732         xbt_graph_parse__init_buffer(b,file );
2733
2734         return b;
2735 }
2736
2737 /** Destroy the buffer.
2738  * @param b a buffer created with xbt_graph_parse__create_buffer()
2739  * 
2740  */
2741     void xbt_graph_parse__delete_buffer (YY_BUFFER_STATE  b )
2742 {
2743     
2744         if ( ! b )
2745                 return;
2746
2747         if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
2748                 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
2749
2750         if ( b->yy_is_our_buffer )
2751                 xbt_graph_parse_free((void *) b->yy_ch_buf  );
2752
2753         xbt_graph_parse_free((void *) b  );
2754 }
2755
2756 #ifndef __cplusplus
2757 extern int isatty (int );
2758 #endif /* __cplusplus */
2759     
2760 /* Initializes or reinitializes a buffer.
2761  * This function is sometimes called more than once on the same buffer,
2762  * such as during a xbt_graph_parse_restart() or at EOF.
2763  */
2764     static void xbt_graph_parse__init_buffer  (YY_BUFFER_STATE  b, FILE * file )
2765
2766 {
2767         int oerrno = errno;
2768     
2769         xbt_graph_parse__flush_buffer(b );
2770
2771         b->yy_input_file = file;
2772         b->yy_fill_buffer = 1;
2773
2774     /* If b is the current buffer, then xbt_graph_parse__init_buffer was _probably_
2775      * called from xbt_graph_parse_restart() or through yy_get_next_buffer.
2776      * In that case, we don't want to reset the lineno or column.
2777      */
2778     if (b != YY_CURRENT_BUFFER){
2779         b->yy_bs_lineno = 1;
2780         b->yy_bs_column = 0;
2781     }
2782
2783         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
2784     
2785         errno = oerrno;
2786 }
2787
2788 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
2789  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
2790  * 
2791  */
2792     void xbt_graph_parse__flush_buffer (YY_BUFFER_STATE  b )
2793 {
2794         if ( ! b )
2795                 return;
2796
2797         b->yy_n_chars = 0;
2798
2799         /* We always need two end-of-buffer characters.  The first causes
2800          * a transition to the end-of-buffer state.  The second causes
2801          * a jam in that state.
2802          */
2803         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
2804         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
2805
2806         b->yy_buf_pos = &b->yy_ch_buf[0];
2807
2808         b->yy_at_bol = 1;
2809         b->yy_buffer_status = YY_BUFFER_NEW;
2810
2811         if ( b == YY_CURRENT_BUFFER )
2812                 xbt_graph_parse__load_buffer_state( );
2813 }
2814
2815 /** Pushes the new state onto the stack. The new state becomes
2816  *  the current state. This function will allocate the stack
2817  *  if necessary.
2818  *  @param new_buffer The new state.
2819  *  
2820  */
2821 void xbt_graph_parse_push_buffer_state (YY_BUFFER_STATE new_buffer )
2822 {
2823         if (new_buffer == NULL)
2824                 return;
2825
2826         xbt_graph_parse_ensure_buffer_stack();
2827
2828         /* This block is copied from xbt_graph_parse__switch_to_buffer. */
2829         if ( YY_CURRENT_BUFFER )
2830                 {
2831                 /* Flush out information for old buffer. */
2832                 *(yy_c_buf_p) = (yy_hold_char);
2833                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
2834                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
2835                 }
2836
2837         /* Only push if top exists. Otherwise, replace top. */
2838         if (YY_CURRENT_BUFFER)
2839                 (yy_buffer_stack_top)++;
2840         YY_CURRENT_BUFFER_LVALUE = new_buffer;
2841
2842         /* copied from xbt_graph_parse__switch_to_buffer. */
2843         xbt_graph_parse__load_buffer_state( );
2844         (yy_did_buffer_switch_on_eof) = 1;
2845 }
2846
2847 /** Removes and deletes the top of the stack, if present.
2848  *  The next element becomes the new top.
2849  *  
2850  */
2851 void xbt_graph_parse_pop_buffer_state (void)
2852 {
2853         if (!YY_CURRENT_BUFFER)
2854                 return;
2855
2856         xbt_graph_parse__delete_buffer(YY_CURRENT_BUFFER );
2857         YY_CURRENT_BUFFER_LVALUE = NULL;
2858         if ((yy_buffer_stack_top) > 0)
2859                 --(yy_buffer_stack_top);
2860
2861         if (YY_CURRENT_BUFFER) {
2862                 xbt_graph_parse__load_buffer_state( );
2863                 (yy_did_buffer_switch_on_eof) = 1;
2864         }
2865 }
2866
2867 /* Allocates the stack if it does not exist.
2868  *  Guarantees space for at least one push.
2869  */
2870 static void xbt_graph_parse_ensure_buffer_stack (void)
2871 {
2872         int num_to_alloc;
2873     
2874         if (!(yy_buffer_stack)) {
2875
2876                 /* First allocation is just for 2 elements, since we don't know if this
2877                  * scanner will even need a stack. We use 2 instead of 1 to avoid an
2878                  * immediate realloc on the next call.
2879          */
2880                 num_to_alloc = 1;
2881                 (yy_buffer_stack) = (struct yy_buffer_state**)xbt_graph_parse_alloc
2882                                                                 (num_to_alloc * sizeof(struct yy_buffer_state*)
2883                                                                 );
2884                 if ( ! (yy_buffer_stack) )
2885                         YY_FATAL_ERROR( "out of dynamic memory in xbt_graph_parse_ensure_buffer_stack()" );
2886                                                                   
2887                 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
2888                                 
2889                 (yy_buffer_stack_max) = num_to_alloc;
2890                 (yy_buffer_stack_top) = 0;
2891                 return;
2892         }
2893
2894         if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
2895
2896                 /* Increase the buffer to prepare for a possible push. */
2897                 int grow_size = 8 /* arbitrary grow size */;
2898
2899                 num_to_alloc = (yy_buffer_stack_max) + grow_size;
2900                 (yy_buffer_stack) = (struct yy_buffer_state**)xbt_graph_parse_realloc
2901                                                                 ((yy_buffer_stack),
2902                                                                 num_to_alloc * sizeof(struct yy_buffer_state*)
2903                                                                 );
2904                 if ( ! (yy_buffer_stack) )
2905                         YY_FATAL_ERROR( "out of dynamic memory in xbt_graph_parse_ensure_buffer_stack()" );
2906
2907                 /* zero only the new slots.*/
2908                 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
2909                 (yy_buffer_stack_max) = num_to_alloc;
2910         }
2911 }
2912
2913 /** Setup the input buffer state to scan directly from a user-specified character buffer.
2914  * @param base the character buffer
2915  * @param size the size in bytes of the character buffer
2916  * 
2917  * @return the newly allocated buffer state object. 
2918  */
2919 YY_BUFFER_STATE xbt_graph_parse__scan_buffer  (char * base, yy_size_t  size )
2920 {
2921         YY_BUFFER_STATE b;
2922     
2923         if ( size < 2 ||
2924              base[size-2] != YY_END_OF_BUFFER_CHAR ||
2925              base[size-1] != YY_END_OF_BUFFER_CHAR )
2926                 /* They forgot to leave room for the EOB's. */
2927                 return 0;
2928
2929         b = (YY_BUFFER_STATE) xbt_graph_parse_alloc(sizeof( struct yy_buffer_state )  );
2930         if ( ! b )
2931                 YY_FATAL_ERROR( "out of dynamic memory in xbt_graph_parse__scan_buffer()" );
2932
2933         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
2934         b->yy_buf_pos = b->yy_ch_buf = base;
2935         b->yy_is_our_buffer = 0;
2936         b->yy_input_file = 0;
2937         b->yy_n_chars = b->yy_buf_size;
2938         b->yy_is_interactive = 0;
2939         b->yy_at_bol = 1;
2940         b->yy_fill_buffer = 0;
2941         b->yy_buffer_status = YY_BUFFER_NEW;
2942
2943         xbt_graph_parse__switch_to_buffer(b  );
2944
2945         return b;
2946 }
2947
2948 /** Setup the input buffer state to scan a string. The next call to xbt_graph_parse_lex() will
2949  * scan from a @e copy of @a str.
2950  * @param yystr a NUL-terminated string to scan
2951  * 
2952  * @return the newly allocated buffer state object.
2953  * @note If you want to scan bytes that may contain NUL values, then use
2954  *       xbt_graph_parse__scan_bytes() instead.
2955  */
2956 YY_BUFFER_STATE xbt_graph_parse__scan_string (yyconst char * yystr )
2957 {
2958     
2959         return xbt_graph_parse__scan_bytes(yystr,strlen(yystr) );
2960 }
2961
2962 /** Setup the input buffer state to scan the given bytes. The next call to xbt_graph_parse_lex() will
2963  * scan from a @e copy of @a bytes.
2964  * @param yybytes the byte buffer to scan
2965  * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
2966  * 
2967  * @return the newly allocated buffer state object.
2968  */
2969 YY_BUFFER_STATE xbt_graph_parse__scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
2970 {
2971         YY_BUFFER_STATE b;
2972         char *buf;
2973         yy_size_t n;
2974         int i;
2975     
2976         /* Get memory for full buffer, including space for trailing EOB's. */
2977         n = _yybytes_len + 2;
2978         buf = (char *) xbt_graph_parse_alloc(n  );
2979         if ( ! buf )
2980                 YY_FATAL_ERROR( "out of dynamic memory in xbt_graph_parse__scan_bytes()" );
2981
2982         for ( i = 0; i < _yybytes_len; ++i )
2983                 buf[i] = yybytes[i];
2984
2985         buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
2986
2987         b = xbt_graph_parse__scan_buffer(buf,n );
2988         if ( ! b )
2989                 YY_FATAL_ERROR( "bad buffer in xbt_graph_parse__scan_bytes()" );
2990
2991         /* It's okay to grow etc. this buffer, and we should throw it
2992          * away when we're done.
2993          */
2994         b->yy_is_our_buffer = 1;
2995
2996         return b;
2997 }
2998
2999     static void yy_push_state (int  new_state )
3000 {
3001         if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) )
3002                 {
3003                 yy_size_t new_size;
3004
3005                 (yy_start_stack_depth) += YY_START_STACK_INCR;
3006                 new_size = (yy_start_stack_depth) * sizeof( int );
3007
3008                 if ( ! (yy_start_stack) )
3009                         (yy_start_stack) = (int *) xbt_graph_parse_alloc(new_size  );
3010
3011                 else
3012                         (yy_start_stack) = (int *) xbt_graph_parse_realloc((void *) (yy_start_stack),new_size  );
3013
3014                 if ( ! (yy_start_stack) )
3015                         YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
3016                 }
3017
3018         (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
3019
3020         BEGIN(new_state);
3021 }
3022
3023     static void yy_pop_state  (void)
3024 {
3025         if ( --(yy_start_stack_ptr) < 0 )
3026                 YY_FATAL_ERROR( "start-condition stack underflow" );
3027
3028         BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
3029 }
3030
3031 #ifndef YY_EXIT_FAILURE
3032 #define YY_EXIT_FAILURE 2
3033 #endif
3034
3035 static void yy_fatal_error (yyconst char* msg )
3036 {
3037         (void) fprintf( stderr, "%s\n", msg );
3038         exit( YY_EXIT_FAILURE );
3039 }
3040
3041 /* Redefine yyless() so it works in section 3 code. */
3042
3043 #undef yyless
3044 #define yyless(n) \
3045         do \
3046                 { \
3047                 /* Undo effects of setting up xbt_graph_parse_text. */ \
3048         int yyless_macro_arg = (n); \
3049         YY_LESS_LINENO(yyless_macro_arg);\
3050                 xbt_graph_parse_text[xbt_graph_parse_leng] = (yy_hold_char); \
3051                 (yy_c_buf_p) = xbt_graph_parse_text + yyless_macro_arg; \
3052                 (yy_hold_char) = *(yy_c_buf_p); \
3053                 *(yy_c_buf_p) = '\0'; \
3054                 xbt_graph_parse_leng = yyless_macro_arg; \
3055                 } \
3056         while ( 0 )
3057
3058 /* Accessor  methods (get/set functions) to struct members. */
3059
3060 /** Get the current line number.
3061  * 
3062  */
3063 int xbt_graph_parse_get_lineno  (void)
3064 {
3065         
3066     return xbt_graph_parse_lineno;
3067 }
3068
3069 /** Get the input stream.
3070  * 
3071  */
3072 FILE *xbt_graph_parse_get_in  (void)
3073 {
3074         return xbt_graph_parse_in;
3075 }
3076
3077 /** Get the output stream.
3078  * 
3079  */
3080 FILE *xbt_graph_parse_get_out  (void)
3081 {
3082         return xbt_graph_parse_out;
3083 }
3084
3085 /** Get the length of the current token.
3086  * 
3087  */
3088 int xbt_graph_parse_get_leng  (void)
3089 {
3090         return xbt_graph_parse_leng;
3091 }
3092
3093 /** Get the current token.
3094  * 
3095  */
3096
3097 char *xbt_graph_parse_get_text  (void)
3098 {
3099         return xbt_graph_parse_text;
3100 }
3101
3102 /** Set the current line number.
3103  * @param line_number
3104  * 
3105  */
3106 void xbt_graph_parse_set_lineno (int  line_number )
3107 {
3108     
3109     xbt_graph_parse_lineno = line_number;
3110 }
3111
3112 /** Set the input stream. This does not discard the current
3113  * input buffer.
3114  * @param in_str A readable stream.
3115  * 
3116  * @see xbt_graph_parse__switch_to_buffer
3117  */
3118 void xbt_graph_parse_set_in (FILE *  in_str )
3119 {
3120         xbt_graph_parse_in = in_str ;
3121 }
3122
3123 void xbt_graph_parse_set_out (FILE *  out_str )
3124 {
3125         xbt_graph_parse_out = out_str ;
3126 }
3127
3128 int xbt_graph_parse_get_debug  (void)
3129 {
3130         return xbt_graph_parse__flex_debug;
3131 }
3132
3133 void xbt_graph_parse_set_debug (int  bdebug )
3134 {
3135         xbt_graph_parse__flex_debug = bdebug ;
3136 }
3137
3138 static int yy_init_globals (void)
3139 {
3140         /* Initialization is the same as for the non-reentrant scanner.
3141      * This function is called from xbt_graph_parse_lex_destroy(), so don't allocate here.
3142      */
3143
3144     /* We do not touch xbt_graph_parse_lineno unless the option is enabled. */
3145     xbt_graph_parse_lineno =  1;
3146     
3147     (yy_buffer_stack) = 0;
3148     (yy_buffer_stack_top) = 0;
3149     (yy_buffer_stack_max) = 0;
3150     (yy_c_buf_p) = (char *) 0;
3151     (yy_init) = 0;
3152     (yy_start) = 0;
3153
3154     (yy_start_stack_ptr) = 0;
3155     (yy_start_stack_depth) = 0;
3156     (yy_start_stack) =  NULL;
3157
3158 /* Defined in main.c */
3159 #ifdef YY_STDINIT
3160     xbt_graph_parse_in = stdin;
3161     xbt_graph_parse_out = stdout;
3162 #else
3163     xbt_graph_parse_in = (FILE *) 0;
3164     xbt_graph_parse_out = (FILE *) 0;
3165 #endif
3166
3167     /* For future reference: Set errno on error, since we are called by
3168      * xbt_graph_parse_lex_init()
3169      */
3170     return 0;
3171 }
3172
3173 /* xbt_graph_parse_lex_destroy is for both reentrant and non-reentrant scanners. */
3174 int xbt_graph_parse_lex_destroy  (void)
3175 {
3176     
3177     /* Pop the buffer stack, destroying each element. */
3178         while(YY_CURRENT_BUFFER){
3179                 xbt_graph_parse__delete_buffer(YY_CURRENT_BUFFER  );
3180                 YY_CURRENT_BUFFER_LVALUE = NULL;
3181                 xbt_graph_parse_pop_buffer_state();
3182         }
3183
3184         /* Destroy the stack itself. */
3185         xbt_graph_parse_free((yy_buffer_stack) );
3186         (yy_buffer_stack) = NULL;
3187
3188     /* Destroy the start condition stack. */
3189         xbt_graph_parse_free((yy_start_stack)  );
3190         (yy_start_stack) = NULL;
3191
3192     /* Reset the globals. This is important in a non-reentrant scanner so the next time
3193      * xbt_graph_parse_lex() is called, initialization will occur. */
3194     yy_init_globals( );
3195
3196     return 0;
3197 }
3198
3199 /*
3200  * Internal utility routines.
3201  */
3202
3203 #ifndef yytext_ptr
3204 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
3205 {
3206         register int i;
3207         for ( i = 0; i < n; ++i )
3208                 s1[i] = s2[i];
3209 }
3210 #endif
3211
3212 #ifdef YY_NEED_STRLEN
3213 static int yy_flex_strlen (yyconst char * s )
3214 {
3215         register int n;
3216         for ( n = 0; s[n]; ++n )
3217                 ;
3218
3219         return n;
3220 }
3221 #endif
3222
3223 void *xbt_graph_parse_alloc (yy_size_t  size )
3224 {
3225         return (void *) malloc( size );
3226 }
3227
3228 void *xbt_graph_parse_realloc  (void * ptr, yy_size_t  size )
3229 {
3230         /* The cast to (char *) in the following accommodates both
3231          * implementations that use char* generic pointers, and those
3232          * that use void* generic pointers.  It works with the latter
3233          * because both ANSI C and C++ allow castless assignment from
3234          * any pointer type to void*, and deal with argument conversions
3235          * as though doing an assignment.
3236          */
3237         return (void *) realloc( (char *) ptr, size );
3238 }
3239
3240 void xbt_graph_parse_free (void * ptr )
3241 {
3242         free( (char *) ptr );   /* see xbt_graph_parse_realloc() for (char *) cast */
3243 }
3244
3245 #define YYTABLES_NAME "yytables"
3246
3247 /* Element context stack lookup. */
3248 int graphxml_element_context(int i)
3249 {
3250   return (0<i && i<yy_start_stack_depth
3251           ? yy_start_stack[yy_start_stack_ptr - i]
3252           : 0);
3253 }
3254
3255 #ifdef FLEX_DEBUG
3256 void print_yy_stack(char* fmt, ...)
3257 {
3258   int i = 0; va_list ap; va_start(ap, fmt);
3259   vfprintf(stderr, fmt, ap);
3260   if (graphxml_statenames) {
3261       for (i=1; i<yy_start_stack_ptr; i++) {
3262           fprintf(stderr, "%s/", graphxml_statenames[yy_start_stack[i] ]);
3263       }
3264       fprintf(stderr,"%s\n", graphxml_statenames[YY_START]);
3265   }
3266   va_end(ap);
3267 }
3268
3269 void print_graphxml_bufferstack()
3270 {
3271     int i;
3272     fputs("Buffer: ", stderr);
3273     for (i = 0; i < blimit; i++) {
3274        if ( graphxml_bufferstack[i] == '\377' ) break;
3275          putc(graphxml_bufferstack[i], stderr);
3276     }
3277     putc('\n', stderr);
3278 }
3279
3280 static void debug_enter(int state, const char* statename) {
3281   yy_push_state(state);
3282   if (xbt_graph_parse__flex_debug) {
3283        print_yy_stack("--ENTER(%s) : ",statename);
3284        print_graphxml_bufferstack();
3285   }
3286 }
3287
3288 static void debug_leave(void) {
3289     if (xbt_graph_parse__flex_debug) {
3290         print_yy_stack("--LEAVE : ");
3291         print_graphxml_bufferstack();
3292     }
3293   yy_pop_state();
3294 }
3295
3296 static void debug_set(int state, const char* statename) {
3297   BEGIN(state);
3298   if (xbt_graph_parse__flex_debug) print_yy_stack("--SET(%s) : ",statename);
3299 }
3300 #endif
3301
3302 static void cleanup(void)
3303 {
3304     if (graphxml_statenames) {
3305         free(graphxml_statenames);
3306         graphxml_statenames = NULL;
3307     }
3308     free(graphxml_bufferstack);
3309     graphxml_bufferstack = NULL;
3310
3311     free(indexstack);
3312     indexstack = NULL;
3313 }
3314
3315 static int fail(const char* fmt, ...)
3316 {
3317     int chars_left, used;
3318     va_list ap; va_start(ap, fmt);
3319 #ifdef FLEXML_yylineno
3320     used = sprintf(flexml_err_msg,
3321                    "Invalid XML (XML input line %d, state %d): ",
3322                    xbt_graph_parse_lineno, YY_START);
3323 #else
3324     used = sprintf(flexml_err_msg,
3325                    "Invalid XML (state %d): ",
3326                    YY_START);
3327 #endif
3328     chars_left = flexml_max_err_msg_size - used - 1;
3329     vsnprintf(flexml_err_msg + used, chars_left, fmt, ap);
3330     va_end(ap);
3331
3332 #ifndef FLEXML_quiet_parser
3333     /* print directly to sdterr */
3334     fprintf(stderr, "%s\n", flexml_err_msg);
3335     flexml_err_msg[0] = '\0';
3336 #endif
3337
3338     cleanup();
3339
3340     return 1;
3341 }
3342