Branch data Line data Source code
1 : : #line 2 "scan_netlist.cpp"
2 : :
3 : : #line 4 "scan_netlist.cpp"
4 : :
5 : : #define YY_INT_ALIGNED short int
6 : :
7 : : /* A lexical scanner generated by flex */
8 : :
9 : : #define yy_create_buffer netlist__create_buffer
10 : : #define yy_delete_buffer netlist__delete_buffer
11 : : #define yy_flex_debug netlist__flex_debug
12 : : #define yy_init_buffer netlist__init_buffer
13 : : #define yy_flush_buffer netlist__flush_buffer
14 : : #define yy_load_buffer_state netlist__load_buffer_state
15 : : #define yy_switch_to_buffer netlist__switch_to_buffer
16 : : #define yyin netlist_in
17 : : #define yyleng netlist_leng
18 : : #define yylex netlist_lex
19 : : #define yylineno netlist_lineno
20 : : #define yyout netlist_out
21 : : #define yyrestart netlist_restart
22 : : #define yytext netlist_text
23 : : #define yywrap netlist_wrap
24 : : #define yyalloc netlist_alloc
25 : : #define yyrealloc netlist_realloc
26 : : #define yyfree netlist_free
27 : :
28 : : #define FLEX_SCANNER
29 : : #define YY_FLEX_MAJOR_VERSION 2
30 : : #define YY_FLEX_MINOR_VERSION 5
31 : : #define YY_FLEX_SUBMINOR_VERSION 37
32 : : #if YY_FLEX_SUBMINOR_VERSION > 0
33 : : #define FLEX_BETA
34 : : #endif
35 : :
36 : : /* First, we deal with platform-specific or compiler-specific issues. */
37 : :
38 : : /* begin standard C headers. */
39 : : #include <stdio.h>
40 : : #include <string.h>
41 : : #include <errno.h>
42 : : #include <stdlib.h>
43 : :
44 : : /* end standard C headers. */
45 : :
46 : : /* flex integer type definitions */
47 : :
48 : : #ifndef FLEXINT_H
49 : : #define FLEXINT_H
50 : :
51 : : /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
52 : :
53 : : #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
54 : :
55 : : /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
56 : : * if you want the limit (max/min) macros for int types.
57 : : */
58 : : #ifndef __STDC_LIMIT_MACROS
59 : : #define __STDC_LIMIT_MACROS 1
60 : : #endif
61 : :
62 : : #include <inttypes.h>
63 : : typedef int8_t flex_int8_t;
64 : : typedef uint8_t flex_uint8_t;
65 : : typedef int16_t flex_int16_t;
66 : : typedef uint16_t flex_uint16_t;
67 : : typedef int32_t flex_int32_t;
68 : : typedef uint32_t flex_uint32_t;
69 : : #else
70 : : typedef signed char flex_int8_t;
71 : : typedef short int flex_int16_t;
72 : : typedef int flex_int32_t;
73 : : typedef unsigned char flex_uint8_t;
74 : : typedef unsigned short int flex_uint16_t;
75 : : typedef unsigned int flex_uint32_t;
76 : :
77 : : /* Limits of integral types. */
78 : : #ifndef INT8_MIN
79 : : #define INT8_MIN (-128)
80 : : #endif
81 : : #ifndef INT16_MIN
82 : : #define INT16_MIN (-32767-1)
83 : : #endif
84 : : #ifndef INT32_MIN
85 : : #define INT32_MIN (-2147483647-1)
86 : : #endif
87 : : #ifndef INT8_MAX
88 : : #define INT8_MAX (127)
89 : : #endif
90 : : #ifndef INT16_MAX
91 : : #define INT16_MAX (32767)
92 : : #endif
93 : : #ifndef INT32_MAX
94 : : #define INT32_MAX (2147483647)
95 : : #endif
96 : : #ifndef UINT8_MAX
97 : : #define UINT8_MAX (255U)
98 : : #endif
99 : : #ifndef UINT16_MAX
100 : : #define UINT16_MAX (65535U)
101 : : #endif
102 : : #ifndef UINT32_MAX
103 : : #define UINT32_MAX (4294967295U)
104 : : #endif
105 : :
106 : : #endif /* ! C99 */
107 : :
108 : : #endif /* ! FLEXINT_H */
109 : :
110 : : #ifdef __cplusplus
111 : :
112 : : /* The "const" storage-class-modifier is valid. */
113 : : #define YY_USE_CONST
114 : :
115 : : #else /* ! __cplusplus */
116 : :
117 : : /* C99 requires __STDC__ to be defined as 1. */
118 : : #if defined (__STDC__)
119 : :
120 : : #define YY_USE_CONST
121 : :
122 : : #endif /* defined (__STDC__) */
123 : : #endif /* ! __cplusplus */
124 : :
125 : : #ifdef YY_USE_CONST
126 : : #define yyconst const
127 : : #else
128 : : #define yyconst
129 : : #endif
130 : :
131 : : /* Returned upon end-of-file. */
132 : : #define YY_NULL 0
133 : :
134 : : /* Promotes a possibly negative, possibly signed char to an unsigned
135 : : * integer for use as an array index. If the signed char is negative,
136 : : * we want to instead treat it as an 8-bit unsigned char, hence the
137 : : * double cast.
138 : : */
139 : : #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
140 : :
141 : : /* Enter a start condition. This macro really ought to take a parameter,
142 : : * but we do it the disgusting crufty way forced on us by the ()-less
143 : : * definition of BEGIN.
144 : : */
145 : : #define BEGIN (yy_start) = 1 + 2 *
146 : :
147 : : /* Translate the current start state into a value that can be later handed
148 : : * to BEGIN to return to the state. The YYSTATE alias is for lex
149 : : * compatibility.
150 : : */
151 : : #define YY_START (((yy_start) - 1) / 2)
152 : : #define YYSTATE YY_START
153 : :
154 : : /* Action number for EOF rule of a given start state. */
155 : : #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
156 : :
157 : : /* Special action meaning "start processing a new file". */
158 : : #define YY_NEW_FILE netlist_restart(netlist_in )
159 : :
160 : : #define YY_END_OF_BUFFER_CHAR 0
161 : :
162 : : /* Size of default input buffer. */
163 : : #ifndef YY_BUF_SIZE
164 : : #define YY_BUF_SIZE 16384
165 : : #endif
166 : :
167 : : /* The state buf must be large enough to hold one state per character in the main buffer.
168 : : */
169 : : #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
170 : :
171 : : #ifndef YY_TYPEDEF_YY_BUFFER_STATE
172 : : #define YY_TYPEDEF_YY_BUFFER_STATE
173 : : typedef struct yy_buffer_state *YY_BUFFER_STATE;
174 : : #endif
175 : :
176 : : #ifndef YY_TYPEDEF_YY_SIZE_T
177 : : #define YY_TYPEDEF_YY_SIZE_T
178 : : typedef size_t yy_size_t;
179 : : #endif
180 : :
181 : : extern yy_size_t netlist_leng;
182 : :
183 : : extern FILE *netlist_in, *netlist_out;
184 : :
185 : : #define EOB_ACT_CONTINUE_SCAN 0
186 : : #define EOB_ACT_END_OF_FILE 1
187 : : #define EOB_ACT_LAST_MATCH 2
188 : :
189 : : /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
190 : : * access to the local variable yy_act. Since yyless() is a macro, it would break
191 : : * existing scanners that call yyless() from OUTSIDE netlist_lex.
192 : : * One obvious solution it to make yy_act a global. I tried that, and saw
193 : : * a 5% performance hit in a non-netlist_lineno scanner, because yy_act is
194 : : * normally declared as a register variable-- so it is not worth it.
195 : : */
196 : : #define YY_LESS_LINENO(n) \
197 : : do { \
198 : : int yyl;\
199 : : for ( yyl = n; yyl < netlist_leng; ++yyl )\
200 : : if ( netlist_text[yyl] == '\n' )\
201 : : --netlist_lineno;\
202 : : }while(0)
203 : :
204 : : /* Return all but the first "n" matched characters back to the input stream. */
205 : : #define yyless(n) \
206 : : do \
207 : : { \
208 : : /* Undo effects of setting up netlist_text. */ \
209 : : int yyless_macro_arg = (n); \
210 : : YY_LESS_LINENO(yyless_macro_arg);\
211 : : *yy_cp = (yy_hold_char); \
212 : : YY_RESTORE_YY_MORE_OFFSET \
213 : : (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
214 : : YY_DO_BEFORE_ACTION; /* set up netlist_text again */ \
215 : : } \
216 : : while ( 0 )
217 : :
218 : : #define unput(c) yyunput( c, (yytext_ptr) )
219 : :
220 : : #ifndef YY_STRUCT_YY_BUFFER_STATE
221 : : #define YY_STRUCT_YY_BUFFER_STATE
222 : : struct yy_buffer_state
223 : : {
224 : : FILE *yy_input_file;
225 : :
226 : : char *yy_ch_buf; /* input buffer */
227 : : char *yy_buf_pos; /* current position in input buffer */
228 : :
229 : : /* Size of input buffer in bytes, not including room for EOB
230 : : * characters.
231 : : */
232 : : yy_size_t yy_buf_size;
233 : :
234 : : /* Number of characters read into yy_ch_buf, not including EOB
235 : : * characters.
236 : : */
237 : : yy_size_t yy_n_chars;
238 : :
239 : : /* Whether we "own" the buffer - i.e., we know we created it,
240 : : * and can realloc() it to grow it, and should free() it to
241 : : * delete it.
242 : : */
243 : : int yy_is_our_buffer;
244 : :
245 : : /* Whether this is an "interactive" input source; if so, and
246 : : * if we're using stdio for input, then we want to use getc()
247 : : * instead of fread(), to make sure we stop fetching input after
248 : : * each newline.
249 : : */
250 : : int yy_is_interactive;
251 : :
252 : : /* Whether we're considered to be at the beginning of a line.
253 : : * If so, '^' rules will be active on the next match, otherwise
254 : : * not.
255 : : */
256 : : int yy_at_bol;
257 : :
258 : : int yy_bs_lineno; /**< The line count. */
259 : : int yy_bs_column; /**< The column count. */
260 : :
261 : : /* Whether to try to fill the input buffer when we reach the
262 : : * end of it.
263 : : */
264 : : int yy_fill_buffer;
265 : :
266 : : int yy_buffer_status;
267 : :
268 : : #define YY_BUFFER_NEW 0
269 : : #define YY_BUFFER_NORMAL 1
270 : : /* When an EOF's been seen but there's still some text to process
271 : : * then we mark the buffer as YY_EOF_PENDING, to indicate that we
272 : : * shouldn't try reading from the input source any more. We might
273 : : * still have a bunch of tokens to match, though, because of
274 : : * possible backing-up.
275 : : *
276 : : * When we actually see the EOF, we change the status to "new"
277 : : * (via netlist_restart()), so that the user can continue scanning by
278 : : * just pointing netlist_in at a new input file.
279 : : */
280 : : #define YY_BUFFER_EOF_PENDING 2
281 : :
282 : : };
283 : : #endif /* !YY_STRUCT_YY_BUFFER_STATE */
284 : :
285 : : /* Stack of input buffers. */
286 : : static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
287 : : static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
288 : : static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
289 : :
290 : : /* We provide macros for accessing buffer states in case in the
291 : : * future we want to put the buffer states in a more general
292 : : * "scanner state".
293 : : *
294 : : * Returns the top of the stack, or NULL.
295 : : */
296 : : #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
297 : : ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
298 : : : NULL)
299 : :
300 : : /* Same as previous macro, but useful when we know that the buffer stack is not
301 : : * NULL or when we need an lvalue. For internal use only.
302 : : */
303 : : #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
304 : :
305 : : /* yy_hold_char holds the character lost when netlist_text is formed. */
306 : : static char yy_hold_char;
307 : : static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
308 : : yy_size_t netlist_leng;
309 : :
310 : : /* Points to current character in buffer. */
311 : : static char *yy_c_buf_p = (char *) 0;
312 : : static int yy_init = 0; /* whether we need to initialize */
313 : : static int yy_start = 0; /* start state number */
314 : :
315 : : /* Flag which is used to allow netlist_wrap()'s to do buffer switches
316 : : * instead of setting up a fresh netlist_in. A bit of a hack ...
317 : : */
318 : : static int yy_did_buffer_switch_on_eof;
319 : :
320 : : void netlist_restart (FILE *input_file );
321 : : void netlist__switch_to_buffer (YY_BUFFER_STATE new_buffer );
322 : : YY_BUFFER_STATE netlist__create_buffer (FILE *file,int size );
323 : : void netlist__delete_buffer (YY_BUFFER_STATE b );
324 : : void netlist__flush_buffer (YY_BUFFER_STATE b );
325 : : void netlist_push_buffer_state (YY_BUFFER_STATE new_buffer );
326 : : void netlist_pop_buffer_state (void );
327 : :
328 : : static void netlist_ensure_buffer_stack (void );
329 : : static void netlist__load_buffer_state (void );
330 : : static void netlist__init_buffer (YY_BUFFER_STATE b,FILE *file );
331 : :
332 : : #define YY_FLUSH_BUFFER netlist__flush_buffer(YY_CURRENT_BUFFER )
333 : :
334 : : YY_BUFFER_STATE netlist__scan_buffer (char *base,yy_size_t size );
335 : : YY_BUFFER_STATE netlist__scan_string (yyconst char *yy_str );
336 : : YY_BUFFER_STATE netlist__scan_bytes (yyconst char *bytes,yy_size_t len );
337 : :
338 : : void *netlist_alloc (yy_size_t );
339 : : void *netlist_realloc (void *,yy_size_t );
340 : : void netlist_free (void * );
341 : :
342 : : #define yy_new_buffer netlist__create_buffer
343 : :
344 : : #define yy_set_interactive(is_interactive) \
345 : : { \
346 : : if ( ! YY_CURRENT_BUFFER ){ \
347 : : netlist_ensure_buffer_stack (); \
348 : : YY_CURRENT_BUFFER_LVALUE = \
349 : : netlist__create_buffer(netlist_in,YY_BUF_SIZE ); \
350 : : } \
351 : : YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
352 : : }
353 : :
354 : : #define yy_set_bol(at_bol) \
355 : : { \
356 : : if ( ! YY_CURRENT_BUFFER ){\
357 : : netlist_ensure_buffer_stack (); \
358 : : YY_CURRENT_BUFFER_LVALUE = \
359 : : netlist__create_buffer(netlist_in,YY_BUF_SIZE ); \
360 : : } \
361 : : YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
362 : : }
363 : :
364 : : #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
365 : :
366 : : /* Begin user sect3 */
367 : :
368 : : #define netlist_wrap() 1
369 : : #define YY_SKIP_YYWRAP
370 : :
371 : : typedef unsigned char YY_CHAR;
372 : :
373 : : FILE *netlist_in = (FILE *) 0, *netlist_out = (FILE *) 0;
374 : :
375 : : typedef int yy_state_type;
376 : :
377 : : extern int netlist_lineno;
378 : :
379 : : int netlist_lineno = 1;
380 : :
381 : : extern char *netlist_text;
382 : : #define yytext_ptr netlist_text
383 : :
384 : : static yy_state_type yy_get_previous_state (void );
385 : : static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
386 : : static int yy_get_next_buffer (void );
387 : : static void yy_fatal_error (yyconst char msg[] );
388 : :
389 : : /* Done after the current pattern has been matched and before the
390 : : * corresponding action - sets up netlist_text.
391 : : */
392 : : #define YY_DO_BEFORE_ACTION \
393 : : (yytext_ptr) = yy_bp; \
394 : : netlist_leng = (size_t) (yy_cp - yy_bp); \
395 : : (yy_hold_char) = *yy_cp; \
396 : : *yy_cp = '\0'; \
397 : : (yy_c_buf_p) = yy_cp;
398 : :
399 : : #define YY_NUM_RULES 47
400 : : #define YY_END_OF_BUFFER 48
401 : : /* This struct is not used in this scanner,
402 : : but its presence is necessary. */
403 : : struct yy_trans_info
404 : : {
405 : : flex_int32_t yy_verify;
406 : : flex_int32_t yy_nxt;
407 : : };
408 : : static yyconst flex_int16_t yy_accept[238] =
409 : : { 0,
410 : : 0, 0, 0, 0, 0, 0, 0, 0, 48, 22,
411 : : 19, 18, 22, 21, 20, 22, 15, 8, 16, 14,
412 : : 17, 1, 5, 1, 1, 1, 5, 12, 22, 13,
413 : : 5, 1, 5, 5, 1, 5, 22, 23, 24, 23,
414 : : 28, 27, 26, 28, 25, 28, 28, 8, 14, 1,
415 : : 5, 1, 1, 5, 12, 13, 5, 1, 5, 5,
416 : : 1, 5, 28, 46, 19, 45, 46, 38, 29, 46,
417 : : 46, 29, 46, 40, 39, 36, 46, 37, 42, 46,
418 : : 41, 46, 18, 0, 8, 9, 0, 8, 0, 0,
419 : : 0, 10, 0, 6, 0, 5, 0, 1, 1, 5,
420 : :
421 : : 5, 1, 5, 19, 0, 1, 1, 0, 5, 5,
422 : : 1, 0, 24, 26, 0, 5, 1, 1, 5, 1,
423 : : 5, 1, 1, 0, 5, 5, 1, 45, 32, 34,
424 : : 0, 44, 40, 40, 0, 40, 40, 40, 0, 0,
425 : : 31, 33, 30, 0, 42, 41, 0, 41, 41, 42,
426 : : 35, 0, 9, 0, 0, 0, 8, 0, 10, 5,
427 : : 11, 5, 2, 1, 1, 5, 5, 7, 5, 5,
428 : : 1, 1, 5, 5, 0, 43, 40, 0, 0, 40,
429 : : 40, 42, 41, 0, 41, 41, 42, 41, 9, 0,
430 : : 0, 8, 0, 10, 0, 5, 0, 5, 5, 5,
431 : :
432 : : 0, 40, 40, 41, 41, 41, 42, 42, 0, 41,
433 : : 41, 0, 9, 0, 3, 0, 0, 10, 0, 5,
434 : : 5, 41, 0, 41, 41, 41, 9, 0, 0, 0,
435 : : 10, 41, 41, 41, 0, 4, 0
436 : : } ;
437 : :
438 : : static yyconst flex_int32_t yy_ec[256] =
439 : : { 0,
440 : : 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
441 : : 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
442 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
443 : : 1, 5, 6, 7, 8, 1, 9, 10, 11, 9,
444 : : 9, 9, 12, 13, 12, 14, 9, 15, 15, 15,
445 : : 15, 15, 15, 15, 15, 15, 15, 16, 17, 18,
446 : : 19, 20, 9, 1, 21, 22, 23, 24, 25, 26,
447 : : 27, 28, 23, 23, 29, 23, 30, 23, 31, 32,
448 : : 23, 23, 33, 34, 23, 35, 36, 23, 23, 23,
449 : : 37, 38, 39, 9, 23, 1, 40, 23, 23, 41,
450 : :
451 : : 42, 43, 23, 44, 45, 46, 47, 48, 49, 50,
452 : : 23, 51, 52, 23, 53, 54, 55, 23, 23, 23,
453 : : 56, 57, 58, 59, 60, 1, 1, 1, 1, 1,
454 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
455 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
456 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
457 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
458 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
459 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
460 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
461 : :
462 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
463 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
464 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
465 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
466 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
467 : : 1, 1, 1, 1, 1
468 : : } ;
469 : :
470 : : static yyconst flex_int32_t yy_meta[61] =
471 : : { 0,
472 : : 1, 2, 3, 3, 4, 5, 1, 1, 1, 1,
473 : : 1, 1, 1, 6, 7, 1, 1, 1, 8, 1,
474 : : 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
475 : : 7, 7, 7, 7, 7, 7, 1, 1, 1, 7,
476 : : 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
477 : : 7, 7, 7, 7, 7, 7, 7, 1, 1, 9
478 : : } ;
479 : :
480 : : static yyconst flex_int16_t yy_base[249] =
481 : : { 0,
482 : : 0, 0, 58, 60, 64, 0, 124, 0, 717, 856,
483 : : 856, 856, 710, 856, 856, 171, 185, 177, 856, 856,
484 : : 856, 191, 193, 222, 652, 228, 254, 856, 200, 856,
485 : : 264, 154, 274, 285, 166, 300, 0, 856, 856, 700,
486 : : 856, 856, 856, 699, 856, 199, 686, 297, 856, 682,
487 : : 681, 330, 174, 218, 856, 856, 207, 637, 211, 223,
488 : : 190, 226, 0, 856, 856, 856, 685, 668, 856, 672,
489 : : 670, 856, 659, 382, 856, 653, 652, 646, 311, 260,
490 : : 436, 602, 856, 636, 303, 267, 305, 308, 604, 249,
491 : : 234, 282, 333, 856, 0, 362, 0, 372, 387, 434,
492 : :
493 : : 440, 487, 493, 856, 635, 282, 503, 618, 509, 357,
494 : : 388, 558, 856, 856, 0, 598, 597, 251, 240, 596,
495 : : 278, 277, 580, 571, 442, 307, 571, 856, 856, 856,
496 : : 568, 856, 488, 373, 563, 0, 345, 856, 536, 358,
497 : : 856, 856, 856, 0, 524, 550, 539, 369, 530, 531,
498 : : 856, 526, 506, 405, 496, 510, 525, 503, 532, 554,
499 : : 856, 547, 573, 452, 436, 602, 594, 856, 468, 287,
500 : : 0, 0, 588, 450, 464, 856, 406, 437, 458, 445,
501 : : 291, 562, 856, 436, 643, 620, 635, 650, 385, 457,
502 : : 432, 614, 626, 485, 459, 695, 428, 664, 482, 420,
503 : :
504 : : 413, 411, 856, 320, 706, 710, 714, 725, 404, 466,
505 : : 729, 504, 393, 651, 558, 580, 389, 380, 375, 736,
506 : : 551, 856, 370, 599, 740, 661, 365, 618, 312, 332,
507 : : 288, 262, 744, 257, 211, 856, 856, 795, 803, 811,
508 : : 814, 821, 829, 213, 837, 194, 846, 187
509 : : } ;
510 : :
511 : : static yyconst flex_int16_t yy_def[249] =
512 : : { 0,
513 : : 237, 1, 238, 238, 237, 5, 237, 7, 237, 237,
514 : : 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
515 : : 237, 239, 239, 239, 24, 239, 239, 237, 237, 237,
516 : : 239, 24, 239, 239, 24, 239, 240, 237, 237, 237,
517 : : 237, 237, 237, 237, 237, 237, 237, 237, 237, 241,
518 : : 241, 241, 241, 241, 237, 237, 241, 52, 241, 241,
519 : : 52, 241, 240, 237, 237, 237, 237, 237, 237, 237,
520 : : 242, 237, 237, 237, 237, 237, 237, 237, 243, 237,
521 : : 243, 237, 237, 237, 237, 237, 237, 237, 237, 237,
522 : : 237, 237, 237, 237, 244, 239, 245, 239, 239, 239,
523 : :
524 : : 239, 239, 239, 237, 237, 24, 239, 244, 239, 109,
525 : : 109, 240, 237, 237, 246, 241, 241, 241, 241, 241,
526 : : 241, 52, 241, 246, 241, 241, 241, 237, 237, 237,
527 : : 247, 237, 74, 133, 237, 74, 237, 237, 237, 237,
528 : : 237, 237, 237, 248, 243, 237, 248, 81, 243, 243,
529 : : 237, 237, 237, 237, 237, 237, 237, 237, 237, 244,
530 : : 237, 109, 109, 24, 24, 244, 109, 237, 246, 241,
531 : : 52, 52, 246, 241, 247, 237, 237, 237, 237, 134,
532 : : 237, 248, 237, 237, 248, 243, 243, 243, 237, 237,
533 : : 237, 237, 237, 237, 237, 244, 237, 109, 246, 241,
534 : :
535 : : 237, 134, 237, 237, 248, 248, 248, 248, 237, 81,
536 : : 243, 237, 237, 237, 237, 237, 237, 237, 237, 244,
537 : : 246, 237, 237, 185, 248, 146, 237, 237, 237, 237,
538 : : 237, 226, 248, 226, 237, 237, 0, 237, 237, 237,
539 : : 237, 237, 237, 237, 237, 237, 237, 237
540 : : } ;
541 : :
542 : : static yyconst flex_int16_t yy_nxt[917] =
543 : : { 0,
544 : : 10, 11, 12, 13, 11, 10, 14, 15, 10, 10,
545 : : 10, 16, 10, 17, 18, 19, 20, 10, 21, 10,
546 : : 22, 23, 23, 23, 24, 22, 25, 26, 22, 25,
547 : : 27, 25, 22, 25, 22, 22, 28, 29, 30, 25,
548 : : 31, 23, 32, 23, 33, 34, 25, 23, 35, 25,
549 : : 25, 23, 22, 23, 25, 36, 23, 37, 10, 10,
550 : : 39, 40, 39, 40, 41, 42, 43, 44, 42, 41,
551 : : 45, 41, 41, 41, 41, 46, 41, 47, 48, 41,
552 : : 49, 41, 41, 41, 50, 51, 51, 51, 52, 50,
553 : : 52, 53, 50, 52, 54, 52, 50, 52, 50, 50,
554 : :
555 : : 55, 41, 56, 52, 57, 51, 58, 51, 59, 60,
556 : : 52, 51, 61, 52, 52, 51, 50, 51, 52, 62,
557 : : 51, 63, 41, 41, 64, 65, 66, 67, 65, 68,
558 : : 69, 64, 69, 70, 71, 69, 72, 73, 74, 69,
559 : : 75, 76, 77, 78, 79, 79, 79, 79, 79, 79,
560 : : 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
561 : : 69, 80, 69, 79, 79, 79, 79, 79, 81, 81,
562 : : 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
563 : : 79, 64, 82, 64, 84, 85, 87, 115, 90, 87,
564 : : 84, 85, 93, 182, 93, 93, 94, 93, 94, 88,
565 : :
566 : : 169, 91, 104, 105, 95, 96, 95, 107, 89, 97,
567 : : 110, 97, 84, 85, 111, 86, 86, 96, 91, 160,
568 : : 115, 92, 92, 93, 124, 125, 93, 94, 122, 93,
569 : : 120, 115, 93, 94, 126, 95, 124, 125, 127, 115,
570 : : 97, 95, 98, 86, 86, 156, 97, 98, 157, 99,
571 : : 98, 236, 100, 115, 98, 93, 98, 98, 93, 94,
572 : : 123, 121, 104, 105, 115, 93, 123, 95, 93, 94,
573 : : 98, 237, 97, 101, 98, 93, 232, 95, 93, 94,
574 : : 152, 153, 97, 170, 102, 106, 93, 108, 109, 93,
575 : : 94, 115, 97, 92, 92, 158, 159, 103, 108, 109,
576 : :
577 : : 115, 93, 231, 97, 93, 94, 87, 117, 90, 87,
578 : : 84, 85, 93, 95, 90, 93, 84, 85, 97, 90,
579 : : 115, 91, 88, 107, 144, 171, 120, 91, 89, 97,
580 : : 164, 172, 154, 96, 93, 117, 165, 93, 91, 203,
581 : : 107, 92, 92, 115, 91, 203, 231, 92, 92, 154,
582 : : 117, 97, 92, 92, 123, 117, 179, 118, 117, 180,
583 : : 119, 235, 117, 93, 117, 117, 93, 94, 222, 179,
584 : : 95, 96, 180, 93, 222, 95, 93, 94, 117, 227,
585 : : 97, 96, 117, 134, 232, 95, 134, 237, 93, 227,
586 : : 97, 93, 94, 186, 218, 135, 136, 138, 96, 189,
587 : :
588 : : 95, 95, 96, 218, 107, 97, 137, 213, 138, 212,
589 : : 187, 138, 96, 138, 237, 138, 191, 201, 226, 192,
590 : : 202, 138, 139, 140, 138, 202, 212, 202, 138, 96,
591 : : 138, 138, 138, 115, 200, 93, 138, 146, 93, 94,
592 : : 146, 93, 213, 98, 93, 94, 192, 95, 201, 147,
593 : : 148, 202, 97, 95, 97, 124, 125, 204, 97, 180,
594 : : 149, 197, 149, 115, 200, 149, 174, 149, 197, 149,
595 : : 217, 213, 180, 218, 132, 149, 150, 162, 149, 144,
596 : : 210, 115, 149, 174, 149, 149, 149, 96, 93, 163,
597 : : 149, 93, 94, 219, 93, 115, 221, 93, 94, 194,
598 : :
599 : : 95, 237, 133, 96, 93, 97, 95, 93, 94, 216,
600 : : 93, 97, 177, 93, 94, 219, 95, 194, 227, 152,
601 : : 153, 97, 108, 109, 157, 93, 216, 97, 93, 178,
602 : : 190, 93, 93, 167, 93, 93, 90, 144, 193, 157,
603 : : 189, 102, 97, 144, 144, 158, 159, 190, 97, 97,
604 : : 167, 146, 188, 185, 146, 93, 195, 181, 93, 228,
605 : : 95, 96, 228, 93, 115, 221, 93, 95, 97, 92,
606 : : 92, 96, 97, 195, 183, 144, 183, 133, 176, 183,
607 : : 97, 183, 229, 183, 115, 173, 95, 96, 96, 183,
608 : : 184, 230, 183, 115, 231, 98, 183, 96, 183, 183,
609 : :
610 : : 183, 115, 173, 93, 183, 197, 93, 95, 198, 115,
611 : : 115, 115, 199, 224, 96, 95, 166, 168, 96, 228,
612 : : 97, 93, 228, 206, 93, 90, 196, 214, 192, 199,
613 : : 214, 209, 166, 144, 210, 96, 93, 104, 97, 93,
614 : : 182, 215, 229, 196, 146, 155, 209, 146, 144, 210,
615 : : 88, 93, 214, 97, 93, 214, 144, 185, 92, 92,
616 : : 151, 97, 234, 144, 143, 234, 215, 205, 97, 206,
617 : : 142, 141, 206, 133, 206, 226, 206, 95, 198, 237,
618 : : 132, 130, 206, 207, 208, 206, 129, 128, 96, 206,
619 : : 123, 206, 206, 206, 115, 115, 93, 206, 211, 93,
620 : :
621 : : 88, 114, 113, 96, 211, 96, 219, 93, 95, 220,
622 : : 93, 93, 83, 97, 93, 93, 237, 223, 93, 144,
623 : : 224, 237, 237, 144, 97, 237, 93, 144, 97, 93,
624 : : 93, 237, 97, 93, 237, 225, 223, 93, 144, 224,
625 : : 93, 93, 144, 97, 93, 93, 237, 97, 93, 95,
626 : : 220, 237, 237, 144, 97, 237, 237, 144, 97, 237,
627 : : 237, 237, 97, 237, 237, 237, 237, 237, 237, 237,
628 : : 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
629 : : 237, 237, 237, 237, 237, 237, 237, 237, 233, 237,
630 : : 237, 237, 237, 237, 233, 38, 38, 38, 38, 38,
631 : :
632 : : 38, 38, 38, 38, 96, 237, 96, 96, 96, 96,
633 : : 96, 112, 237, 237, 112, 112, 112, 112, 112, 116,
634 : : 116, 131, 131, 237, 131, 131, 131, 131, 131, 131,
635 : : 145, 237, 145, 237, 145, 145, 145, 161, 161, 161,
636 : : 161, 161, 161, 161, 237, 161, 175, 175, 237, 175,
637 : : 175, 175, 175, 175, 175, 9, 237, 237, 237, 237,
638 : : 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
639 : : 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
640 : : 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
641 : : 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
642 : :
643 : : 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
644 : : 237, 237, 237, 237, 237, 237
645 : : } ;
646 : :
647 : : static yyconst flex_int16_t yy_chk[917] =
648 : : { 0,
649 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
650 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
651 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
652 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
653 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
654 : : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
655 : : 3, 3, 4, 4, 5, 5, 5, 5, 5, 5,
656 : : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
657 : : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
658 : : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
659 : :
660 : : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
661 : : 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
662 : : 5, 5, 5, 5, 7, 7, 7, 7, 7, 7,
663 : : 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
664 : : 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
665 : : 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
666 : : 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
667 : : 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
668 : : 7, 7, 7, 7, 16, 16, 17, 53, 18, 17,
669 : : 18, 18, 22, 248, 23, 22, 22, 23, 23, 17,
670 : :
671 : : 246, 18, 29, 29, 22, 32, 23, 32, 17, 22,
672 : : 35, 23, 46, 46, 35, 16, 16, 35, 18, 244,
673 : : 57, 18, 18, 24, 59, 59, 24, 24, 57, 26,
674 : : 53, 54, 26, 26, 61, 24, 60, 60, 61, 62,
675 : : 24, 26, 24, 46, 46, 91, 26, 24, 91, 24,
676 : : 24, 235, 24, 119, 24, 27, 24, 24, 27, 27,
677 : : 59, 54, 80, 80, 118, 31, 62, 27, 31, 31,
678 : : 24, 234, 27, 24, 24, 33, 232, 31, 33, 33,
679 : : 86, 86, 31, 119, 26, 31, 34, 33, 33, 34,
680 : : 34, 121, 33, 90, 90, 92, 92, 27, 34, 34,
681 : :
682 : : 170, 36, 231, 34, 36, 36, 87, 118, 48, 87,
683 : : 48, 48, 79, 36, 85, 79, 85, 85, 36, 88,
684 : : 126, 48, 88, 33, 79, 122, 121, 85, 87, 79,
685 : : 106, 122, 88, 106, 93, 170, 106, 93, 48, 181,
686 : : 36, 48, 48, 52, 85, 181, 230, 85, 85, 88,
687 : : 52, 93, 88, 88, 126, 52, 137, 52, 52, 137,
688 : : 52, 229, 52, 96, 52, 52, 96, 96, 204, 140,
689 : : 110, 110, 140, 98, 204, 96, 98, 98, 52, 227,
690 : : 96, 110, 52, 74, 223, 98, 74, 134, 99, 219,
691 : : 98, 99, 99, 148, 218, 74, 74, 134, 110, 189,
692 : :
693 : : 99, 111, 111, 217, 110, 99, 74, 213, 74, 189,
694 : : 148, 74, 111, 74, 134, 74, 154, 177, 209, 154,
695 : : 177, 74, 74, 74, 74, 202, 189, 201, 74, 111,
696 : : 74, 74, 74, 200, 200, 100, 74, 81, 100, 100,
697 : : 81, 101, 197, 99, 101, 101, 191, 100, 178, 81,
698 : : 81, 178, 100, 101, 81, 125, 125, 184, 101, 180,
699 : : 81, 174, 81, 174, 174, 81, 125, 81, 190, 81,
700 : : 195, 190, 179, 195, 175, 81, 81, 100, 81, 210,
701 : : 210, 169, 81, 125, 81, 81, 81, 165, 102, 101,
702 : : 81, 102, 102, 199, 103, 199, 199, 103, 103, 194,
703 : :
704 : : 102, 133, 133, 164, 107, 102, 103, 107, 107, 194,
705 : : 109, 103, 133, 109, 109, 212, 107, 158, 212, 153,
706 : : 153, 107, 109, 109, 156, 145, 194, 109, 145, 133,
707 : : 153, 149, 150, 109, 149, 150, 157, 145, 155, 157,
708 : : 152, 103, 145, 149, 150, 159, 159, 153, 149, 150,
709 : : 109, 146, 150, 147, 146, 160, 159, 139, 160, 215,
710 : : 162, 162, 215, 182, 221, 221, 182, 160, 146, 157,
711 : : 157, 162, 160, 159, 146, 182, 146, 135, 131, 146,
712 : : 182, 146, 215, 146, 127, 124, 163, 163, 162, 146,
713 : : 146, 216, 146, 123, 216, 162, 146, 163, 146, 146,
714 : :
715 : : 146, 173, 173, 166, 146, 167, 166, 167, 167, 120,
716 : : 117, 116, 173, 224, 163, 166, 166, 112, 167, 228,
717 : : 166, 186, 228, 224, 186, 192, 166, 193, 192, 173,
718 : : 193, 186, 108, 186, 186, 167, 187, 105, 186, 187,
719 : : 224, 193, 228, 166, 185, 89, 187, 185, 187, 187,
720 : : 84, 188, 214, 187, 188, 214, 185, 185, 192, 192,
721 : : 82, 185, 226, 188, 78, 226, 214, 185, 188, 185,
722 : : 77, 76, 185, 73, 185, 226, 185, 198, 198, 226,
723 : : 71, 70, 185, 185, 185, 185, 68, 67, 198, 185,
724 : : 58, 185, 185, 185, 51, 50, 196, 185, 188, 196,
725 : :
726 : : 47, 44, 40, 25, 188, 198, 196, 205, 196, 196,
727 : : 205, 206, 13, 196, 206, 207, 9, 205, 207, 205,
728 : : 205, 0, 0, 206, 205, 0, 208, 207, 206, 208,
729 : : 211, 0, 207, 211, 0, 207, 208, 220, 208, 208,
730 : : 220, 225, 211, 208, 225, 233, 0, 211, 233, 220,
731 : : 220, 0, 0, 225, 220, 0, 0, 233, 225, 0,
732 : : 0, 0, 233, 0, 0, 0, 0, 0, 0, 0,
733 : : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
734 : : 0, 0, 0, 0, 0, 0, 0, 0, 225, 0,
735 : : 0, 0, 0, 0, 225, 238, 238, 238, 238, 238,
736 : :
737 : : 238, 238, 238, 238, 239, 0, 239, 239, 239, 239,
738 : : 239, 240, 0, 0, 240, 240, 240, 240, 240, 241,
739 : : 241, 242, 242, 0, 242, 242, 242, 242, 242, 242,
740 : : 243, 0, 243, 0, 243, 243, 243, 245, 245, 245,
741 : : 245, 245, 245, 245, 0, 245, 247, 247, 0, 247,
742 : : 247, 247, 247, 247, 247, 237, 237, 237, 237, 237,
743 : : 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
744 : : 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
745 : : 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
746 : : 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
747 : :
748 : : 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
749 : : 237, 237, 237, 237, 237, 237
750 : : } ;
751 : :
752 : : /* Table of booleans, true if rule could match eol. */
753 : : static yyconst flex_int32_t yy_rule_can_match_eol[48] =
754 : : { 0,
755 : : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1,
756 : : 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
757 : : 0, 0, 0, 0, 0, 1, 0, 0, };
758 : :
759 : : static yy_state_type yy_last_accepting_state;
760 : : static char *yy_last_accepting_cpos;
761 : :
762 : : extern int netlist__flex_debug;
763 : : int netlist__flex_debug = 0;
764 : :
765 : : /* The intent behind this definition is that it'll catch
766 : : * any uses of REJECT which flex missed.
767 : : */
768 : : #define REJECT reject_used_but_not_detected
769 : : #define yymore() yymore_used_but_not_detected
770 : : #define YY_MORE_ADJ 0
771 : : #define YY_RESTORE_YY_MORE_OFFSET
772 : : char *netlist_text;
773 : : #line 1 "scan_netlist.l"
774 : : /* -*-c-*- */
775 : : #line 4 "scan_netlist.l"
776 : : /*
777 : : * scan_netlist.l - scanner for the Qucs netlist
778 : : *
779 : : * Copyright (C) 2003-2009 Stefan Jahn <stefan@lkcc.org>
780 : : *
781 : : * This is free software; you can redistribute it and/or modify
782 : : * it under the terms of the GNU General Public License as published by
783 : : * the Free Software Foundation; either version 2, or (at your option)
784 : : * any later version.
785 : : *
786 : : * This software is distributed in the hope that it will be useful,
787 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
788 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
789 : : * GNU General Public License for more details.
790 : : *
791 : : * You should have received a copy of the GNU General Public License
792 : : * along with this package; see the file COPYING. If not, write to
793 : : * the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
794 : : * Boston, MA 02110-1301, USA.
795 : : *
796 : : * $Id$
797 : : *
798 : : */
799 : :
800 : : #if HAVE_CONFIG_H
801 : : # include <config.h>
802 : : #endif
803 : :
804 : : #include <stdio.h>
805 : : #include <stdlib.h>
806 : : #include <string.h>
807 : : #include <ctype.h>
808 : :
809 : : #ifdef __MINGW32__
810 : : #include <io.h>
811 : : #endif
812 : :
813 : : #ifdef HAVE_UNISTD_H
814 : : #include <unistd.h>
815 : : #endif
816 : :
817 : : #include "logging.h"
818 : : #include "equation.h"
819 : : #include "check_netlist.h"
820 : : #include "tokens_netlist.h"
821 : :
822 : : #if !HAVE_STRCHR
823 : : # define strchr index
824 : : # define strrchr rindex
825 : : #endif
826 : :
827 : : using namespace qucs;
828 : :
829 : : static double netlist_evaluate_scale (double val, char * scale) {
830 : : double factor = 1.0;
831 : : while (isspace (scale[0])) scale++;
832 : : switch (scale[0]) {
833 : : case 'E': factor = 1e+18; break;
834 : : case 'P': factor = 1e+15; break;
835 : : case 'T': factor = 1e+12; break;
836 : : case 'G': factor = 1e+09; break;
837 : : case 'M': factor = 1e+06; break;
838 : : case 'k': factor = 1e+03; break;
839 : : case 'm':
840 : : if (scale[1] == 'i' && scale[2] == 'l')
841 : : factor = 2.54e-5;
842 : : else
843 : : factor = 1e-03;
844 : : break;
845 : : case 'u': factor = 1e-06; break;
846 : : case 'n': factor = 1e-09; break;
847 : : case 'p': factor = 1e-12; break;
848 : : case 'f':
849 : : if (scale[1] == 't')
850 : : factor = 0.3048;
851 : : else
852 : : factor = 1e-15;
853 : : break;
854 : : case 'a': factor = 1e-18; break;
855 : : case 'd':
856 : : if (scale[1] == 'B') {
857 : : val = std::pow (10.0, val / 10.0);
858 : : if (scale[2] == 'm')
859 : : factor = 1e-03;
860 : : else if (scale[2] == 'u')
861 : : factor = 1e-06;
862 : : }
863 : : break;
864 : : case 'i':
865 : : if (scale[1] == 'n')
866 : : factor = 2.54e-2;
867 : : break;
868 : : case 'y':
869 : : if (scale[1] == 'd')
870 : : factor = 0.9144;
871 : : break;
872 : : }
873 : : return val * factor;
874 : : }
875 : :
876 : :
877 : : #line 878 "scan_netlist.cpp"
878 : :
879 : : #define INITIAL 0
880 : : #define COMMENT 1
881 : : #define STR 2
882 : : #define EQN 3
883 : :
884 : : #ifndef YY_EXTRA_TYPE
885 : : #define YY_EXTRA_TYPE void *
886 : : #endif
887 : :
888 : : static int yy_init_globals (void );
889 : :
890 : : /* Accessor methods to globals.
891 : : These are made visible to non-reentrant scanners for convenience. */
892 : :
893 : : int netlist_lex_destroy (void );
894 : :
895 : : int netlist_get_debug (void );
896 : :
897 : : void netlist_set_debug (int debug_flag );
898 : :
899 : : YY_EXTRA_TYPE netlist_get_extra (void );
900 : :
901 : : void netlist_set_extra (YY_EXTRA_TYPE user_defined );
902 : :
903 : : FILE *netlist_get_in (void );
904 : :
905 : : void netlist_set_in (FILE * in_str );
906 : :
907 : : FILE *netlist_get_out (void );
908 : :
909 : : void netlist_set_out (FILE * out_str );
910 : :
911 : : yy_size_t netlist_get_leng (void );
912 : :
913 : : char *netlist_get_text (void );
914 : :
915 : : int netlist_get_lineno (void );
916 : :
917 : : void netlist_set_lineno (int line_number );
918 : :
919 : : /* Macros after this point can all be overridden by user definitions in
920 : : * section 1.
921 : : */
922 : :
923 : : #ifndef YY_SKIP_YYWRAP
924 : : #ifdef __cplusplus
925 : : extern "C" int netlist_wrap (void );
926 : : #else
927 : : extern int netlist_wrap (void );
928 : : #endif
929 : : #endif
930 : :
931 : : #ifndef yytext_ptr
932 : : static void yy_flex_strncpy (char *,yyconst char *,int );
933 : : #endif
934 : :
935 : : #ifdef YY_NEED_STRLEN
936 : : static int yy_flex_strlen (yyconst char * );
937 : : #endif
938 : :
939 : : #ifndef YY_NO_INPUT
940 : :
941 : : #ifdef __cplusplus
942 : : static int yyinput (void );
943 : : #else
944 : : static int input (void );
945 : : #endif
946 : :
947 : : #endif
948 : :
949 : : /* Amount of stuff to slurp up with each read. */
950 : : #ifndef YY_READ_BUF_SIZE
951 : : #define YY_READ_BUF_SIZE 8192
952 : : #endif
953 : :
954 : : /* Copy whatever the last rule matched to the standard output. */
955 : : #ifndef ECHO
956 : : /* This used to be an fputs(), but since the string might contain NUL's,
957 : : * we now use fwrite().
958 : : */
959 : : #define ECHO do { if (fwrite( netlist_text, netlist_leng, 1, netlist_out )) {} } while (0)
960 : : #endif
961 : :
962 : : /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
963 : : * is returned in "result".
964 : : */
965 : : #ifndef YY_INPUT
966 : : #define YY_INPUT(buf,result,max_size) \
967 : : if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
968 : : { \
969 : : int c = '*'; \
970 : : size_t n; \
971 : : for ( n = 0; n < max_size && \
972 : : (c = getc( netlist_in )) != EOF && c != '\n'; ++n ) \
973 : : buf[n] = (char) c; \
974 : : if ( c == '\n' ) \
975 : : buf[n++] = (char) c; \
976 : : if ( c == EOF && ferror( netlist_in ) ) \
977 : : YY_FATAL_ERROR( "input in flex scanner failed" ); \
978 : : result = n; \
979 : : } \
980 : : else \
981 : : { \
982 : : errno=0; \
983 : : while ( (result = fread(buf, 1, max_size, netlist_in))==0 && ferror(netlist_in)) \
984 : : { \
985 : : if( errno != EINTR) \
986 : : { \
987 : : YY_FATAL_ERROR( "input in flex scanner failed" ); \
988 : : break; \
989 : : } \
990 : : errno=0; \
991 : : clearerr(netlist_in); \
992 : : } \
993 : : }\
994 : : \
995 : :
996 : : #endif
997 : :
998 : : /* No semi-colon after return; correct usage is to write "yyterminate();" -
999 : : * we don't want an extra ';' after the "return" because that will cause
1000 : : * some compilers to complain about unreachable statements.
1001 : : */
1002 : : #ifndef yyterminate
1003 : : #define yyterminate() return YY_NULL
1004 : : #endif
1005 : :
1006 : : /* Number of entries by which start-condition stack grows. */
1007 : : #ifndef YY_START_STACK_INCR
1008 : : #define YY_START_STACK_INCR 25
1009 : : #endif
1010 : :
1011 : : /* Report a fatal error. */
1012 : : #ifndef YY_FATAL_ERROR
1013 : : #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
1014 : : #endif
1015 : :
1016 : : /* end tables serialization structures and prototypes */
1017 : :
1018 : : /* Default declaration of generated scanner - a define so the user can
1019 : : * easily add parameters.
1020 : : */
1021 : : #ifndef YY_DECL
1022 : : #define YY_DECL_IS_OURS 1
1023 : :
1024 : : extern int netlist_lex (void);
1025 : :
1026 : : #define YY_DECL int netlist_lex (void)
1027 : : #endif /* !YY_DECL */
1028 : :
1029 : : /* Code executed at the beginning of each rule, after netlist_text and netlist_leng
1030 : : * have been set up.
1031 : : */
1032 : : #ifndef YY_USER_ACTION
1033 : : #define YY_USER_ACTION
1034 : : #endif
1035 : :
1036 : : /* Code executed at the end of each rule. */
1037 : : #ifndef YY_BREAK
1038 : : #define YY_BREAK break;
1039 : : #endif
1040 : :
1041 : : #define YY_RULE_SETUP \
1042 : : YY_USER_ACTION
1043 : :
1044 : : /** The main scanner function which does all the work.
1045 : : */
1046 : 51575 : YY_DECL
1047 : : {
1048 : : register yy_state_type yy_current_state;
1049 : : register char *yy_cp, *yy_bp;
1050 : : register int yy_act;
1051 : :
1052 : : #line 147 "scan_netlist.l"
1053 : :
1054 : :
1055 : : #line 1056 "scan_netlist.cpp"
1056 : :
1057 [ + + ]: 51575 : if ( !(yy_init) )
1058 : : {
1059 : 103 : (yy_init) = 1;
1060 : :
1061 : : #ifdef YY_USER_INIT
1062 : : YY_USER_INIT;
1063 : : #endif
1064 : :
1065 [ + - ]: 103 : if ( ! (yy_start) )
1066 : 103 : (yy_start) = 1; /* first start state */
1067 : :
1068 [ - + ]: 103 : if ( ! netlist_in )
1069 : 0 : netlist_in = stdin;
1070 : :
1071 [ + - ]: 103 : if ( ! netlist_out )
1072 : 103 : netlist_out = stdout;
1073 : :
1074 [ - + ][ # # ]: 103 : if ( ! YY_CURRENT_BUFFER ) {
1075 : 103 : netlist_ensure_buffer_stack ();
1076 : 103 : YY_CURRENT_BUFFER_LVALUE =
1077 : 103 : netlist__create_buffer(netlist_in,YY_BUF_SIZE );
1078 : : }
1079 : :
1080 : 103 : netlist__load_buffer_state( );
1081 : : }
1082 : :
1083 : 74472 : while ( 1 ) /* loops until end-of-file is reached */
1084 : : {
1085 : 74472 : yy_cp = (yy_c_buf_p);
1086 : :
1087 : : /* Support of netlist_text. */
1088 : 74472 : *yy_cp = (yy_hold_char);
1089 : :
1090 : : /* yy_bp points to the position in yy_ch_buf of the start of
1091 : : * the current run.
1092 : : */
1093 : 74472 : yy_bp = yy_cp;
1094 : :
1095 : 74472 : yy_current_state = (yy_start);
1096 : : yy_match:
1097 [ + + ]: 181648 : do
1098 : : {
1099 : 181648 : register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
1100 [ + + ]: 181648 : if ( yy_accept[yy_current_state] )
1101 : : {
1102 : 85751 : (yy_last_accepting_state) = yy_current_state;
1103 : 85751 : (yy_last_accepting_cpos) = yy_cp;
1104 : : }
1105 [ + + ]: 269725 : while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1106 : : {
1107 : 88077 : yy_current_state = (int) yy_def[yy_current_state];
1108 [ + + ]: 88077 : if ( yy_current_state >= 238 )
1109 : 66613 : yy_c = yy_meta[(unsigned int) yy_c];
1110 : : }
1111 : 181648 : yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1112 : 181648 : ++yy_cp;
1113 : : }
1114 : 181648 : while ( yy_base[yy_current_state] != 856 );
1115 : :
1116 : : yy_find_action:
1117 : 74575 : yy_act = yy_accept[yy_current_state];
1118 [ + + ]: 74575 : if ( yy_act == 0 )
1119 : : { /* have to back up */
1120 : 17199 : yy_cp = (yy_last_accepting_cpos);
1121 : 17199 : yy_current_state = (yy_last_accepting_state);
1122 : 17199 : yy_act = yy_accept[yy_current_state];
1123 : : }
1124 : :
1125 : 74575 : YY_DO_BEFORE_ACTION;
1126 : :
1127 [ + + ][ + + ]: 74575 : if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
1128 : : {
1129 : : int yyl;
1130 [ + + ]: 98587 : for ( yyl = 0; yyl < netlist_leng; ++yyl )
1131 [ + + ]: 73896 : if ( netlist_text[yyl] == '\n' )
1132 : :
1133 : 1403 : netlist_lineno++;
1134 : : ;
1135 : : }
1136 : :
1137 : : do_action: /* This label is used only to access EOF actions. */
1138 : :
1139 [ - + + + : 74678 : switch ( yy_act )
+ + - - +
- - + + +
+ + + - +
+ + + - +
+ + - + -
+ - - - -
- - + - -
- + - + -
- + - - +
+ - ]
1140 : : { /* beginning of action switch */
1141 : : case 0: /* must back up */
1142 : : /* undo the effects of YY_DO_BEFORE_ACTION */
1143 : 0 : *yy_cp = (yy_hold_char);
1144 : 0 : yy_cp = (yy_last_accepting_cpos);
1145 : 0 : yy_current_state = (yy_last_accepting_state);
1146 : 0 : goto yy_find_action;
1147 : :
1148 : : case 1:
1149 : : YY_RULE_SETUP
1150 : : #line 149 "scan_netlist.l"
1151 : : { /* identify scale and/or unit */
1152 : : netlist_lval.str = strdup (netlist_text);
1153 : : return ScaleOrUnit;
1154 : : }
1155 : : YY_BREAK
1156 : : case 2:
1157 : : YY_RULE_SETUP
1158 : : #line 153 "scan_netlist.l"
1159 : : { /* special equation case */
1160 : : BEGIN(EQN);
1161 : : return Eqn;
1162 : : }
1163 : : YY_BREAK
1164 : : case 3:
1165 : : YY_RULE_SETUP
1166 : : #line 157 "scan_netlist.l"
1167 : : {
1168 : : /* subcircuit definition begins */
1169 : : return DefSub;
1170 : : }
1171 : : YY_BREAK
1172 : : case 4:
1173 : : YY_RULE_SETUP
1174 : : #line 161 "scan_netlist.l"
1175 : : {
1176 : : /* subcircuit definition ends */
1177 : : return EndSub;
1178 : : }
1179 : : YY_BREAK
1180 : : case 5:
1181 : : YY_RULE_SETUP
1182 : : #line 165 "scan_netlist.l"
1183 : : { /* identify identifier */
1184 : : netlist_lval.ident = strdup (netlist_text);
1185 : : return Identifier;
1186 : : }
1187 : : YY_BREAK
1188 : : case 6:
1189 : : YY_RULE_SETUP
1190 : : #line 169 "scan_netlist.l"
1191 : : { /* identify node identifier */
1192 : : netlist_lval.ident = strdup (netlist_text);
1193 : : return Identifier;
1194 : : }
1195 : : YY_BREAK
1196 : : case 7:
1197 : : YY_RULE_SETUP
1198 : : #line 173 "scan_netlist.l"
1199 : : { /* identify file reference */
1200 : : char * p = strrchr (netlist_text, '}'); *p = '\0';
1201 : : netlist_lval.ident = strdup (&netlist_text[1]);
1202 : : return Identifier;
1203 : : }
1204 : : YY_BREAK
1205 : : case 8:
1206 : : YY_RULE_SETUP
1207 : : #line 178 "scan_netlist.l"
1208 : : { /* identify (signed) real float */
1209 : : netlist_lval.d = strtod (netlist_text, NULL);
1210 : : return REAL;
1211 : : }
1212 : : YY_BREAK
1213 : : case 9:
1214 : : YY_RULE_SETUP
1215 : : #line 182 "scan_netlist.l"
1216 : : { /* identify (signed) imaginary float */
1217 : : if (netlist_text[0] == 'i' || netlist_text[0] == 'j')
1218 : : netlist_text[0] = (netlist_text[1] == '\0') ? '1' : '0';
1219 : : else
1220 : : netlist_text[1] = '0';
1221 : : netlist_lval.d = strtod (netlist_text, NULL);
1222 : : return IMAG;
1223 : : }
1224 : : YY_BREAK
1225 : : case 10:
1226 : : YY_RULE_SETUP
1227 : : #line 190 "scan_netlist.l"
1228 : : { /* identify complete (signed) complex number */
1229 : : int i = 0;
1230 : : while (netlist_text[i] != 'i' && netlist_text[i] != 'j') i++;
1231 : : netlist_text[i] = netlist_text[i - 1];
1232 : : netlist_text[i - 1] = '\0';
1233 : : netlist_lval.c.r = strtod (netlist_text, NULL);
1234 : : netlist_lval.c.i = strtod (&netlist_text[i], NULL);
1235 : : return COMPLEX;
1236 : : }
1237 : : YY_BREAK
1238 : : case 11:
1239 : : /* rule 11 can match eol */
1240 : : YY_RULE_SETUP
1241 : : #line 199 "scan_netlist.l"
1242 : : { /* identify 'identifier =' assign */
1243 : : int len = netlist_leng - 3;
1244 : : while (isspace (netlist_text[len])) len--;
1245 : : netlist_lval.ident = (char *) calloc (len + 2, 1);
1246 : : memcpy (netlist_lval.ident, netlist_text, len + 1);
1247 : : yyless (netlist_leng - 1); /* push back last character */
1248 : : return Assign;
1249 : : }
1250 : : YY_BREAK
1251 : : case 12:
1252 : : YY_RULE_SETUP
1253 : : #line 208 "scan_netlist.l"
1254 : : { /* special token for the value list */ return '['; }
1255 : : YY_BREAK
1256 : : case 13:
1257 : : YY_RULE_SETUP
1258 : : #line 209 "scan_netlist.l"
1259 : : { /* special token for the value list */ return ']'; }
1260 : : YY_BREAK
1261 : : case 14:
1262 : : YY_RULE_SETUP
1263 : : #line 210 "scan_netlist.l"
1264 : : { /* special token for the value list */ return ';'; }
1265 : : YY_BREAK
1266 : : case 15:
1267 : : YY_RULE_SETUP
1268 : : #line 212 "scan_netlist.l"
1269 : : { /* pass the '.' to the parser */ return '.'; }
1270 : : YY_BREAK
1271 : : case 16:
1272 : : YY_RULE_SETUP
1273 : : #line 213 "scan_netlist.l"
1274 : : { /* pass the ':' to the parser */ return ':'; }
1275 : : YY_BREAK
1276 : : case 17:
1277 : : YY_RULE_SETUP
1278 : : #line 214 "scan_netlist.l"
1279 : : { /* pass the '=' to the parser */ return '='; }
1280 : : YY_BREAK
1281 : : case 18:
1282 : : /* rule 18 can match eol */
1283 : : YY_RULE_SETUP
1284 : : #line 215 "scan_netlist.l"
1285 : : { /* detect end of line */ return Eol; }
1286 : : YY_BREAK
1287 : : case 19:
1288 : : /* rule 19 can match eol */
1289 : : YY_RULE_SETUP
1290 : : #line 217 "scan_netlist.l"
1291 : : /* skip spaces and the trailing '\' */
1292 : : YY_BREAK
1293 : : case 20:
1294 : : YY_RULE_SETUP
1295 : : #line 219 "scan_netlist.l"
1296 : : { /* leave these characters */
1297 : : BEGIN(COMMENT);
1298 : : }
1299 : : YY_BREAK
1300 : : case 21:
1301 : : YY_RULE_SETUP
1302 : : #line 222 "scan_netlist.l"
1303 : : { /* string constant starts here */
1304 : : BEGIN(STR);
1305 : : return '"';
1306 : : }
1307 : : YY_BREAK
1308 : : case 22:
1309 : : YY_RULE_SETUP
1310 : : #line 226 "scan_netlist.l"
1311 : : { /* any other character in invalid */
1312 : : logprint (LOG_ERROR,
1313 : : "line %d: syntax error, unrecognized character: `%s'\n",
1314 : : netlist_lineno, netlist_text);
1315 : : return InvalidCharacter;
1316 : : }
1317 : : YY_BREAK
1318 : : case 23:
1319 : : YY_RULE_SETUP
1320 : : #line 233 "scan_netlist.l"
1321 : : { /* skip any character in here */ }
1322 : : YY_BREAK
1323 : : case 24:
1324 : : /* rule 24 can match eol */
1325 : : YY_RULE_SETUP
1326 : : #line 234 "scan_netlist.l"
1327 : : { BEGIN(INITIAL); /* skipping ends here */ }
1328 : : YY_BREAK
1329 : : case 25:
1330 : : YY_RULE_SETUP
1331 : : #line 236 "scan_netlist.l"
1332 : : { /* string constant ends here */
1333 : : BEGIN(INITIAL);
1334 : : return '"';
1335 : : }
1336 : : YY_BREAK
1337 : : case 26:
1338 : : /* rule 26 can match eol */
1339 : : YY_RULE_SETUP
1340 : : #line 240 "scan_netlist.l"
1341 : : { /* string in a single line only */
1342 : : logprint (LOG_ERROR,
1343 : : "line %d: syntax error, unterminated string constant\n",
1344 : : netlist_lineno);
1345 : : return Eol;
1346 : : }
1347 : : YY_BREAK
1348 : : case 27:
1349 : : YY_RULE_SETUP
1350 : : #line 246 "scan_netlist.l"
1351 : : /* skip spaces */
1352 : : YY_BREAK
1353 : : case 28:
1354 : : YY_RULE_SETUP
1355 : : #line 248 "scan_netlist.l"
1356 : : { /* any other character is invalid */
1357 : : logprint (LOG_ERROR,
1358 : : "line %d: syntax error, unrecognized character: `%s'\n",
1359 : : netlist_lineno, netlist_text);
1360 : : return InvalidCharacter;
1361 : : }
1362 : : YY_BREAK
1363 : : case 29:
1364 : : YY_RULE_SETUP
1365 : : #line 255 "scan_netlist.l"
1366 : : { /* return operators unchanged */
1367 : : return netlist_text[0];
1368 : : }
1369 : : YY_BREAK
1370 : : case 30:
1371 : : YY_RULE_SETUP
1372 : : #line 259 "scan_netlist.l"
1373 : : { return GreaterOrEqual; }
1374 : : YY_BREAK
1375 : : case 31:
1376 : : YY_RULE_SETUP
1377 : : #line 260 "scan_netlist.l"
1378 : : { return LessOrEqual; }
1379 : : YY_BREAK
1380 : : case 32:
1381 : : YY_RULE_SETUP
1382 : : #line 261 "scan_netlist.l"
1383 : : { return NotEqual; }
1384 : : YY_BREAK
1385 : : case 33:
1386 : : YY_RULE_SETUP
1387 : : #line 262 "scan_netlist.l"
1388 : : { return Equal; }
1389 : : YY_BREAK
1390 : : case 34:
1391 : : YY_RULE_SETUP
1392 : : #line 263 "scan_netlist.l"
1393 : : { return And; }
1394 : : YY_BREAK
1395 : : case 35:
1396 : : YY_RULE_SETUP
1397 : : #line 264 "scan_netlist.l"
1398 : : { return Or; }
1399 : : YY_BREAK
1400 : : case 36:
1401 : : YY_RULE_SETUP
1402 : : #line 265 "scan_netlist.l"
1403 : : { return Less; }
1404 : : YY_BREAK
1405 : : case 37:
1406 : : YY_RULE_SETUP
1407 : : #line 266 "scan_netlist.l"
1408 : : { return Greater; }
1409 : : YY_BREAK
1410 : : case 38:
1411 : : YY_RULE_SETUP
1412 : : #line 267 "scan_netlist.l"
1413 : : { return Not; }
1414 : : YY_BREAK
1415 : : case 39:
1416 : : YY_RULE_SETUP
1417 : : #line 269 "scan_netlist.l"
1418 : : { /* special tokens for vectors / matrices */
1419 : : return netlist_text[0];
1420 : : }
1421 : : YY_BREAK
1422 : : case 40:
1423 : : YY_RULE_SETUP
1424 : : #line 273 "scan_netlist.l"
1425 : : { /* identify unsigned real float */
1426 : : char * endptr = NULL;
1427 : : netlist_lval.d = strtod (netlist_text, &endptr);
1428 : : netlist_lval.d = netlist_evaluate_scale (netlist_lval.d, endptr);
1429 : : return REAL;
1430 : : }
1431 : : YY_BREAK
1432 : : case 41:
1433 : : YY_RULE_SETUP
1434 : : #line 279 "scan_netlist.l"
1435 : : { /* identify unsigned imaginary float */
1436 : : if (netlist_text[0] == 'i' || netlist_text[0] == 'j')
1437 : : netlist_text[0] = (netlist_text[1] == '\0') ? '1' : '0';
1438 : : else
1439 : : netlist_text[1] = '0';
1440 : : char * endptr = NULL;
1441 : : netlist_lval.d = strtod (netlist_text, &endptr);
1442 : : netlist_lval.d = netlist_evaluate_scale (netlist_lval.d, endptr);
1443 : : return IMAG;
1444 : : }
1445 : : YY_BREAK
1446 : : case 42:
1447 : : YY_RULE_SETUP
1448 : : #line 289 "scan_netlist.l"
1449 : : { /* identify identifier */
1450 : : netlist_lval.ident = strdup (netlist_text);
1451 : : return Identifier;
1452 : : }
1453 : : YY_BREAK
1454 : : case 43:
1455 : : YY_RULE_SETUP
1456 : : #line 293 "scan_netlist.l"
1457 : : {
1458 : : netlist_lval.chr = netlist_text[1];
1459 : : return Character;
1460 : : }
1461 : : YY_BREAK
1462 : : case 44:
1463 : : YY_RULE_SETUP
1464 : : #line 297 "scan_netlist.l"
1465 : : {
1466 : : netlist_lval.str = strdup (&netlist_text[1]);
1467 : : netlist_lval.str[strlen (netlist_lval.str) - 1] = '\0';
1468 : : return STRING;
1469 : : }
1470 : : YY_BREAK
1471 : : case 45:
1472 : : /* rule 45 can match eol */
1473 : : YY_RULE_SETUP
1474 : : #line 302 "scan_netlist.l"
1475 : : { /* detect end of line */ BEGIN(INITIAL); return Eol; }
1476 : : YY_BREAK
1477 : : case 46:
1478 : : YY_RULE_SETUP
1479 : : #line 304 "scan_netlist.l"
1480 : : { /* any other character in invalid */
1481 : : logprint (LOG_ERROR,
1482 : : "line %d: syntax error, unrecognized character: `%s'\n",
1483 : : netlist_lineno, netlist_text);
1484 : : return InvalidCharacter;
1485 : : }
1486 : : YY_BREAK
1487 : : case 47:
1488 : : YY_RULE_SETUP
1489 : : #line 311 "scan_netlist.l"
1490 : : ECHO;
1491 : : YY_BREAK
1492 : : #line 1493 "scan_netlist.cpp"
1493 : : case YY_STATE_EOF(INITIAL):
1494 : : case YY_STATE_EOF(COMMENT):
1495 : : case YY_STATE_EOF(STR):
1496 : : case YY_STATE_EOF(EQN):
1497 : 103 : yyterminate();
1498 : :
1499 : : case YY_END_OF_BUFFER:
1500 : : {
1501 : : /* Amount of text matched not including the EOB char. */
1502 : 206 : int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
1503 : :
1504 : : /* Undo the effects of YY_DO_BEFORE_ACTION. */
1505 : 206 : *yy_cp = (yy_hold_char);
1506 : : YY_RESTORE_YY_MORE_OFFSET
1507 : :
1508 [ + + ]: 206 : if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
1509 : : {
1510 : : /* We're scanning a new file or input source. It's
1511 : : * possible that this happened because the user
1512 : : * just pointed netlist_in at a new source and called
1513 : : * netlist_lex(). If so, then we have to assure
1514 : : * consistency between YY_CURRENT_BUFFER and our
1515 : : * globals. Here is the right place to do so, because
1516 : : * this is the first action (other than possibly a
1517 : : * back-up) that will match for the new input source.
1518 : : */
1519 : 103 : (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
1520 : 103 : YY_CURRENT_BUFFER_LVALUE->yy_input_file = netlist_in;
1521 : 103 : YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
1522 : : }
1523 : :
1524 : : /* Note that here we test for yy_c_buf_p "<=" to the position
1525 : : * of the first EOB in the buffer, since yy_c_buf_p will
1526 : : * already have been incremented past the NUL character
1527 : : * (since all states make transitions on EOB to the
1528 : : * end-of-buffer state). Contrast this with the test
1529 : : * in input().
1530 : : */
1531 [ - + ]: 206 : if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
1532 : : { /* This was really a NUL. */
1533 : : yy_state_type yy_next_state;
1534 : :
1535 : 0 : (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
1536 : :
1537 : 0 : yy_current_state = yy_get_previous_state( );
1538 : :
1539 : : /* Okay, we're now positioned to make the NUL
1540 : : * transition. We couldn't have
1541 : : * yy_get_previous_state() go ahead and do it
1542 : : * for us because it doesn't know how to deal
1543 : : * with the possibility of jamming (and we don't
1544 : : * want to build jamming into it because then it
1545 : : * will run more slowly).
1546 : : */
1547 : :
1548 : 0 : yy_next_state = yy_try_NUL_trans( yy_current_state );
1549 : :
1550 : 0 : yy_bp = (yytext_ptr) + YY_MORE_ADJ;
1551 : :
1552 [ # # ]: 0 : if ( yy_next_state )
1553 : : {
1554 : : /* Consume the NUL. */
1555 : 0 : yy_cp = ++(yy_c_buf_p);
1556 : 0 : yy_current_state = yy_next_state;
1557 : 0 : goto yy_match;
1558 : : }
1559 : :
1560 : : else
1561 : : {
1562 : 0 : yy_cp = (yy_c_buf_p);
1563 : 0 : goto yy_find_action;
1564 : : }
1565 : : }
1566 : :
1567 [ + + - - ]: 206 : else switch ( yy_get_next_buffer( ) )
1568 : : {
1569 : : case EOB_ACT_END_OF_FILE:
1570 : : {
1571 : 103 : (yy_did_buffer_switch_on_eof) = 0;
1572 : :
1573 : : if ( netlist_wrap( ) )
1574 : : {
1575 : : /* Note: because we've taken care in
1576 : : * yy_get_next_buffer() to have set up
1577 : : * netlist_text, we can now set up
1578 : : * yy_c_buf_p so that if some total
1579 : : * hoser (like flex itself) wants to
1580 : : * call the scanner after we return the
1581 : : * YY_NULL, it'll still work - another
1582 : : * YY_NULL will get returned.
1583 : : */
1584 : 103 : (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
1585 : :
1586 : 103 : yy_act = YY_STATE_EOF(YY_START);
1587 : 103 : goto do_action;
1588 : : }
1589 : :
1590 : : else
1591 : : {
1592 : : if ( ! (yy_did_buffer_switch_on_eof) )
1593 : : YY_NEW_FILE;
1594 : : }
1595 : : break;
1596 : : }
1597 : :
1598 : : case EOB_ACT_CONTINUE_SCAN:
1599 : : (yy_c_buf_p) =
1600 : 103 : (yytext_ptr) + yy_amount_of_matched_text;
1601 : :
1602 : 103 : yy_current_state = yy_get_previous_state( );
1603 : :
1604 : 103 : yy_cp = (yy_c_buf_p);
1605 : 103 : yy_bp = (yytext_ptr) + YY_MORE_ADJ;
1606 : 103 : goto yy_match;
1607 : :
1608 : : case EOB_ACT_LAST_MATCH:
1609 : : (yy_c_buf_p) =
1610 : 0 : &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
1611 : :
1612 : 0 : yy_current_state = yy_get_previous_state( );
1613 : :
1614 : 0 : yy_cp = (yy_c_buf_p);
1615 : 0 : yy_bp = (yytext_ptr) + YY_MORE_ADJ;
1616 : 0 : goto yy_find_action;
1617 : : }
1618 : 0 : break;
1619 : : }
1620 : :
1621 : : default:
1622 : : YY_FATAL_ERROR(
1623 : 0 : "fatal flex scanner internal error--no action found" );
1624 : : } /* end of action switch */
1625 : : } /* end of scanning one token */
1626 : : } /* end of netlist_lex */
1627 : :
1628 : : /* yy_get_next_buffer - try to read in a new buffer
1629 : : *
1630 : : * Returns a code representing an action:
1631 : : * EOB_ACT_LAST_MATCH -
1632 : : * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
1633 : : * EOB_ACT_END_OF_FILE - end of file
1634 : : */
1635 : 206 : static int yy_get_next_buffer (void)
1636 : : {
1637 : 206 : register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
1638 : 206 : register char *source = (yytext_ptr);
1639 : : register int number_to_move, i;
1640 : : int ret_val;
1641 : :
1642 [ - + ]: 206 : if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
1643 : : YY_FATAL_ERROR(
1644 : 0 : "fatal flex scanner internal error--end of buffer missed" );
1645 : :
1646 [ - + ]: 206 : if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
1647 : : { /* Don't try to fill the buffer, so this is an EOF. */
1648 [ # # ]: 0 : if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
1649 : : {
1650 : : /* We matched a single character, the EOB, so
1651 : : * treat this as a final EOF.
1652 : : */
1653 : 0 : return EOB_ACT_END_OF_FILE;
1654 : : }
1655 : :
1656 : : else
1657 : : {
1658 : : /* We matched some text prior to the EOB, first
1659 : : * process it.
1660 : : */
1661 : 0 : return EOB_ACT_LAST_MATCH;
1662 : : }
1663 : : }
1664 : :
1665 : : /* Try to read more data. */
1666 : :
1667 : : /* First move last chars to start of buffer. */
1668 : 206 : number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
1669 : :
1670 [ - + ]: 206 : for ( i = 0; i < number_to_move; ++i )
1671 : 0 : *(dest++) = *(source++);
1672 : :
1673 [ - + ]: 206 : if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
1674 : : /* don't do the read, it's not guaranteed to return an EOF,
1675 : : * just force an EOF
1676 : : */
1677 : 0 : YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
1678 : :
1679 : : else
1680 : : {
1681 : : yy_size_t num_to_read =
1682 : 206 : YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
1683 : :
1684 [ - + ]: 206 : while ( num_to_read <= 0 )
1685 : : { /* Not enough room in the buffer - grow it. */
1686 : :
1687 : : /* just a shorter name for the current buffer */
1688 : 0 : YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
1689 : :
1690 : : int yy_c_buf_p_offset =
1691 : 0 : (int) ((yy_c_buf_p) - b->yy_ch_buf);
1692 : :
1693 [ # # ]: 0 : if ( b->yy_is_our_buffer )
1694 : : {
1695 : 0 : yy_size_t new_size = b->yy_buf_size * 2;
1696 : :
1697 [ # # ]: 0 : if ( new_size <= 0 )
1698 : 0 : b->yy_buf_size += b->yy_buf_size / 8;
1699 : : else
1700 : 0 : b->yy_buf_size *= 2;
1701 : :
1702 : : b->yy_ch_buf = (char *)
1703 : : /* Include room in for 2 EOB chars. */
1704 : 0 : netlist_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
1705 : : }
1706 : : else
1707 : : /* Can't grow it, we don't own it. */
1708 : 0 : b->yy_ch_buf = 0;
1709 : :
1710 [ # # ]: 0 : if ( ! b->yy_ch_buf )
1711 : : YY_FATAL_ERROR(
1712 : 0 : "fatal error - scanner input buffer overflow" );
1713 : :
1714 : 0 : (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
1715 : :
1716 : 0 : num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
1717 : 0 : number_to_move - 1;
1718 : :
1719 : : }
1720 : :
1721 [ + - ]: 206 : if ( num_to_read > YY_READ_BUF_SIZE )
1722 : 206 : num_to_read = YY_READ_BUF_SIZE;
1723 : :
1724 : : /* Read in more data. */
1725 [ - + ][ # # ]: 206 : YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ + + ][ - + ]
[ - + ]
1726 : : (yy_n_chars), num_to_read );
1727 : :
1728 : 206 : YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
1729 : : }
1730 : :
1731 [ + + ]: 206 : if ( (yy_n_chars) == 0 )
1732 : : {
1733 [ + - ]: 103 : if ( number_to_move == YY_MORE_ADJ )
1734 : : {
1735 : 103 : ret_val = EOB_ACT_END_OF_FILE;
1736 : 103 : netlist_restart(netlist_in );
1737 : : }
1738 : :
1739 : : else
1740 : : {
1741 : 0 : ret_val = EOB_ACT_LAST_MATCH;
1742 : 0 : YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
1743 : 0 : YY_BUFFER_EOF_PENDING;
1744 : : }
1745 : : }
1746 : :
1747 : : else
1748 : 103 : ret_val = EOB_ACT_CONTINUE_SCAN;
1749 : :
1750 [ - + ]: 206 : if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
1751 : : /* Extend the array by 50%, plus the number we really need. */
1752 : 0 : yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
1753 : 0 : YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) netlist_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
1754 [ # # ]: 0 : if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
1755 : 0 : YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
1756 : : }
1757 : :
1758 : 206 : (yy_n_chars) += number_to_move;
1759 : 206 : YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
1760 : 206 : YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
1761 : :
1762 : 206 : (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
1763 : :
1764 : 206 : return ret_val;
1765 : : }
1766 : :
1767 : : /* yy_get_previous_state - get the state just before the EOB char was reached */
1768 : :
1769 : 103 : static yy_state_type yy_get_previous_state (void)
1770 : : {
1771 : : register yy_state_type yy_current_state;
1772 : : register char *yy_cp;
1773 : :
1774 : 103 : yy_current_state = (yy_start);
1775 : :
1776 [ - + ]: 103 : for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
1777 : : {
1778 [ # # ]: 0 : register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
1779 [ # # ]: 0 : if ( yy_accept[yy_current_state] )
1780 : : {
1781 : 0 : (yy_last_accepting_state) = yy_current_state;
1782 : 0 : (yy_last_accepting_cpos) = yy_cp;
1783 : : }
1784 [ # # ]: 0 : while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1785 : : {
1786 : 0 : yy_current_state = (int) yy_def[yy_current_state];
1787 [ # # ]: 0 : if ( yy_current_state >= 238 )
1788 : 0 : yy_c = yy_meta[(unsigned int) yy_c];
1789 : : }
1790 : 0 : yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1791 : : }
1792 : :
1793 : 103 : return yy_current_state;
1794 : : }
1795 : :
1796 : : /* yy_try_NUL_trans - try to make a transition on the NUL character
1797 : : *
1798 : : * synopsis
1799 : : * next_state = yy_try_NUL_trans( current_state );
1800 : : */
1801 : 0 : static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
1802 : : {
1803 : : register int yy_is_jam;
1804 : 0 : register char *yy_cp = (yy_c_buf_p);
1805 : :
1806 : 0 : register YY_CHAR yy_c = 1;
1807 [ # # ]: 0 : if ( yy_accept[yy_current_state] )
1808 : : {
1809 : 0 : (yy_last_accepting_state) = yy_current_state;
1810 : 0 : (yy_last_accepting_cpos) = yy_cp;
1811 : : }
1812 [ # # ]: 0 : while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1813 : : {
1814 : 0 : yy_current_state = (int) yy_def[yy_current_state];
1815 [ # # ]: 0 : if ( yy_current_state >= 238 )
1816 : 0 : yy_c = yy_meta[(unsigned int) yy_c];
1817 : : }
1818 : 0 : yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1819 : 0 : yy_is_jam = (yy_current_state == 237);
1820 : :
1821 [ # # ]: 0 : return yy_is_jam ? 0 : yy_current_state;
1822 : : }
1823 : :
1824 : : #ifndef YY_NO_INPUT
1825 : : #ifdef __cplusplus
1826 : 0 : static int yyinput (void)
1827 : : #else
1828 : : static int input (void)
1829 : : #endif
1830 : :
1831 : : {
1832 : : int c;
1833 : :
1834 : 0 : *(yy_c_buf_p) = (yy_hold_char);
1835 : :
1836 [ # # ]: 0 : if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
1837 : : {
1838 : : /* yy_c_buf_p now points to the character we want to return.
1839 : : * If this occurs *before* the EOB characters, then it's a
1840 : : * valid NUL; if not, then we've hit the end of the buffer.
1841 : : */
1842 [ # # ]: 0 : if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
1843 : : /* This was really a NUL. */
1844 : 0 : *(yy_c_buf_p) = '\0';
1845 : :
1846 : : else
1847 : : { /* need more input */
1848 : 0 : yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
1849 : 0 : ++(yy_c_buf_p);
1850 : :
1851 [ # # # # ]: 0 : switch ( yy_get_next_buffer( ) )
1852 : : {
1853 : : case EOB_ACT_LAST_MATCH:
1854 : : /* This happens because yy_g_n_b()
1855 : : * sees that we've accumulated a
1856 : : * token and flags that we need to
1857 : : * try matching the token before
1858 : : * proceeding. But for input(),
1859 : : * there's no matching to consider.
1860 : : * So convert the EOB_ACT_LAST_MATCH
1861 : : * to EOB_ACT_END_OF_FILE.
1862 : : */
1863 : :
1864 : : /* Reset buffer status. */
1865 : 0 : netlist_restart(netlist_in );
1866 : :
1867 : : /*FALLTHROUGH*/
1868 : :
1869 : : case EOB_ACT_END_OF_FILE:
1870 : : {
1871 : : if ( netlist_wrap( ) )
1872 : 0 : return EOF;
1873 : :
1874 : : if ( ! (yy_did_buffer_switch_on_eof) )
1875 : : YY_NEW_FILE;
1876 : : #ifdef __cplusplus
1877 : : return yyinput();
1878 : : #else
1879 : : return input();
1880 : : #endif
1881 : : }
1882 : :
1883 : : case EOB_ACT_CONTINUE_SCAN:
1884 : 0 : (yy_c_buf_p) = (yytext_ptr) + offset;
1885 : 0 : break;
1886 : : }
1887 : : }
1888 : : }
1889 : :
1890 : 0 : c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
1891 : 0 : *(yy_c_buf_p) = '\0'; /* preserve netlist_text */
1892 : 0 : (yy_hold_char) = *++(yy_c_buf_p);
1893 : :
1894 [ # # ]: 0 : if ( c == '\n' )
1895 : :
1896 : 0 : netlist_lineno++;
1897 : : ;
1898 : :
1899 : 0 : return c;
1900 : : }
1901 : : #endif /* ifndef YY_NO_INPUT */
1902 : :
1903 : : /** Immediately switch to a different input stream.
1904 : : * @param input_file A readable stream.
1905 : : *
1906 : : * @note This function does not reset the start condition to @c INITIAL .
1907 : : */
1908 : 103 : void netlist_restart (FILE * input_file )
1909 : : {
1910 : :
1911 [ + - ][ - + ]: 103 : if ( ! YY_CURRENT_BUFFER ){
1912 : 0 : netlist_ensure_buffer_stack ();
1913 : 0 : YY_CURRENT_BUFFER_LVALUE =
1914 : 0 : netlist__create_buffer(netlist_in,YY_BUF_SIZE );
1915 : : }
1916 : :
1917 [ + - ]: 103 : netlist__init_buffer(YY_CURRENT_BUFFER,input_file );
1918 : 103 : netlist__load_buffer_state( );
1919 : 103 : }
1920 : :
1921 : : /** Switch to a different input buffer.
1922 : : * @param new_buffer The new input buffer.
1923 : : *
1924 : : */
1925 : 0 : void netlist__switch_to_buffer (YY_BUFFER_STATE new_buffer )
1926 : : {
1927 : :
1928 : : /* TODO. We should be able to replace this entire function body
1929 : : * with
1930 : : * netlist_pop_buffer_state();
1931 : : * netlist_push_buffer_state(new_buffer);
1932 : : */
1933 : 0 : netlist_ensure_buffer_stack ();
1934 [ # # ][ # # ]: 0 : if ( YY_CURRENT_BUFFER == new_buffer )
1935 : 0 : return;
1936 : :
1937 [ # # ][ # # ]: 0 : if ( YY_CURRENT_BUFFER )
1938 : : {
1939 : : /* Flush out information for old buffer. */
1940 : 0 : *(yy_c_buf_p) = (yy_hold_char);
1941 : 0 : YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
1942 : 0 : YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
1943 : : }
1944 : :
1945 : 0 : YY_CURRENT_BUFFER_LVALUE = new_buffer;
1946 : 0 : netlist__load_buffer_state( );
1947 : :
1948 : : /* We don't actually know whether we did this switch during
1949 : : * EOF (netlist_wrap()) processing, but the only time this flag
1950 : : * is looked at is after netlist_wrap() is called, so it's safe
1951 : : * to go ahead and always set it.
1952 : : */
1953 : 0 : (yy_did_buffer_switch_on_eof) = 1;
1954 : : }
1955 : :
1956 : 309 : static void netlist__load_buffer_state (void)
1957 : : {
1958 : 309 : (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
1959 : 309 : (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
1960 : 309 : netlist_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
1961 : 309 : (yy_hold_char) = *(yy_c_buf_p);
1962 : 309 : }
1963 : :
1964 : : /** Allocate and initialize an input buffer state.
1965 : : * @param file A readable stream.
1966 : : * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
1967 : : *
1968 : : * @return the allocated buffer state.
1969 : : */
1970 : 103 : YY_BUFFER_STATE netlist__create_buffer (FILE * file, int size )
1971 : : {
1972 : : YY_BUFFER_STATE b;
1973 : :
1974 : 103 : b = (YY_BUFFER_STATE) netlist_alloc(sizeof( struct yy_buffer_state ) );
1975 [ - + ]: 103 : if ( ! b )
1976 : 0 : YY_FATAL_ERROR( "out of dynamic memory in netlist__create_buffer()" );
1977 : :
1978 : 103 : b->yy_buf_size = size;
1979 : :
1980 : : /* yy_ch_buf has to be 2 characters longer than the size given because
1981 : : * we need to put in 2 end-of-buffer characters.
1982 : : */
1983 : 103 : b->yy_ch_buf = (char *) netlist_alloc(b->yy_buf_size + 2 );
1984 [ - + ]: 103 : if ( ! b->yy_ch_buf )
1985 : 0 : YY_FATAL_ERROR( "out of dynamic memory in netlist__create_buffer()" );
1986 : :
1987 : 103 : b->yy_is_our_buffer = 1;
1988 : :
1989 : 103 : netlist__init_buffer(b,file );
1990 : :
1991 : 103 : return b;
1992 : : }
1993 : :
1994 : : /** Destroy the buffer.
1995 : : * @param b a buffer created with netlist__create_buffer()
1996 : : *
1997 : : */
1998 : 103 : void netlist__delete_buffer (YY_BUFFER_STATE b )
1999 : : {
2000 : :
2001 [ - + ]: 103 : if ( ! b )
2002 : 103 : return;
2003 : :
2004 [ + - ][ + - ]: 103 : if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
2005 : 103 : YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
2006 : :
2007 [ + - ]: 103 : if ( b->yy_is_our_buffer )
2008 : 103 : netlist_free((void *) b->yy_ch_buf );
2009 : :
2010 : 103 : netlist_free((void *) b );
2011 : : }
2012 : :
2013 : : /* Initializes or reinitializes a buffer.
2014 : : * This function is sometimes called more than once on the same buffer,
2015 : : * such as during a netlist_restart() or at EOF.
2016 : : */
2017 : 206 : static void netlist__init_buffer (YY_BUFFER_STATE b, FILE * file )
2018 : :
2019 : : {
2020 : 206 : int oerrno = errno;
2021 : :
2022 : 206 : netlist__flush_buffer(b );
2023 : :
2024 : 206 : b->yy_input_file = file;
2025 : 206 : b->yy_fill_buffer = 1;
2026 : :
2027 : : /* If b is the current buffer, then netlist__init_buffer was _probably_
2028 : : * called from netlist_restart() or through yy_get_next_buffer.
2029 : : * In that case, we don't want to reset the lineno or column.
2030 : : */
2031 [ + - ][ + + ]: 206 : if (b != YY_CURRENT_BUFFER){
2032 : 103 : b->yy_bs_lineno = 1;
2033 : 103 : b->yy_bs_column = 0;
2034 : : }
2035 : :
2036 [ + - ][ - + ]: 206 : b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
2037 : :
2038 : 206 : errno = oerrno;
2039 : 206 : }
2040 : :
2041 : : /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
2042 : : * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
2043 : : *
2044 : : */
2045 : 206 : void netlist__flush_buffer (YY_BUFFER_STATE b )
2046 : : {
2047 [ - + ]: 206 : if ( ! b )
2048 : 206 : return;
2049 : :
2050 : 206 : b->yy_n_chars = 0;
2051 : :
2052 : : /* We always need two end-of-buffer characters. The first causes
2053 : : * a transition to the end-of-buffer state. The second causes
2054 : : * a jam in that state.
2055 : : */
2056 : 206 : b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
2057 : 206 : b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
2058 : :
2059 : 206 : b->yy_buf_pos = &b->yy_ch_buf[0];
2060 : :
2061 : 206 : b->yy_at_bol = 1;
2062 : 206 : b->yy_buffer_status = YY_BUFFER_NEW;
2063 : :
2064 [ + - ][ + + ]: 206 : if ( b == YY_CURRENT_BUFFER )
2065 : 103 : netlist__load_buffer_state( );
2066 : : }
2067 : :
2068 : : /** Pushes the new state onto the stack. The new state becomes
2069 : : * the current state. This function will allocate the stack
2070 : : * if necessary.
2071 : : * @param new_buffer The new state.
2072 : : *
2073 : : */
2074 : 0 : void netlist_push_buffer_state (YY_BUFFER_STATE new_buffer )
2075 : : {
2076 [ # # ]: 0 : if (new_buffer == NULL)
2077 : 0 : return;
2078 : :
2079 : 0 : netlist_ensure_buffer_stack();
2080 : :
2081 : : /* This block is copied from netlist__switch_to_buffer. */
2082 [ # # ][ # # ]: 0 : if ( YY_CURRENT_BUFFER )
2083 : : {
2084 : : /* Flush out information for old buffer. */
2085 : 0 : *(yy_c_buf_p) = (yy_hold_char);
2086 : 0 : YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
2087 : 0 : YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
2088 : : }
2089 : :
2090 : : /* Only push if top exists. Otherwise, replace top. */
2091 [ # # ][ # # ]: 0 : if (YY_CURRENT_BUFFER)
2092 : 0 : (yy_buffer_stack_top)++;
2093 : 0 : YY_CURRENT_BUFFER_LVALUE = new_buffer;
2094 : :
2095 : : /* copied from netlist__switch_to_buffer. */
2096 : 0 : netlist__load_buffer_state( );
2097 : 0 : (yy_did_buffer_switch_on_eof) = 1;
2098 : : }
2099 : :
2100 : : /** Removes and deletes the top of the stack, if present.
2101 : : * The next element becomes the new top.
2102 : : *
2103 : : */
2104 : 103 : void netlist_pop_buffer_state (void)
2105 : : {
2106 [ + - ][ + - ]: 103 : if (!YY_CURRENT_BUFFER)
2107 : 103 : return;
2108 : :
2109 [ # # ]: 0 : netlist__delete_buffer(YY_CURRENT_BUFFER );
2110 : 0 : YY_CURRENT_BUFFER_LVALUE = NULL;
2111 [ # # ]: 0 : if ((yy_buffer_stack_top) > 0)
2112 : 0 : --(yy_buffer_stack_top);
2113 : :
2114 [ # # ][ # # ]: 0 : if (YY_CURRENT_BUFFER) {
2115 : 0 : netlist__load_buffer_state( );
2116 : 0 : (yy_did_buffer_switch_on_eof) = 1;
2117 : : }
2118 : : }
2119 : :
2120 : : /* Allocates the stack if it does not exist.
2121 : : * Guarantees space for at least one push.
2122 : : */
2123 : 103 : static void netlist_ensure_buffer_stack (void)
2124 : : {
2125 : : yy_size_t num_to_alloc;
2126 : :
2127 [ + - ]: 103 : if (!(yy_buffer_stack)) {
2128 : :
2129 : : /* First allocation is just for 2 elements, since we don't know if this
2130 : : * scanner will even need a stack. We use 2 instead of 1 to avoid an
2131 : : * immediate realloc on the next call.
2132 : : */
2133 : 103 : num_to_alloc = 1;
2134 : : (yy_buffer_stack) = (struct yy_buffer_state**)netlist_alloc
2135 : : (num_to_alloc * sizeof(struct yy_buffer_state*)
2136 : 103 : );
2137 [ - + ]: 103 : if ( ! (yy_buffer_stack) )
2138 : 0 : YY_FATAL_ERROR( "out of dynamic memory in netlist_ensure_buffer_stack()" );
2139 : :
2140 : 103 : memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
2141 : :
2142 : 103 : (yy_buffer_stack_max) = num_to_alloc;
2143 : 103 : (yy_buffer_stack_top) = 0;
2144 : 103 : return;
2145 : : }
2146 : :
2147 [ # # ]: 0 : if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
2148 : :
2149 : : /* Increase the buffer to prepare for a possible push. */
2150 : 0 : int grow_size = 8 /* arbitrary grow size */;
2151 : :
2152 : 0 : num_to_alloc = (yy_buffer_stack_max) + grow_size;
2153 : : (yy_buffer_stack) = (struct yy_buffer_state**)netlist_realloc
2154 : : ((yy_buffer_stack),
2155 : : num_to_alloc * sizeof(struct yy_buffer_state*)
2156 : 0 : );
2157 [ # # ]: 0 : if ( ! (yy_buffer_stack) )
2158 : 0 : YY_FATAL_ERROR( "out of dynamic memory in netlist_ensure_buffer_stack()" );
2159 : :
2160 : : /* zero only the new slots.*/
2161 : 0 : memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
2162 : 0 : (yy_buffer_stack_max) = num_to_alloc;
2163 : : }
2164 : : }
2165 : :
2166 : : /** Setup the input buffer state to scan directly from a user-specified character buffer.
2167 : : * @param base the character buffer
2168 : : * @param size the size in bytes of the character buffer
2169 : : *
2170 : : * @return the newly allocated buffer state object.
2171 : : */
2172 : 0 : YY_BUFFER_STATE netlist__scan_buffer (char * base, yy_size_t size )
2173 : : {
2174 : : YY_BUFFER_STATE b;
2175 : :
2176 [ # # ][ # # ]: 0 : if ( size < 2 ||
[ # # ]
2177 : 0 : base[size-2] != YY_END_OF_BUFFER_CHAR ||
2178 : 0 : base[size-1] != YY_END_OF_BUFFER_CHAR )
2179 : : /* They forgot to leave room for the EOB's. */
2180 : 0 : return 0;
2181 : :
2182 : 0 : b = (YY_BUFFER_STATE) netlist_alloc(sizeof( struct yy_buffer_state ) );
2183 [ # # ]: 0 : if ( ! b )
2184 : 0 : YY_FATAL_ERROR( "out of dynamic memory in netlist__scan_buffer()" );
2185 : :
2186 : 0 : b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
2187 : 0 : b->yy_buf_pos = b->yy_ch_buf = base;
2188 : 0 : b->yy_is_our_buffer = 0;
2189 : 0 : b->yy_input_file = 0;
2190 : 0 : b->yy_n_chars = b->yy_buf_size;
2191 : 0 : b->yy_is_interactive = 0;
2192 : 0 : b->yy_at_bol = 1;
2193 : 0 : b->yy_fill_buffer = 0;
2194 : 0 : b->yy_buffer_status = YY_BUFFER_NEW;
2195 : :
2196 : 0 : netlist__switch_to_buffer(b );
2197 : :
2198 : 0 : return b;
2199 : : }
2200 : :
2201 : : /** Setup the input buffer state to scan a string. The next call to netlist_lex() will
2202 : : * scan from a @e copy of @a str.
2203 : : * @param yystr a NUL-terminated string to scan
2204 : : *
2205 : : * @return the newly allocated buffer state object.
2206 : : * @note If you want to scan bytes that may contain NUL values, then use
2207 : : * netlist__scan_bytes() instead.
2208 : : */
2209 : 0 : YY_BUFFER_STATE netlist__scan_string (yyconst char * yystr )
2210 : : {
2211 : :
2212 : 0 : return netlist__scan_bytes(yystr,strlen(yystr) );
2213 : : }
2214 : :
2215 : : /** Setup the input buffer state to scan the given bytes. The next call to netlist_lex() will
2216 : : * scan from a @e copy of @a bytes.
2217 : : * @param yybytes the byte buffer to scan
2218 : : * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
2219 : : *
2220 : : * @return the newly allocated buffer state object.
2221 : : */
2222 : 0 : YY_BUFFER_STATE netlist__scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len )
2223 : : {
2224 : : YY_BUFFER_STATE b;
2225 : : char *buf;
2226 : : yy_size_t n;
2227 : : int i;
2228 : :
2229 : : /* Get memory for full buffer, including space for trailing EOB's. */
2230 : 0 : n = _yybytes_len + 2;
2231 : 0 : buf = (char *) netlist_alloc(n );
2232 [ # # ]: 0 : if ( ! buf )
2233 : 0 : YY_FATAL_ERROR( "out of dynamic memory in netlist__scan_bytes()" );
2234 : :
2235 [ # # ]: 0 : for ( i = 0; i < _yybytes_len; ++i )
2236 : 0 : buf[i] = yybytes[i];
2237 : :
2238 : 0 : buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
2239 : :
2240 : 0 : b = netlist__scan_buffer(buf,n );
2241 [ # # ]: 0 : if ( ! b )
2242 : 0 : YY_FATAL_ERROR( "bad buffer in netlist__scan_bytes()" );
2243 : :
2244 : : /* It's okay to grow etc. this buffer, and we should throw it
2245 : : * away when we're done.
2246 : : */
2247 : 0 : b->yy_is_our_buffer = 1;
2248 : :
2249 : 0 : return b;
2250 : : }
2251 : :
2252 : : #ifndef YY_EXIT_FAILURE
2253 : : #define YY_EXIT_FAILURE 2
2254 : : #endif
2255 : :
2256 : 0 : static void yy_fatal_error (yyconst char* msg )
2257 : : {
2258 : 0 : (void) fprintf( stderr, "%s\n", msg );
2259 : 0 : exit( YY_EXIT_FAILURE );
2260 : : }
2261 : :
2262 : : /* Redefine yyless() so it works in section 3 code. */
2263 : :
2264 : : #undef yyless
2265 : : #define yyless(n) \
2266 : : do \
2267 : : { \
2268 : : /* Undo effects of setting up netlist_text. */ \
2269 : : int yyless_macro_arg = (n); \
2270 : : YY_LESS_LINENO(yyless_macro_arg);\
2271 : : netlist_text[netlist_leng] = (yy_hold_char); \
2272 : : (yy_c_buf_p) = netlist_text + yyless_macro_arg; \
2273 : : (yy_hold_char) = *(yy_c_buf_p); \
2274 : : *(yy_c_buf_p) = '\0'; \
2275 : : netlist_leng = yyless_macro_arg; \
2276 : : } \
2277 : : while ( 0 )
2278 : :
2279 : : /* Accessor methods (get/set functions) to struct members. */
2280 : :
2281 : : /** Get the current line number.
2282 : : *
2283 : : */
2284 : 0 : int netlist_get_lineno (void)
2285 : : {
2286 : :
2287 : 0 : return netlist_lineno;
2288 : : }
2289 : :
2290 : : /** Get the input stream.
2291 : : *
2292 : : */
2293 : 0 : FILE *netlist_get_in (void)
2294 : : {
2295 : 0 : return netlist_in;
2296 : : }
2297 : :
2298 : : /** Get the output stream.
2299 : : *
2300 : : */
2301 : 0 : FILE *netlist_get_out (void)
2302 : : {
2303 : 0 : return netlist_out;
2304 : : }
2305 : :
2306 : : /** Get the length of the current token.
2307 : : *
2308 : : */
2309 : 0 : yy_size_t netlist_get_leng (void)
2310 : : {
2311 : 0 : return netlist_leng;
2312 : : }
2313 : :
2314 : : /** Get the current token.
2315 : : *
2316 : : */
2317 : :
2318 : 0 : char *netlist_get_text (void)
2319 : : {
2320 : 0 : return netlist_text;
2321 : : }
2322 : :
2323 : : /** Set the current line number.
2324 : : * @param line_number
2325 : : *
2326 : : */
2327 : 0 : void netlist_set_lineno (int line_number )
2328 : : {
2329 : :
2330 : 0 : netlist_lineno = line_number;
2331 : 0 : }
2332 : :
2333 : : /** Set the input stream. This does not discard the current
2334 : : * input buffer.
2335 : : * @param in_str A readable stream.
2336 : : *
2337 : : * @see netlist__switch_to_buffer
2338 : : */
2339 : 0 : void netlist_set_in (FILE * in_str )
2340 : : {
2341 : 0 : netlist_in = in_str ;
2342 : 0 : }
2343 : :
2344 : 0 : void netlist_set_out (FILE * out_str )
2345 : : {
2346 : 0 : netlist_out = out_str ;
2347 : 0 : }
2348 : :
2349 : 0 : int netlist_get_debug (void)
2350 : : {
2351 : 0 : return netlist__flex_debug;
2352 : : }
2353 : :
2354 : 0 : void netlist_set_debug (int bdebug )
2355 : : {
2356 : 0 : netlist__flex_debug = bdebug ;
2357 : 0 : }
2358 : :
2359 : 103 : static int yy_init_globals (void)
2360 : : {
2361 : : /* Initialization is the same as for the non-reentrant scanner.
2362 : : * This function is called from netlist_lex_destroy(), so don't allocate here.
2363 : : */
2364 : :
2365 : : /* We do not touch netlist_lineno unless the option is enabled. */
2366 : 103 : netlist_lineno = 1;
2367 : :
2368 : 103 : (yy_buffer_stack) = 0;
2369 : 103 : (yy_buffer_stack_top) = 0;
2370 : 103 : (yy_buffer_stack_max) = 0;
2371 : 103 : (yy_c_buf_p) = (char *) 0;
2372 : 103 : (yy_init) = 0;
2373 : 103 : (yy_start) = 0;
2374 : :
2375 : : /* Defined in main.c */
2376 : : #ifdef YY_STDINIT
2377 : : netlist_in = stdin;
2378 : : netlist_out = stdout;
2379 : : #else
2380 : 103 : netlist_in = (FILE *) 0;
2381 : 103 : netlist_out = (FILE *) 0;
2382 : : #endif
2383 : :
2384 : : /* For future reference: Set errno on error, since we are called by
2385 : : * netlist_lex_init()
2386 : : */
2387 : 103 : return 0;
2388 : : }
2389 : :
2390 : : /* netlist_lex_destroy is for both reentrant and non-reentrant scanners. */
2391 : 103 : int netlist_lex_destroy (void)
2392 : : {
2393 : :
2394 : : /* Pop the buffer stack, destroying each element. */
2395 [ + - ][ + + ]: 206 : while(YY_CURRENT_BUFFER){
[ + + ]
2396 [ + - ]: 103 : netlist__delete_buffer(YY_CURRENT_BUFFER );
2397 : 103 : YY_CURRENT_BUFFER_LVALUE = NULL;
2398 : 103 : netlist_pop_buffer_state();
2399 : : }
2400 : :
2401 : : /* Destroy the stack itself. */
2402 : 103 : netlist_free((yy_buffer_stack) );
2403 : 103 : (yy_buffer_stack) = NULL;
2404 : :
2405 : : /* Reset the globals. This is important in a non-reentrant scanner so the next time
2406 : : * netlist_lex() is called, initialization will occur. */
2407 : 103 : yy_init_globals( );
2408 : :
2409 : 103 : return 0;
2410 : : }
2411 : :
2412 : : /*
2413 : : * Internal utility routines.
2414 : : */
2415 : :
2416 : : #ifndef yytext_ptr
2417 : : static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
2418 : : {
2419 : : register int i;
2420 : : for ( i = 0; i < n; ++i )
2421 : : s1[i] = s2[i];
2422 : : }
2423 : : #endif
2424 : :
2425 : : #ifdef YY_NEED_STRLEN
2426 : : static int yy_flex_strlen (yyconst char * s )
2427 : : {
2428 : : register int n;
2429 : : for ( n = 0; s[n]; ++n )
2430 : : ;
2431 : :
2432 : : return n;
2433 : : }
2434 : : #endif
2435 : :
2436 : 309 : void *netlist_alloc (yy_size_t size )
2437 : : {
2438 : 309 : return (void *) malloc( size );
2439 : : }
2440 : :
2441 : 0 : void *netlist_realloc (void * ptr, yy_size_t size )
2442 : : {
2443 : : /* The cast to (char *) in the following accommodates both
2444 : : * implementations that use char* generic pointers, and those
2445 : : * that use void* generic pointers. It works with the latter
2446 : : * because both ANSI C and C++ allow castless assignment from
2447 : : * any pointer type to void*, and deal with argument conversions
2448 : : * as though doing an assignment.
2449 : : */
2450 : 0 : return (void *) realloc( (char *) ptr, size );
2451 : : }
2452 : :
2453 : 309 : void netlist_free (void * ptr )
2454 : : {
2455 : 309 : free( (char *) ptr ); /* see netlist_realloc() for (char *) cast */
2456 : 309 : }
2457 : :
2458 : : #define YYTABLES_NAME "yytables"
2459 : :
2460 : : #line 311 "scan_netlist.l"
2461 : :
2462 : :
2463 : :
|