From dd4df70a2883f57a64ee3aab7a37674d9581128d Mon Sep 17 00:00:00 2001 From: David Rose Date: Tue, 22 Mar 2011 23:48:31 +0000 Subject: [PATCH] fix msvs 2010 build issues reported by community member FriarTuck --- direct/src/dcparser/dcLexer.cxx.prebuilt | 5427 +++++------ direct/src/dcparser/dcLexer.lxx | 12 +- direct/src/dcparser/dcParser.cxx.prebuilt | 721 +- direct/src/dcparser/dcParser.h.prebuilt | 31 +- panda/src/egg/lexer.cxx.prebuilt | 6669 +++++++------- panda/src/egg/lexer.lxx | 12 +- panda/src/egg/parser.cxx.prebuilt | 1341 ++- panda/src/egg/parser.h.prebuilt | 31 +- panda/src/windisplay/winGraphicsWindow.cxx | 13 +- pandatool/src/vrml/vrmlLexer.cxx.prebuilt | 9523 ++++++++++---------- pandatool/src/vrml/vrmlLexer.lxx | 12 +- pandatool/src/vrml/vrmlParser.cxx.prebuilt | 499 +- pandatool/src/vrml/vrmlParser.h.prebuilt | 45 +- pandatool/src/xfile/xLexer.cxx.prebuilt | 5269 +++++------ pandatool/src/xfile/xLexer.lxx | 12 +- pandatool/src/xfile/xParser.cxx.prebuilt | 449 +- pandatool/src/xfile/xParser.h.prebuilt | 31 +- 17 files changed, 15480 insertions(+), 14617 deletions(-) diff --git a/direct/src/dcparser/dcLexer.cxx.prebuilt b/direct/src/dcparser/dcLexer.cxx.prebuilt index 443af02185..aed3f44ba6 100644 --- a/direct/src/dcparser/dcLexer.cxx.prebuilt +++ b/direct/src/dcparser/dcLexer.cxx.prebuilt @@ -1,2710 +1,2717 @@ -#line 2 "lex.yy.c" - -#line 4 "lex.yy.c" - -#define YY_INT_ALIGNED short int - -/* A lexical scanner generated by flex */ - -#define yy_create_buffer dcyy_create_buffer -#define yy_delete_buffer dcyy_delete_buffer -#define yy_flex_debug dcyy_flex_debug -#define yy_init_buffer dcyy_init_buffer -#define yy_flush_buffer dcyy_flush_buffer -#define yy_load_buffer_state dcyy_load_buffer_state -#define yy_switch_to_buffer dcyy_switch_to_buffer -#define yyin dcyyin -#define yyleng dcyyleng -#define yylex dcyylex -#define yylineno dcyylineno -#define yyout dcyyout -#define yyrestart dcyyrestart -#define yytext dcyytext -#define yywrap dcyywrap -#define yyalloc dcyyalloc -#define yyrealloc dcyyrealloc -#define yyfree dcyyfree - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 35 -#if YY_FLEX_SUBMINOR_VERSION > 0 -#define FLEX_BETA -#endif - -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ -#include -#include -#include -#include - -/* end standard C headers. */ - -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have . Non-C99 systems may or may not. */ - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif - -#include -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; -#endif /* ! C99 */ - -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - -#endif /* ! FLEXINT_H */ - -#ifdef __cplusplus - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define YY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef YY_USE_CONST -#define yyconst const -#else -#define yyconst -#endif - -/* Returned upon end-of-file. */ -#define YY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. - */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN (yy_start) = 1 + 2 * - -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START (((yy_start) - 1) / 2) -#define YYSTATE YY_START - -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE dcyyrestart(dcyyin ) - -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#ifndef YY_BUF_SIZE -#define YY_BUF_SIZE 16384 -#endif - -/* The state buf must be large enough to hold one state per character in the main buffer. - */ -#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) - -#ifndef YY_TYPEDEF_YY_BUFFER_STATE -#define YY_TYPEDEF_YY_BUFFER_STATE -typedef struct yy_buffer_state *YY_BUFFER_STATE; -#endif - -extern int dcyyleng; - -extern FILE *dcyyin, *dcyyout; - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - - #define YY_LESS_LINENO(n) - -/* Return all but the first "n" matched characters back to the input stream. */ -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up dcyytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - *yy_cp = (yy_hold_char); \ - YY_RESTORE_YY_MORE_OFFSET \ - (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up dcyytext again */ \ - } \ - while ( 0 ) - -#define unput(c) yyunput( c, (yytext_ptr) ) - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - -#ifndef YY_STRUCT_YY_BUFFER_STATE -#define YY_STRUCT_YY_BUFFER_STATE -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - yy_size_t yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - int yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - int yy_bs_lineno; /**< The line count. */ - int yy_bs_column; /**< The column count. */ - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; - -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via dcyyrestart()), so that the user can continue scanning by - * just pointing dcyyin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - - }; -#endif /* !YY_STRUCT_YY_BUFFER_STATE */ - -/* Stack of input buffers. */ -static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ -static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ -static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - * - * Returns the top of the stack, or NULL. - */ -#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ - ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ - : NULL) - -/* Same as previous macro, but useful when we know that the buffer stack is not - * NULL or when we need an lvalue. For internal use only. - */ -#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] - -/* yy_hold_char holds the character lost when dcyytext is formed. */ -static char yy_hold_char; -static int yy_n_chars; /* number of characters read into yy_ch_buf */ -int dcyyleng; - -/* Points to current character in buffer. */ -static char *yy_c_buf_p = (char *) 0; -static int yy_init = 0; /* whether we need to initialize */ -static int yy_start = 0; /* start state number */ - -/* Flag which is used to allow dcyywrap()'s to do buffer switches - * instead of setting up a fresh dcyyin. A bit of a hack ... - */ -static int yy_did_buffer_switch_on_eof; - -void dcyyrestart (FILE *input_file ); -void dcyy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); -YY_BUFFER_STATE dcyy_create_buffer (FILE *file,int size ); -void dcyy_delete_buffer (YY_BUFFER_STATE b ); -void dcyy_flush_buffer (YY_BUFFER_STATE b ); -void dcyypush_buffer_state (YY_BUFFER_STATE new_buffer ); -void dcyypop_buffer_state (void ); - -static void dcyyensure_buffer_stack (void ); -static void dcyy_load_buffer_state (void ); -static void dcyy_init_buffer (YY_BUFFER_STATE b,FILE *file ); - -#define YY_FLUSH_BUFFER dcyy_flush_buffer(YY_CURRENT_BUFFER ) - -YY_BUFFER_STATE dcyy_scan_buffer (char *base,yy_size_t size ); -YY_BUFFER_STATE dcyy_scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE dcyy_scan_bytes (yyconst char *bytes,int len ); - -void *dcyyalloc (yy_size_t ); -void *dcyyrealloc (void *,yy_size_t ); -void dcyyfree (void * ); - -#define yy_new_buffer dcyy_create_buffer - -#define yy_set_interactive(is_interactive) \ - { \ - if ( ! YY_CURRENT_BUFFER ){ \ - dcyyensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - dcyy_create_buffer(dcyyin,YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ - } - -#define yy_set_bol(at_bol) \ - { \ - if ( ! YY_CURRENT_BUFFER ){\ - dcyyensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - dcyy_create_buffer(dcyyin,YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ - } - -#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) - -typedef unsigned char YY_CHAR; - -FILE *dcyyin = (FILE *) 0, *dcyyout = (FILE *) 0; - -typedef int yy_state_type; - -extern int dcyylineno; - -int dcyylineno = 1; - -extern char *dcyytext; -#define yytext_ptr dcyytext - -static yy_state_type yy_get_previous_state (void ); -static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); -static int yy_get_next_buffer (void ); -static void yy_fatal_error (yyconst char msg[] ); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up dcyytext. - */ -#define YY_DO_BEFORE_ACTION \ - (yytext_ptr) = yy_bp; \ - dcyyleng = (size_t) (yy_cp - yy_bp); \ - (yy_hold_char) = *yy_cp; \ - *yy_cp = '\0'; \ - (yy_c_buf_p) = yy_cp; - -#define YY_NUM_RULES 44 -#define YY_END_OF_BUFFER 45 -/* This struct is not used in this scanner, - but its presence is necessary. */ -struct yy_trans_info - { - flex_int32_t yy_verify; - flex_int32_t yy_nxt; - }; -static yyconst flex_int16_t yy_accept[165] = - { 0, - 0, 0, 45, 43, 2, 1, 39, 40, 43, 43, - 43, 35, 35, 41, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 1, 0, 36, 38, 4, 3, - 38, 35, 37, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, - 3, 37, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 0, 38, 25, - 42, 12, 34, 42, 42, 42, 7, 42, 42, 42, - 42, 15, 42, 42, 42, 42, 42, 42, 42, 14, - 42, 42, 42, 42, 16, 17, 18, 42, 42, 42, - - 42, 42, 42, 42, 42, 42, 19, 26, 5, 42, - 42, 8, 42, 42, 42, 42, 24, 6, 11, 42, - 20, 21, 22, 42, 13, 23, 42, 42, 42, 9, - 10, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 27, 42, 42, 42, 42, 28, - 29, 42, 42, 42, 30, 31, 32, 42, 42, 42, - 42, 42, 33, 0 - } ; - -static yyconst flex_int32_t yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 4, 1, 1, 1, 1, 5, 1, - 1, 6, 7, 1, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 15, 17, 15, 1, 1, 18, - 1, 1, 1, 1, 19, 19, 19, 19, 20, 19, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 1, 1, 1, 1, 21, 1, 22, 23, 24, 25, - - 26, 27, 28, 29, 30, 21, 31, 32, 33, 34, - 35, 36, 21, 37, 38, 39, 40, 21, 41, 42, - 43, 21, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1 - } ; - -static yyconst flex_int32_t yy_meta[44] = - { 0, - 1, 1, 2, 1, 1, 1, 3, 4, 1, 5, - 5, 5, 5, 5, 5, 5, 5, 1, 6, 6, - 7, 6, 6, 6, 6, 6, 6, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 8, 7 - } ; - -static yyconst flex_int16_t yy_base[173] = - { 0, - 0, 0, 209, 210, 210, 0, 210, 210, 200, 0, - 38, 37, 38, 210, 0, 16, 27, 26, 22, 24, - 181, 21, 163, 175, 0, 0, 196, 35, 210, 0, - 0, 0, 0, 0, 168, 176, 163, 178, 167, 171, - 162, 161, 159, 155, 150, 155, 161, 154, 155, 181, - 0, 0, 164, 164, 159, 147, 161, 160, 159, 147, - 144, 52, 137, 34, 138, 150, 136, 167, 166, 159, - 140, 0, 0, 132, 129, 129, 0, 130, 150, 153, - 150, 141, 127, 127, 136, 135, 133, 59, 145, 0, - 118, 123, 138, 114, 130, 129, 0, 113, 112, 120, - - 108, 117, 119, 128, 131, 128, 119, 0, 0, 101, - 125, 0, 101, 100, 99, 110, 0, 0, 0, 107, - 111, 44, 0, 95, 0, 0, 94, 93, 107, 0, - 0, 91, 90, 96, 88, 102, 101, 79, 84, 83, - 85, 96, 74, 72, 0, 83, 76, 58, 43, 0, - 0, 40, 39, 64, 0, 0, 0, 56, 40, 36, - 49, 24, 0, 210, 84, 89, 46, 91, 95, 103, - 107, 111 - } ; - -static yyconst flex_int16_t yy_def[173] = - { 0, - 164, 1, 164, 164, 164, 165, 164, 164, 166, 167, - 164, 168, 168, 164, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 165, 167, 166, 167, 164, 170, - 28, 13, 171, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 172, - 170, 171, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 172, 172, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 0, 164, 164, 164, 164, 164, 164, - 164, 164 - } ; - -static yyconst flex_int16_t yy_nxt[254] = - { 0, - 4, 5, 6, 7, 8, 4, 9, 10, 11, 12, - 13, 13, 13, 13, 13, 13, 13, 14, 15, 15, - 15, 15, 16, 17, 18, 15, 19, 15, 15, 20, - 21, 15, 15, 15, 15, 15, 15, 22, 23, 24, - 15, 15, 15, 29, 31, 31, 30, 35, 37, 39, - 28, 40, 36, 41, 50, 38, 43, 44, 42, 46, - 50, 47, 79, 84, 80, 133, 163, 81, 82, 104, - 162, 105, 161, 85, 106, 107, 160, 159, 33, 164, - 158, 157, 156, 134, 25, 155, 25, 25, 25, 25, - 25, 25, 27, 27, 32, 32, 154, 153, 32, 34, - - 34, 34, 34, 51, 152, 51, 51, 51, 51, 51, - 51, 52, 52, 69, 151, 69, 150, 149, 148, 147, - 146, 145, 144, 143, 142, 141, 140, 139, 138, 137, - 136, 135, 132, 131, 130, 129, 128, 127, 126, 125, - 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, - 114, 113, 112, 111, 110, 109, 108, 103, 102, 101, - 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, - 90, 89, 164, 164, 88, 87, 86, 83, 78, 77, - 76, 75, 74, 73, 72, 71, 70, 68, 67, 66, - 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, - - 55, 54, 53, 31, 49, 48, 45, 26, 164, 3, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164 - } ; - -static yyconst flex_int16_t yy_chk[254] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 11, 12, 13, 11, 16, 17, 18, - 167, 18, 16, 19, 28, 17, 20, 20, 19, 22, - 28, 22, 62, 64, 62, 122, 162, 62, 62, 88, - 161, 88, 160, 64, 88, 88, 159, 158, 12, 13, - 154, 153, 152, 122, 165, 149, 165, 165, 165, 165, - 165, 165, 166, 166, 168, 168, 148, 147, 168, 169, - - 169, 169, 169, 170, 146, 170, 170, 170, 170, 170, - 170, 171, 171, 172, 144, 172, 143, 142, 141, 140, - 139, 138, 137, 136, 135, 134, 133, 132, 129, 128, - 127, 124, 121, 120, 116, 115, 114, 113, 111, 110, - 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, - 96, 95, 94, 93, 92, 91, 89, 87, 86, 85, - 84, 83, 82, 81, 80, 79, 78, 76, 75, 74, - 71, 70, 69, 68, 67, 66, 65, 63, 61, 60, - 59, 58, 57, 56, 55, 54, 53, 50, 49, 48, - 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, - - 37, 36, 35, 27, 24, 23, 21, 9, 3, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164 - } ; - -static yy_state_type yy_last_accepting_state; -static char *yy_last_accepting_cpos; - -extern int dcyy_flex_debug; -int dcyy_flex_debug = 0; - -/* The intent behind this definition is that it'll catch - * any uses of REJECT which flex missed. - */ -#define REJECT reject_used_but_not_detected -#define yymore() yymore_used_but_not_detected -#define YY_MORE_ADJ 0 -#define YY_RESTORE_YY_MORE_OFFSET -char *dcyytext; -#line 1 "dcLexer.lxx" -/* -// Filename: dcLexer.lxx -// Created by: drose (05Oct00) -// -//////////////////////////////////////////////////////////////////// -*/ -#line 9 "dcLexer.lxx" -#include "dcLexerDefs.h" -#include "dcParserDefs.h" -#include "dcParser.h" -#include "dcFile.h" -#include "dcindent.h" -#include "pstrtod.h" - - -static int yyinput(void); // declared by flex. -extern "C" int dcyywrap(); - -//////////////////////////////////////////////////////////////////// -// Static variables -//////////////////////////////////////////////////////////////////// - -// We'll increment line_number and col_number as we parse the file, so -// that we can report the position of an error. -static int line_number = 0; -static int col_number = 0; - -// current_line holds as much of the current line as will fit. Its -// only purpose is for printing it out to report an error to the user. -static const int max_error_width = 1024; -static char current_line[max_error_width + 1]; - -static int error_count = 0; -static int warning_count = 0; - -// This is the pointer to the current input stream. -static istream *inp = NULL; - -// This is the name of the dc file we're parsing. We keep it so we -// can print it out for error messages. -static string dc_filename; - -// This is the initial token state returned by the lexer. It allows -// the yacc grammar to start from initial points. -static int initial_token; - - -//////////////////////////////////////////////////////////////////// -// Defining the interface to the lexer. -//////////////////////////////////////////////////////////////////// - -void -dc_init_lexer(istream &in, const string &filename) { - inp = ∈ - dc_filename = filename; - line_number = 0; - col_number = 0; - error_count = 0; - warning_count = 0; - initial_token = START_DC; -} - -void -dc_start_parameter_value() { - /* Set the initial state to begin parsing a parameter value, instead - of at the beginning of the dc file. */ - initial_token = START_PARAMETER_VALUE; -} - -void -dc_start_parameter_description() { - /* Set the initial state to begin parsing a parameter description, instead - of at the beginning of the dc file. */ - initial_token = START_PARAMETER_DESCRIPTION; -} - -int -dc_error_count() { - return error_count; -} - -int -dc_warning_count() { - return warning_count; -} - - -//////////////////////////////////////////////////////////////////// -// Internal support functions. -//////////////////////////////////////////////////////////////////// - -int -dcyywrap(void) { - return 1; -} - -void -dcyyerror(const string &msg) { - cerr << "\nError"; - if (!dc_filename.empty()) { - cerr << " in " << dc_filename; - } - cerr - << " at line " << line_number << ", column " << col_number << ":\n" - << current_line << "\n"; - indent(cerr, col_number-1) - << "^\n" << msg << "\n\n"; - - error_count++; -} - -void -dcyywarning(const string &msg) { - cerr << "\nWarning"; - if (!dc_filename.empty()) { - cerr << " in " << dc_filename; - } - cerr - << " at line " << line_number << ", column " << col_number << ":\n" - << current_line << "\n"; - indent(cerr, col_number-1) - << "^\n" << msg << "\n\n"; - - warning_count++; -} - -// Now define a function to take input from an istream instead of a -// stdio FILE pointer. This is flex-specific. -static void -input_chars(char *buffer, int &result, int max_size) { - nassertv(inp != NULL); - if (*inp) { - inp->read(buffer, max_size); - result = inp->gcount(); - if (result >= 0 && result < max_size) { - // Truncate at the end of the read. - buffer[result] = '\0'; - } - - if (line_number == 0) { - // This is a special case. If we are reading the very first bit - // from the stream, copy it into the current_line array. This - // is because the \n.* rule below, which fills current_line - // normally, doesn't catch the first line. - strncpy(current_line, dcyytext, max_error_width); - current_line[max_error_width] = '\0'; - line_number++; - col_number = 0; - - // Truncate it at the newline. - char *end = strchr(current_line, '\n'); - if (end != NULL) { - *end = '\0'; - } - } - - } else { - // End of file or I/O error. - result = 0; - } -} -#undef YY_INPUT -#define YY_INPUT(buffer, result, max_size) input_chars(buffer, result, max_size) - -// read_char reads and returns a single character, incrementing the -// supplied line and column numbers as appropriate. A convenience -// function for the scanning functions below. -static int -read_char(int &line, int &col) { - int c = yyinput(); - if (c == '\n') { - line++; - col = 0; - } else { - col++; - } - return c; -} - -// scan_quoted_string reads a string delimited by quotation marks and -// returns it. -static string -scan_quoted_string(char quote_mark) { - string result; - - // We don't touch the current line number and column number during - // scanning, so that if we detect an error while scanning the string - // (e.g. an unterminated string), we'll report the error as - // occurring at the start of the string, not at the end--somewhat - // more convenient for the user. - - // Instead of adjusting the global line_number and col_number - // variables, we'll operate on our own local variables for the - // interim. - int line = line_number; - int col = col_number; - - int c; - c = read_char(line, col); - while (c != quote_mark && c != EOF) { - // A newline is not allowed within a string unless it is escaped. - if (c == '\n') { - c = EOF; - break; - - } else if (c == '\\') { - // Backslash escapes the following character. We also respect - // some C conventions. - c = read_char(line, col); - switch (c) { - case 'a': - result += '\a'; - c = read_char(line, col); - break; - - case 'n': - result += '\n'; - c = read_char(line, col); - break; - - case 'r': - result += '\r'; - c = read_char(line, col); - break; - - case 't': - result += '\t'; - c = read_char(line, col); - break; - - case 'x': - { - int hex = 0; - c = read_char(line, col); - for (int i = 0; i < 2 && isxdigit(c); i++) { - hex = hex * 16 + (isdigit(c) ? c - '0' : tolower(c) - 'a' + 10); - c = read_char(line, col); - } - - result += hex; - } - break; - - case '0': - { - int oct = 0; - c = read_char(line, col); - for (int i = 0; i < 3 && (c >= '0' && c < '7'); i++) { - oct = oct * 8 + (c - '0'); - c = read_char(line, col); - } - - result += oct; - } - break; - - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - int dec = 0; - c = read_char(line, col); - for (int i = 0; i < 3 && isdigit(c); i++) { - dec = dec * 10 + (c - '0'); - c = read_char(line, col); - } - - result += dec; - } - break; - - case EOF: - break; - - default: - result += c; - c = read_char(line, col); - } - - } else { - result += c; - c = read_char(line, col); - } - } - - if (c == EOF) { - dcyyerror("This quotation mark is unterminated."); - } - - line_number = line; - col_number = col; - - return result; -} - -// scan_hex_string reads a string of hexadecimal digits delimited by -// angle brackets and returns the representative string. -static string -scan_hex_string() { - string result; - - // We don't touch the current line number and column number during - // scanning, so that if we detect an error while scanning the string - // (e.g. an unterminated string), we'll report the error as - // occurring at the start of the string, not at the end--somewhat - // more convenient for the user. - - // Instead of adjusting the global line_number and col_number - // variables, we'll operate on our own local variables for the - // interim. - int line = line_number; - int col = col_number; - - bool odd = false; - int last = 0; - int c; - c = read_char(line, col); - while (c != '>' && c != EOF) { - int value; - if (c >= '0' && c <= '9') { - value = c - '0'; - } else if (c >= 'a' && c <= 'f') { - value = c - 'a' + 10; - } else if (c >= 'A' && c <= 'F') { - value = c - 'A' + 10; - } else { - line_number = line; - col_number = col; - dcyyerror("Invalid hex digit."); - return string(); - } - - odd = !odd; - if (odd) { - last = value; - } else { - result += (char)((last << 4) | value); - } - c = read_char(line, col); - } - - if (c == EOF) { - dcyyerror("This hex string is unterminated."); - return string(); - } else if (odd) { - dcyyerror("Odd number of hex digits."); - return string(); - } - - line_number = line; - col_number = col; - - return result; -} - -// eat_c_comment scans past all characters up until the first */ -// encountered. -static void -eat_c_comment() { - // As above, we'll operate on our own local copies of line_number - // and col_number within this function. - - int line = line_number; - int col = col_number; - - int c, last_c; - - last_c = '\0'; - c = read_char(line, col); - while (c != EOF && !(last_c == '*' && c == '/')) { - if (last_c == '/' && c == '*') { - dcyywarning("This comment contains a nested /* symbol--possibly unclosed?"); - } - last_c = c; - c = read_char(line, col); - } - - if (c == EOF) { - dcyyerror("This comment marker is unclosed."); - } - - line_number = line; - col_number = col; -} - - - -// accept() is called below as each piece is pulled off and -// accepted by the lexer; it increments the current column number. -inline void accept() { - col_number += dcyyleng; -} - -#line 977 "lex.yy.c" - -#define INITIAL 0 - -#ifndef YY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -#endif - -#ifndef YY_EXTRA_TYPE -#define YY_EXTRA_TYPE void * -#endif - -static int yy_init_globals (void ); - -/* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - -int dcyylex_destroy (void ); - -int dcyyget_debug (void ); - -void dcyyset_debug (int debug_flag ); - -YY_EXTRA_TYPE dcyyget_extra (void ); - -void dcyyset_extra (YY_EXTRA_TYPE user_defined ); - -FILE *dcyyget_in (void ); - -void dcyyset_in (FILE * in_str ); - -FILE *dcyyget_out (void ); - -void dcyyset_out (FILE * out_str ); - -int dcyyget_leng (void ); - -char *dcyyget_text (void ); - -int dcyyget_lineno (void ); - -void dcyyset_lineno (int line_number ); - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int dcyywrap (void ); -#else -extern int dcyywrap (void ); -#endif -#endif - - static void yyunput (int c,char *buf_ptr ); - -#ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int ); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * ); -#endif - -#ifndef YY_NO_INPUT - -#ifdef __cplusplus -static int yyinput (void ); -#else -static int input (void ); -#endif - -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Copy whatever the last rule matched to the standard output. */ -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO fwrite( dcyytext, dcyyleng, 1, dcyyout ) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ - { \ - int c = '*'; \ - int n; \ - for ( n = 0; n < max_size && \ - (c = getc( dcyyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( dcyyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else \ - { \ - errno=0; \ - while ( (result = fread(buf, 1, max_size, dcyyin))==0 && ferror(dcyyin)) \ - { \ - if( errno != EINTR) \ - { \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - break; \ - } \ - errno=0; \ - clearerr(dcyyin); \ - } \ - }\ -\ - -#endif - -/* No semi-colon after return; correct usage is to write "yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef yyterminate -#define yyterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) -#endif - -/* end tables serialization structures and prototypes */ - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL_IS_OURS 1 - -extern int dcyylex (void); - -#define YY_DECL int dcyylex (void) -#endif /* !YY_DECL */ - -/* Code executed at the beginning of each rule, after dcyytext and dcyyleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK break; -#endif - -#define YY_RULE_SETUP \ - YY_USER_ACTION - -/** The main scanner function which does all the work. - */ -YY_DECL -{ - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; - -#line 408 "dcLexer.lxx" - - - - if (initial_token != 0) { - int t = initial_token; - initial_token = 0; - return t; - } - - -#line 1170 "lex.yy.c" - - if ( !(yy_init) ) - { - (yy_init) = 1; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! (yy_start) ) - (yy_start) = 1; /* first start state */ - - if ( ! dcyyin ) - dcyyin = stdin; - - if ( ! dcyyout ) - dcyyout = stdout; - - if ( ! YY_CURRENT_BUFFER ) { - dcyyensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - dcyy_create_buffer(dcyyin,YY_BUF_SIZE ); - } - - dcyy_load_buffer_state( ); - } - - while ( 1 ) /* loops until end-of-file is reached */ - { - yy_cp = (yy_c_buf_p); - - /* Support of dcyytext. */ - *yy_cp = (yy_hold_char); - - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - - yy_current_state = (yy_start); -yy_match: - do - { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 165 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - ++yy_cp; - } - while ( yy_base[yy_current_state] != 210 ); - -yy_find_action: - yy_act = yy_accept[yy_current_state]; - if ( yy_act == 0 ) - { /* have to back up */ - yy_cp = (yy_last_accepting_cpos); - yy_current_state = (yy_last_accepting_state); - yy_act = yy_accept[yy_current_state]; - } - - YY_DO_BEFORE_ACTION; - -do_action: /* This label is used only to access EOF actions. */ - - switch ( yy_act ) - { /* beginning of action switch */ - case 0: /* must back up */ - /* undo the effects of YY_DO_BEFORE_ACTION */ - *yy_cp = (yy_hold_char); - yy_cp = (yy_last_accepting_cpos); - yy_current_state = (yy_last_accepting_state); - goto yy_find_action; - -case 1: -/* rule 1 can match eol */ -YY_RULE_SETUP -#line 418 "dcLexer.lxx" -{ - // New line. Save a copy of the line so we can print it out for the - // benefit of the user in case we get an error. - - strncpy(current_line, dcyytext+1, max_error_width); - current_line[max_error_width] = '\0'; - line_number++; - col_number=0; - - // Return the whole line to the lexer, except the newline character, - // which we eat. - yyless(1); -} - YY_BREAK -case 2: -YY_RULE_SETUP -#line 432 "dcLexer.lxx" -{ - // Eat whitespace. - accept(); -} - YY_BREAK -case 3: -YY_RULE_SETUP -#line 437 "dcLexer.lxx" -{ - // Eat C++-style comments. - accept(); -} - YY_BREAK -case 4: -YY_RULE_SETUP -#line 442 "dcLexer.lxx" -{ - // Eat C-style comments. - accept(); - eat_c_comment(); -} - YY_BREAK -case 5: -YY_RULE_SETUP -#line 449 "dcLexer.lxx" -{ - accept(); - return KW_DCLASS; -} - YY_BREAK -case 6: -YY_RULE_SETUP -#line 454 "dcLexer.lxx" -{ - accept(); - return KW_STRUCT; -} - YY_BREAK -case 7: -YY_RULE_SETUP -#line 459 "dcLexer.lxx" -{ - accept(); - return KW_FROM; -} - YY_BREAK -case 8: -YY_RULE_SETUP -#line 464 "dcLexer.lxx" -{ - accept(); - return KW_IMPORT; -} - YY_BREAK -case 9: -YY_RULE_SETUP -#line 469 "dcLexer.lxx" -{ - accept(); - return KW_KEYWORD; -} - YY_BREAK -case 10: -YY_RULE_SETUP -#line 474 "dcLexer.lxx" -{ - accept(); - return KW_TYPEDEF; -} - YY_BREAK -case 11: -YY_RULE_SETUP -#line 479 "dcLexer.lxx" -{ - accept(); - return KW_SWITCH; -} - YY_BREAK -case 12: -YY_RULE_SETUP -#line 484 "dcLexer.lxx" -{ - accept(); - return KW_CASE; -} - YY_BREAK -case 13: -YY_RULE_SETUP -#line 489 "dcLexer.lxx" -{ - accept(); - return KW_DEFAULT; -} - YY_BREAK -case 14: -YY_RULE_SETUP -#line 494 "dcLexer.lxx" -{ - accept(); - return KW_BREAK; -} - YY_BREAK -case 15: -YY_RULE_SETUP -#line 499 "dcLexer.lxx" -{ - accept(); - return KW_INT8; -} - YY_BREAK -case 16: -YY_RULE_SETUP -#line 504 "dcLexer.lxx" -{ - accept(); - return KW_INT16; -} - YY_BREAK -case 17: -YY_RULE_SETUP -#line 509 "dcLexer.lxx" -{ - accept(); - return KW_INT32; -} - YY_BREAK -case 18: -YY_RULE_SETUP -#line 514 "dcLexer.lxx" -{ - accept(); - return KW_INT64; -} - YY_BREAK -case 19: -YY_RULE_SETUP -#line 519 "dcLexer.lxx" -{ - accept(); - return KW_UINT8; -} - YY_BREAK -case 20: -YY_RULE_SETUP -#line 524 "dcLexer.lxx" -{ - accept(); - return KW_UINT16; -} - YY_BREAK -case 21: -YY_RULE_SETUP -#line 529 "dcLexer.lxx" -{ - accept(); - return KW_UINT32; -} - YY_BREAK -case 22: -YY_RULE_SETUP -#line 534 "dcLexer.lxx" -{ - accept(); - return KW_UINT64; -} - YY_BREAK -case 23: -YY_RULE_SETUP -#line 539 "dcLexer.lxx" -{ - accept(); - return KW_FLOAT64; -} - YY_BREAK -case 24: -YY_RULE_SETUP -#line 544 "dcLexer.lxx" -{ - accept(); - return KW_STRING; -} - YY_BREAK -case 25: -YY_RULE_SETUP -#line 549 "dcLexer.lxx" -{ - accept(); - return KW_BLOB; -} - YY_BREAK -case 26: -YY_RULE_SETUP -#line 554 "dcLexer.lxx" -{ - accept(); - return KW_BLOB32; -} - YY_BREAK -case 27: -YY_RULE_SETUP -#line 559 "dcLexer.lxx" -{ - accept(); - return KW_INT8ARRAY; -} - YY_BREAK -case 28: -YY_RULE_SETUP -#line 564 "dcLexer.lxx" -{ - accept(); - return KW_INT16ARRAY; -} - YY_BREAK -case 29: -YY_RULE_SETUP -#line 569 "dcLexer.lxx" -{ - accept(); - return KW_INT32ARRAY; -} - YY_BREAK -case 30: -YY_RULE_SETUP -#line 574 "dcLexer.lxx" -{ - accept(); - return KW_UINT8ARRAY; -} - YY_BREAK -case 31: -YY_RULE_SETUP -#line 579 "dcLexer.lxx" -{ - accept(); - return KW_UINT16ARRAY; -} - YY_BREAK -case 32: -YY_RULE_SETUP -#line 584 "dcLexer.lxx" -{ - accept(); - return KW_UINT32ARRAY; -} - YY_BREAK -case 33: -YY_RULE_SETUP -#line 589 "dcLexer.lxx" -{ - accept(); - return KW_UINT32UINT8ARRAY; -} - YY_BREAK -case 34: -YY_RULE_SETUP -#line 594 "dcLexer.lxx" -{ - accept(); - return KW_CHAR; -} - YY_BREAK -case 35: -YY_RULE_SETUP -#line 599 "dcLexer.lxx" -{ - // An unsigned integer number. - accept(); - - // atoll isn't fully portable, so we'll decode the integer by hand. - dcyylval.str = dcyytext; - dcyylval.u.uint64 = 0; - const char *p = dcyytext; - while (*p != '\0') { - PN_uint64 next_value = dcyylval.u.uint64 * 10; - if (next_value < dcyylval.u.uint64) { - dcyyerror("Number out of range."); - dcyylval.u.uint64 = 1; - return UNSIGNED_INTEGER; - } - - dcyylval.u.uint64 = next_value + (*p - '0'); - ++p; - } - - return UNSIGNED_INTEGER; -} - YY_BREAK -case 36: -YY_RULE_SETUP -#line 622 "dcLexer.lxx" -{ - // A signed integer number. - accept(); - - // atoll isn't fully portable, so we'll decode the integer by hand. - dcyylval.str = dcyytext; - - bool neg = false; - const char *p = dcyytext; - if (*p == '-') { - neg = true; - ++p; - } else if (*p == '+') { - ++p; - } - - PN_uint64 value = 0; - while (*p != '\0') { - PN_uint64 next_value = value * 10; - if (next_value < value) { - dcyyerror("Number out of range."); - dcyylval.u.int64 = 1; - return SIGNED_INTEGER; - } - - value = next_value + (*p - '0'); - ++p; - } - - if (neg) { - dcyylval.u.int64 = -(PN_int64)value; - if (dcyylval.u.int64 > 0) { - dcyyerror("Number out of range."); - dcyylval.u.int64 = 1; - } - } else { - dcyylval.u.int64 = (PN_int64)value; - if (dcyylval.u.int64 < 0) { - dcyyerror("Number out of range."); - dcyylval.u.int64 = 1; - } - } - - return SIGNED_INTEGER; -} - YY_BREAK -case 37: -YY_RULE_SETUP -#line 668 "dcLexer.lxx" -{ - // A hexadecimal integer number. - accept(); - - // As above, we'll decode the hex string by hand. - dcyylval.str = dcyytext; - dcyylval.u.uint64 = 0; - const char *p = dcyytext + 2; - while (*p != '\0') { - PN_uint64 next_value = dcyylval.u.uint64 * 16; - if (next_value < dcyylval.u.uint64) { - dcyyerror("Number out of range."); - dcyylval.u.uint64 = 1; - return UNSIGNED_INTEGER; - } - - if (isalpha(*p)) { - dcyylval.u.uint64 = next_value + (tolower(*p) - 'a' + 10); - } else { - dcyylval.u.uint64 = next_value + (*p - '0'); - } - ++p; - } - - return UNSIGNED_INTEGER; -} - YY_BREAK -case 38: -YY_RULE_SETUP -#line 695 "dcLexer.lxx" -{ - // A floating-point number. - accept(); - dcyylval.u.real = patof(dcyytext); - dcyylval.str = dcyytext; - return REAL; -} - YY_BREAK -case 39: -YY_RULE_SETUP -#line 703 "dcLexer.lxx" -{ - // Quoted string. - accept(); - dcyylval.str = scan_quoted_string('"'); - return STRING; -} - YY_BREAK -case 40: -YY_RULE_SETUP -#line 710 "dcLexer.lxx" -{ - // Single-quoted string. - accept(); - dcyylval.str = scan_quoted_string('\''); - return STRING; -} - YY_BREAK -case 41: -YY_RULE_SETUP -#line 717 "dcLexer.lxx" -{ - // Long hex string. - accept(); - dcyylval.str = scan_hex_string(); - return HEX_STRING; -} - YY_BREAK -case 42: -YY_RULE_SETUP -#line 724 "dcLexer.lxx" -{ - // Identifier or keyword. - accept(); - dcyylval.str = dcyytext; - - if (dc_file != (DCFile *)NULL) { - const DCKeyword *keyword = dc_file->get_keyword_by_name(dcyylval.str); - if (keyword != (DCKeyword *)NULL) { - dcyylval.u.keyword = keyword; - return KEYWORD; - } - } - return IDENTIFIER; -} - YY_BREAK -case 43: -YY_RULE_SETUP -#line 740 "dcLexer.lxx" -{ - // Send any other printable character as itself. - accept(); - return dcyytext[0]; -} - YY_BREAK -case 44: -YY_RULE_SETUP -#line 746 "dcLexer.lxx" -ECHO; - YY_BREAK -#line 1714 "lex.yy.c" -case YY_STATE_EOF(INITIAL): - yyterminate(); - - case YY_END_OF_BUFFER: - { - /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = (yy_hold_char); - YY_RESTORE_YY_MORE_OFFSET - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed dcyyin at a new source and called - * dcyylex(). If so, then we have to assure - * consistency between YY_CURRENT_BUFFER and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - YY_CURRENT_BUFFER_LVALUE->yy_input_file = dcyyin; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; - } - - /* Note that here we test for yy_c_buf_p "<=" to the position - * of the first EOB in the buffer, since yy_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) - { /* This was really a NUL. */ - yy_state_type yy_next_state; - - (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( ); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * yy_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - yy_next_state = yy_try_NUL_trans( yy_current_state ); - - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - - if ( yy_next_state ) - { - /* Consume the NUL. */ - yy_cp = ++(yy_c_buf_p); - yy_current_state = yy_next_state; - goto yy_match; - } - - else - { - yy_cp = (yy_c_buf_p); - goto yy_find_action; - } - } - - else switch ( yy_get_next_buffer( ) ) - { - case EOB_ACT_END_OF_FILE: - { - (yy_did_buffer_switch_on_eof) = 0; - - if ( dcyywrap( ) ) - { - /* Note: because we've taken care in - * yy_get_next_buffer() to have set up - * dcyytext, we can now set up - * yy_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; - - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! (yy_did_buffer_switch_on_eof) ) - YY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - (yy_c_buf_p) = - (yytext_ptr) + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( ); - - yy_cp = (yy_c_buf_p); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - goto yy_match; - - case EOB_ACT_LAST_MATCH: - (yy_c_buf_p) = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; - - yy_current_state = yy_get_previous_state( ); - - yy_cp = (yy_c_buf_p); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - goto yy_find_action; - } - break; - } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ -} /* end of dcyylex */ - -/* yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ -static int yy_get_next_buffer (void) -{ - register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - register char *source = (yytext_ptr); - register int number_to_move, i; - int ret_val; - - if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) - { - /* We matched a single character, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } - } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; - - else - { - int num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER; - - int yy_c_buf_p_offset = - (int) ((yy_c_buf_p) - b->yy_ch_buf); - - if ( b->yy_is_our_buffer ) - { - int new_size = b->yy_buf_size * 2; - - if ( new_size <= 0 ) - b->yy_buf_size += b->yy_buf_size / 8; - else - b->yy_buf_size *= 2; - - b->yy_ch_buf = (char *) - /* Include room in for 2 EOB chars. */ - dcyyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); - } - else - /* Can't grow it, we don't own it. */ - b->yy_ch_buf = 0; - - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( - "fatal error - scanner input buffer overflow" ); - - (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; - - num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - - number_to_move - 1; - - } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - (yy_n_chars), (size_t) num_to_read ); - - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - if ( (yy_n_chars) == 0 ) - { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - dcyyrestart(dcyyin ); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = - YY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { - /* Extend the array by 50%, plus the number we really need. */ - yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) dcyyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); - if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); - } - - (yy_n_chars) += number_to_move; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; - - (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; - - return ret_val; -} - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - - static yy_state_type yy_get_previous_state (void) -{ - register yy_state_type yy_current_state; - register char *yy_cp; - - yy_current_state = (yy_start); - - for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) - { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 165 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - } - - return yy_current_state; -} - -/* yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = yy_try_NUL_trans( current_state ); - */ - static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) -{ - register int yy_is_jam; - register char *yy_cp = (yy_c_buf_p); - - register YY_CHAR yy_c = 1; - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 165 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 164); - - return yy_is_jam ? 0 : yy_current_state; -} - - static void yyunput (int c, register char * yy_bp ) -{ - register char *yy_cp; - - yy_cp = (yy_c_buf_p); - - /* undo effects of setting up dcyytext */ - *yy_cp = (yy_hold_char); - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - { /* need to shift things up to make room */ - /* +2 for EOB chars. */ - register int number_to_move = (yy_n_chars) + 2; - register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ - YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; - register char *source = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; - - while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - *--dest = *--source; - - yy_cp += (int) (dest - source); - yy_bp += (int) (dest - source); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - YY_FATAL_ERROR( "flex scanner push-back overflow" ); - } - - *--yy_cp = (char) c; - - (yytext_ptr) = yy_bp; - (yy_hold_char) = *yy_cp; - (yy_c_buf_p) = yy_cp; -} - -#ifndef YY_NO_INPUT -#ifdef __cplusplus - static int yyinput (void) -#else - static int input (void) -#endif - -{ - int c; - - *(yy_c_buf_p) = (yy_hold_char); - - if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) - { - /* yy_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) - /* This was really a NUL. */ - *(yy_c_buf_p) = '\0'; - - else - { /* need more input */ - int offset = (yy_c_buf_p) - (yytext_ptr); - ++(yy_c_buf_p); - - switch ( yy_get_next_buffer( ) ) - { - case EOB_ACT_LAST_MATCH: - /* This happens because yy_g_n_b() - * sees that we've accumulated a - * token and flags that we need to - * try matching the token before - * proceeding. But for input(), - * there's no matching to consider. - * So convert the EOB_ACT_LAST_MATCH - * to EOB_ACT_END_OF_FILE. - */ - - /* Reset buffer status. */ - dcyyrestart(dcyyin ); - - /*FALLTHROUGH*/ - - case EOB_ACT_END_OF_FILE: - { - if ( dcyywrap( ) ) - return EOF; - - if ( ! (yy_did_buffer_switch_on_eof) ) - YY_NEW_FILE; -#ifdef __cplusplus - return yyinput(); -#else - return input(); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - (yy_c_buf_p) = (yytext_ptr) + offset; - break; - } - } - } - - c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ - *(yy_c_buf_p) = '\0'; /* preserve dcyytext */ - (yy_hold_char) = *++(yy_c_buf_p); - - return c; -} -#endif /* ifndef YY_NO_INPUT */ - -/** Immediately switch to a different input stream. - * @param input_file A readable stream. - * - * @note This function does not reset the start condition to @c INITIAL . - */ - void dcyyrestart (FILE * input_file ) -{ - - if ( ! YY_CURRENT_BUFFER ){ - dcyyensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - dcyy_create_buffer(dcyyin,YY_BUF_SIZE ); - } - - dcyy_init_buffer(YY_CURRENT_BUFFER,input_file ); - dcyy_load_buffer_state( ); -} - -/** Switch to a different input buffer. - * @param new_buffer The new input buffer. - * - */ - void dcyy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) -{ - - /* TODO. We should be able to replace this entire function body - * with - * dcyypop_buffer_state(); - * dcyypush_buffer_state(new_buffer); - */ - dcyyensure_buffer_stack (); - if ( YY_CURRENT_BUFFER == new_buffer ) - return; - - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(yy_c_buf_p) = (yy_hold_char); - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - YY_CURRENT_BUFFER_LVALUE = new_buffer; - dcyy_load_buffer_state( ); - - /* We don't actually know whether we did this switch during - * EOF (dcyywrap()) processing, but the only time this flag - * is looked at is after dcyywrap() is called, so it's safe - * to go ahead and always set it. - */ - (yy_did_buffer_switch_on_eof) = 1; -} - -static void dcyy_load_buffer_state (void) -{ - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; - dcyyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; - (yy_hold_char) = *(yy_c_buf_p); -} - -/** Allocate and initialize an input buffer state. - * @param file A readable stream. - * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. - * - * @return the allocated buffer state. - */ - YY_BUFFER_STATE dcyy_create_buffer (FILE * file, int size ) -{ - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) dcyyalloc(sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in dcyy_create_buffer()" ); - - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->yy_ch_buf = (char *) dcyyalloc(b->yy_buf_size + 2 ); - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in dcyy_create_buffer()" ); - - b->yy_is_our_buffer = 1; - - dcyy_init_buffer(b,file ); - - return b; -} - -/** Destroy the buffer. - * @param b a buffer created with dcyy_create_buffer() - * - */ - void dcyy_delete_buffer (YY_BUFFER_STATE b ) -{ - - if ( ! b ) - return; - - if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ - YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; - - if ( b->yy_is_our_buffer ) - dcyyfree((void *) b->yy_ch_buf ); - - dcyyfree((void *) b ); -} - -#ifndef __cplusplus -extern int isatty (int ); -#endif /* __cplusplus */ - -/* Initializes or reinitializes a buffer. - * This function is sometimes called more than once on the same buffer, - * such as during a dcyyrestart() or at EOF. - */ - static void dcyy_init_buffer (YY_BUFFER_STATE b, FILE * file ) - -{ - int oerrno = errno; - - dcyy_flush_buffer(b ); - - b->yy_input_file = file; - b->yy_fill_buffer = 1; - - /* If b is the current buffer, then dcyy_init_buffer was _probably_ - * called from dcyyrestart() or through yy_get_next_buffer. - * In that case, we don't want to reset the lineno or column. - */ - if (b != YY_CURRENT_BUFFER){ - b->yy_bs_lineno = 1; - b->yy_bs_column = 0; - } - - b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; - - errno = oerrno; -} - -/** Discard all buffered characters. On the next scan, YY_INPUT will be called. - * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. - * - */ - void dcyy_flush_buffer (YY_BUFFER_STATE b ) -{ - if ( ! b ) - return; - - b->yy_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->yy_buf_pos = &b->yy_ch_buf[0]; - - b->yy_at_bol = 1; - b->yy_buffer_status = YY_BUFFER_NEW; - - if ( b == YY_CURRENT_BUFFER ) - dcyy_load_buffer_state( ); -} - -/** Pushes the new state onto the stack. The new state becomes - * the current state. This function will allocate the stack - * if necessary. - * @param new_buffer The new state. - * - */ -void dcyypush_buffer_state (YY_BUFFER_STATE new_buffer ) -{ - if (new_buffer == NULL) - return; - - dcyyensure_buffer_stack(); - - /* This block is copied from dcyy_switch_to_buffer. */ - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(yy_c_buf_p) = (yy_hold_char); - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - /* Only push if top exists. Otherwise, replace top. */ - if (YY_CURRENT_BUFFER) - (yy_buffer_stack_top)++; - YY_CURRENT_BUFFER_LVALUE = new_buffer; - - /* copied from dcyy_switch_to_buffer. */ - dcyy_load_buffer_state( ); - (yy_did_buffer_switch_on_eof) = 1; -} - -/** Removes and deletes the top of the stack, if present. - * The next element becomes the new top. - * - */ -void dcyypop_buffer_state (void) -{ - if (!YY_CURRENT_BUFFER) - return; - - dcyy_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - if ((yy_buffer_stack_top) > 0) - --(yy_buffer_stack_top); - - if (YY_CURRENT_BUFFER) { - dcyy_load_buffer_state( ); - (yy_did_buffer_switch_on_eof) = 1; - } -} - -/* Allocates the stack if it does not exist. - * Guarantees space for at least one push. - */ -static void dcyyensure_buffer_stack (void) -{ - int num_to_alloc; - - if (!(yy_buffer_stack)) { - - /* First allocation is just for 2 elements, since we don't know if this - * scanner will even need a stack. We use 2 instead of 1 to avoid an - * immediate realloc on the next call. - */ - num_to_alloc = 1; - (yy_buffer_stack) = (struct yy_buffer_state**)dcyyalloc - (num_to_alloc * sizeof(struct yy_buffer_state*) - ); - if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in dcyyensure_buffer_stack()" ); - - memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - - (yy_buffer_stack_max) = num_to_alloc; - (yy_buffer_stack_top) = 0; - return; - } - - if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ - - /* Increase the buffer to prepare for a possible push. */ - int grow_size = 8 /* arbitrary grow size */; - - num_to_alloc = (yy_buffer_stack_max) + grow_size; - (yy_buffer_stack) = (struct yy_buffer_state**)dcyyrealloc - ((yy_buffer_stack), - num_to_alloc * sizeof(struct yy_buffer_state*) - ); - if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in dcyyensure_buffer_stack()" ); - - /* zero only the new slots.*/ - memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); - (yy_buffer_stack_max) = num_to_alloc; - } -} - -/** Setup the input buffer state to scan directly from a user-specified character buffer. - * @param base the character buffer - * @param size the size in bytes of the character buffer - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE dcyy_scan_buffer (char * base, yy_size_t size ) -{ - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return 0; - - b = (YY_BUFFER_STATE) dcyyalloc(sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in dcyy_scan_buffer()" ); - - b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ - b->yy_buf_pos = b->yy_ch_buf = base; - b->yy_is_our_buffer = 0; - b->yy_input_file = 0; - b->yy_n_chars = b->yy_buf_size; - b->yy_is_interactive = 0; - b->yy_at_bol = 1; - b->yy_fill_buffer = 0; - b->yy_buffer_status = YY_BUFFER_NEW; - - dcyy_switch_to_buffer(b ); - - return b; -} - -/** Setup the input buffer state to scan a string. The next call to dcyylex() will - * scan from a @e copy of @a str. - * @param yystr a NUL-terminated string to scan - * - * @return the newly allocated buffer state object. - * @note If you want to scan bytes that may contain NUL values, then use - * dcyy_scan_bytes() instead. - */ -YY_BUFFER_STATE dcyy_scan_string (yyconst char * yystr ) -{ - - return dcyy_scan_bytes(yystr,strlen(yystr) ); -} - -/** Setup the input buffer state to scan the given bytes. The next call to dcyylex() will - * scan from a @e copy of @a bytes. - * @param bytes the byte buffer to scan - * @param len the number of bytes in the buffer pointed to by @a bytes. - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE dcyy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) -{ - YY_BUFFER_STATE b; - char *buf; - yy_size_t n; - int i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = _yybytes_len + 2; - buf = (char *) dcyyalloc(n ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in dcyy_scan_bytes()" ); - - for ( i = 0; i < _yybytes_len; ++i ) - buf[i] = yybytes[i]; - - buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - - b = dcyy_scan_buffer(buf,n ); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in dcyy_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->yy_is_our_buffer = 1; - - return b; -} - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -static void yy_fatal_error (yyconst char* msg ) -{ - (void) fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); -} - -/* Redefine yyless() so it works in section 3 code. */ - -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up dcyytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - dcyytext[dcyyleng] = (yy_hold_char); \ - (yy_c_buf_p) = dcyytext + yyless_macro_arg; \ - (yy_hold_char) = *(yy_c_buf_p); \ - *(yy_c_buf_p) = '\0'; \ - dcyyleng = yyless_macro_arg; \ - } \ - while ( 0 ) - -/* Accessor methods (get/set functions) to struct members. */ - -/** Get the current line number. - * - */ -int dcyyget_lineno (void) -{ - - return dcyylineno; -} - -/** Get the input stream. - * - */ -FILE *dcyyget_in (void) -{ - return dcyyin; -} - -/** Get the output stream. - * - */ -FILE *dcyyget_out (void) -{ - return dcyyout; -} - -/** Get the length of the current token. - * - */ -int dcyyget_leng (void) -{ - return dcyyleng; -} - -/** Get the current token. - * - */ - -char *dcyyget_text (void) -{ - return dcyytext; -} - -/** Set the current line number. - * @param line_number - * - */ -void dcyyset_lineno (int line_number ) -{ - - dcyylineno = line_number; -} - -/** Set the input stream. This does not discard the current - * input buffer. - * @param in_str A readable stream. - * - * @see dcyy_switch_to_buffer - */ -void dcyyset_in (FILE * in_str ) -{ - dcyyin = in_str ; -} - -void dcyyset_out (FILE * out_str ) -{ - dcyyout = out_str ; -} - -int dcyyget_debug (void) -{ - return dcyy_flex_debug; -} - -void dcyyset_debug (int bdebug ) -{ - dcyy_flex_debug = bdebug ; -} - -static int yy_init_globals (void) -{ - /* Initialization is the same as for the non-reentrant scanner. - * This function is called from dcyylex_destroy(), so don't allocate here. - */ - - (yy_buffer_stack) = 0; - (yy_buffer_stack_top) = 0; - (yy_buffer_stack_max) = 0; - (yy_c_buf_p) = (char *) 0; - (yy_init) = 0; - (yy_start) = 0; - -/* Defined in main.c */ -#ifdef YY_STDINIT - dcyyin = stdin; - dcyyout = stdout; -#else - dcyyin = (FILE *) 0; - dcyyout = (FILE *) 0; -#endif - - /* For future reference: Set errno on error, since we are called by - * dcyylex_init() - */ - return 0; -} - -/* dcyylex_destroy is for both reentrant and non-reentrant scanners. */ -int dcyylex_destroy (void) -{ - - /* Pop the buffer stack, destroying each element. */ - while(YY_CURRENT_BUFFER){ - dcyy_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - dcyypop_buffer_state(); - } - - /* Destroy the stack itself. */ - dcyyfree((yy_buffer_stack) ); - (yy_buffer_stack) = NULL; - - /* Reset the globals. This is important in a non-reentrant scanner so the next time - * dcyylex() is called, initialization will occur. */ - yy_init_globals( ); - - return 0; -} - -/* - * Internal utility routines. - */ - -#ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) -{ - register int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; -} -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * s ) -{ - register int n; - for ( n = 0; s[n]; ++n ) - ; - - return n; -} -#endif - -void *dcyyalloc (yy_size_t size ) -{ - return (void *) malloc( size ); -} - -void *dcyyrealloc (void * ptr, yy_size_t size ) -{ - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return (void *) realloc( (char *) ptr, size ); -} - -void dcyyfree (void * ptr ) -{ - free( (char *) ptr ); /* see dcyyrealloc() for (char *) cast */ -} - -#define YYTABLES_NAME "yytables" - -#line 746 "dcLexer.lxx" +#line 2 "lex.yy.c" + +#line 4 "lex.yy.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define yy_create_buffer dcyy_create_buffer +#define yy_delete_buffer dcyy_delete_buffer +#define yy_flex_debug dcyy_flex_debug +#define yy_init_buffer dcyy_init_buffer +#define yy_flush_buffer dcyy_flush_buffer +#define yy_load_buffer_state dcyy_load_buffer_state +#define yy_switch_to_buffer dcyy_switch_to_buffer +#define yyin dcyyin +#define yyleng dcyyleng +#define yylex dcyylex +#define yylineno dcyylineno +#define yyout dcyyout +#define yyrestart dcyyrestart +#define yytext dcyytext +#define yywrap dcyywrap +#define yyalloc dcyyalloc +#define yyrealloc dcyyrealloc +#define yyfree dcyyfree + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 35 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE dcyyrestart(dcyyin ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +extern int dcyyleng; + +extern FILE *dcyyin, *dcyyout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up dcyytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up dcyytext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, (yytext_ptr) ) + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via dcyyrestart()), so that the user can continue scanning by + * just pointing dcyyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when dcyytext is formed. */ +static char yy_hold_char; +static int yy_n_chars; /* number of characters read into yy_ch_buf */ +int dcyyleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = (char *) 0; +static int yy_init = 0; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow dcyywrap()'s to do buffer switches + * instead of setting up a fresh dcyyin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void dcyyrestart (FILE *input_file ); +void dcyy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE dcyy_create_buffer (FILE *file,int size ); +void dcyy_delete_buffer (YY_BUFFER_STATE b ); +void dcyy_flush_buffer (YY_BUFFER_STATE b ); +void dcyypush_buffer_state (YY_BUFFER_STATE new_buffer ); +void dcyypop_buffer_state (void ); + +static void dcyyensure_buffer_stack (void ); +static void dcyy_load_buffer_state (void ); +static void dcyy_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER dcyy_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE dcyy_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE dcyy_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE dcyy_scan_bytes (yyconst char *bytes,int len ); + +void *dcyyalloc (yy_size_t ); +void *dcyyrealloc (void *,yy_size_t ); +void dcyyfree (void * ); + +#define yy_new_buffer dcyy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + dcyyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + dcyy_create_buffer(dcyyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + dcyyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + dcyy_create_buffer(dcyyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +typedef unsigned char YY_CHAR; + +FILE *dcyyin = (FILE *) 0, *dcyyout = (FILE *) 0; + +typedef int yy_state_type; + +extern int dcyylineno; + +int dcyylineno = 1; + +extern char *dcyytext; +#define yytext_ptr dcyytext + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (yyconst char msg[] ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up dcyytext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + dcyyleng = (size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 44 +#define YY_END_OF_BUFFER 45 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[165] = + { 0, + 0, 0, 45, 43, 2, 1, 39, 40, 43, 43, + 43, 35, 35, 41, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 1, 0, 36, 38, 4, 3, + 38, 35, 37, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, + 3, 37, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 0, 38, 25, + 42, 12, 34, 42, 42, 42, 7, 42, 42, 42, + 42, 15, 42, 42, 42, 42, 42, 42, 42, 14, + 42, 42, 42, 42, 16, 17, 18, 42, 42, 42, + + 42, 42, 42, 42, 42, 42, 19, 26, 5, 42, + 42, 8, 42, 42, 42, 42, 24, 6, 11, 42, + 20, 21, 22, 42, 13, 23, 42, 42, 42, 9, + 10, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 27, 42, 42, 42, 42, 28, + 29, 42, 42, 42, 30, 31, 32, 42, 42, 42, + 42, 42, 33, 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 1, 4, 1, 1, 1, 1, 5, 1, + 1, 6, 7, 1, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 15, 17, 15, 1, 1, 18, + 1, 1, 1, 1, 19, 19, 19, 19, 20, 19, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 1, 1, 1, 1, 21, 1, 22, 23, 24, 25, + + 26, 27, 28, 29, 30, 21, 31, 32, 33, 34, + 35, 36, 21, 37, 38, 39, 40, 21, 41, 42, + 43, 21, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[44] = + { 0, + 1, 1, 2, 1, 1, 1, 3, 4, 1, 5, + 5, 5, 5, 5, 5, 5, 5, 1, 6, 6, + 7, 6, 6, 6, 6, 6, 6, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 8, 7 + } ; + +static yyconst flex_int16_t yy_base[173] = + { 0, + 0, 0, 209, 210, 210, 0, 210, 210, 200, 0, + 38, 37, 38, 210, 0, 16, 27, 26, 22, 24, + 181, 21, 163, 175, 0, 0, 196, 35, 210, 0, + 0, 0, 0, 0, 168, 176, 163, 178, 167, 171, + 162, 161, 159, 155, 150, 155, 161, 154, 155, 181, + 0, 0, 164, 164, 159, 147, 161, 160, 159, 147, + 144, 52, 137, 34, 138, 150, 136, 167, 166, 159, + 140, 0, 0, 132, 129, 129, 0, 130, 150, 153, + 150, 141, 127, 127, 136, 135, 133, 59, 145, 0, + 118, 123, 138, 114, 130, 129, 0, 113, 112, 120, + + 108, 117, 119, 128, 131, 128, 119, 0, 0, 101, + 125, 0, 101, 100, 99, 110, 0, 0, 0, 107, + 111, 44, 0, 95, 0, 0, 94, 93, 107, 0, + 0, 91, 90, 96, 88, 102, 101, 79, 84, 83, + 85, 96, 74, 72, 0, 83, 76, 58, 43, 0, + 0, 40, 39, 64, 0, 0, 0, 56, 40, 36, + 49, 24, 0, 210, 84, 89, 46, 91, 95, 103, + 107, 111 + } ; + +static yyconst flex_int16_t yy_def[173] = + { 0, + 164, 1, 164, 164, 164, 165, 164, 164, 166, 167, + 164, 168, 168, 164, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 165, 167, 166, 167, 164, 170, + 28, 13, 171, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 172, + 170, 171, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 172, 172, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 0, 164, 164, 164, 164, 164, 164, + 164, 164 + } ; + +static yyconst flex_int16_t yy_nxt[254] = + { 0, + 4, 5, 6, 7, 8, 4, 9, 10, 11, 12, + 13, 13, 13, 13, 13, 13, 13, 14, 15, 15, + 15, 15, 16, 17, 18, 15, 19, 15, 15, 20, + 21, 15, 15, 15, 15, 15, 15, 22, 23, 24, + 15, 15, 15, 29, 31, 31, 30, 35, 37, 39, + 28, 40, 36, 41, 50, 38, 43, 44, 42, 46, + 50, 47, 79, 84, 80, 133, 163, 81, 82, 104, + 162, 105, 161, 85, 106, 107, 160, 159, 33, 164, + 158, 157, 156, 134, 25, 155, 25, 25, 25, 25, + 25, 25, 27, 27, 32, 32, 154, 153, 32, 34, + + 34, 34, 34, 51, 152, 51, 51, 51, 51, 51, + 51, 52, 52, 69, 151, 69, 150, 149, 148, 147, + 146, 145, 144, 143, 142, 141, 140, 139, 138, 137, + 136, 135, 132, 131, 130, 129, 128, 127, 126, 125, + 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, + 114, 113, 112, 111, 110, 109, 108, 103, 102, 101, + 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, + 90, 89, 164, 164, 88, 87, 86, 83, 78, 77, + 76, 75, 74, 73, 72, 71, 70, 68, 67, 66, + 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, + + 55, 54, 53, 31, 49, 48, 45, 26, 164, 3, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164 + } ; + +static yyconst flex_int16_t yy_chk[254] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 11, 12, 13, 11, 16, 17, 18, + 167, 18, 16, 19, 28, 17, 20, 20, 19, 22, + 28, 22, 62, 64, 62, 122, 162, 62, 62, 88, + 161, 88, 160, 64, 88, 88, 159, 158, 12, 13, + 154, 153, 152, 122, 165, 149, 165, 165, 165, 165, + 165, 165, 166, 166, 168, 168, 148, 147, 168, 169, + + 169, 169, 169, 170, 146, 170, 170, 170, 170, 170, + 170, 171, 171, 172, 144, 172, 143, 142, 141, 140, + 139, 138, 137, 136, 135, 134, 133, 132, 129, 128, + 127, 124, 121, 120, 116, 115, 114, 113, 111, 110, + 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, + 96, 95, 94, 93, 92, 91, 89, 87, 86, 85, + 84, 83, 82, 81, 80, 79, 78, 76, 75, 74, + 71, 70, 69, 68, 67, 66, 65, 63, 61, 60, + 59, 58, 57, 56, 55, 54, 53, 50, 49, 48, + 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, + + 37, 36, 35, 27, 24, 23, 21, 9, 3, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164 + } ; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int dcyy_flex_debug; +int dcyy_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *dcyytext; +#line 1 "dcLexer.lxx" +/* +// Filename: dcLexer.lxx +// Created by: drose (05Oct00) +// +//////////////////////////////////////////////////////////////////// +*/ +#line 9 "dcLexer.lxx" +#include "dcLexerDefs.h" +#include "dcParserDefs.h" +#include "dcParser.h" +#include "dcFile.h" +#include "dcindent.h" +#include "pstrtod.h" + + +static int yyinput(void); // declared by flex. +extern "C" int dcyywrap(); + +//////////////////////////////////////////////////////////////////// +// Static variables +//////////////////////////////////////////////////////////////////// + +// We'll increment line_number and col_number as we parse the file, so +// that we can report the position of an error. +static int line_number = 0; +static int col_number = 0; + +// current_line holds as much of the current line as will fit. Its +// only purpose is for printing it out to report an error to the user. +static const int max_error_width = 1024; +static char current_line[max_error_width + 1]; + +static int error_count = 0; +static int warning_count = 0; + +// This is the pointer to the current input stream. +static istream *input_p = NULL; + +// This is the name of the dc file we're parsing. We keep it so we +// can print it out for error messages. +static string dc_filename; + +// This is the initial token state returned by the lexer. It allows +// the yacc grammar to start from initial points. +static int initial_token; + + +//////////////////////////////////////////////////////////////////// +// Defining the interface to the lexer. +//////////////////////////////////////////////////////////////////// + +void +dc_init_lexer(istream &in, const string &filename) { + input_p = ∈ + dc_filename = filename; + line_number = 0; + col_number = 0; + error_count = 0; + warning_count = 0; + initial_token = START_DC; +} + +void +dc_start_parameter_value() { + /* Set the initial state to begin parsing a parameter value, instead + of at the beginning of the dc file. */ + initial_token = START_PARAMETER_VALUE; +} + +void +dc_start_parameter_description() { + /* Set the initial state to begin parsing a parameter description, instead + of at the beginning of the dc file. */ + initial_token = START_PARAMETER_DESCRIPTION; +} + +int +dc_error_count() { + return error_count; +} + +int +dc_warning_count() { + return warning_count; +} + + +//////////////////////////////////////////////////////////////////// +// Internal support functions. +//////////////////////////////////////////////////////////////////// + +int +dcyywrap(void) { + return 1; +} + +void +dcyyerror(const string &msg) { + cerr << "\nError"; + if (!dc_filename.empty()) { + cerr << " in " << dc_filename; + } + cerr + << " at line " << line_number << ", column " << col_number << ":\n" + << current_line << "\n"; + indent(cerr, col_number-1) + << "^\n" << msg << "\n\n"; + + error_count++; +} + +void +dcyywarning(const string &msg) { + cerr << "\nWarning"; + if (!dc_filename.empty()) { + cerr << " in " << dc_filename; + } + cerr + << " at line " << line_number << ", column " << col_number << ":\n" + << current_line << "\n"; + indent(cerr, col_number-1) + << "^\n" << msg << "\n\n"; + + warning_count++; +} + +// Now define a function to take input from an istream instead of a +// stdio FILE pointer. This is flex-specific. +static void +input_chars(char *buffer, int &result, int max_size) { + nassertv(input_p != NULL); + if (*input_p) { + input_p->read(buffer, max_size); + result = input_p->gcount(); + if (result >= 0 && result < max_size) { + // Truncate at the end of the read. + buffer[result] = '\0'; + } + + if (line_number == 0) { + // This is a special case. If we are reading the very first bit + // from the stream, copy it into the current_line array. This + // is because the \n.* rule below, which fills current_line + // normally, doesn't catch the first line. + strncpy(current_line, dcyytext, max_error_width); + current_line[max_error_width] = '\0'; + line_number++; + col_number = 0; + + // Truncate it at the newline. + char *end = strchr(current_line, '\n'); + if (end != NULL) { + *end = '\0'; + } + } + + } else { + // End of file or I/O error. + result = 0; + } +} +#undef YY_INPUT + +// Define this macro carefully, since different flex versions call it +// with a different type for result. +#define YY_INPUT(buffer, result, max_size) { \ + int int_result; \ + input_chars((buffer), int_result, (max_size)); \ + (result) = int_result; \ +} + +// read_char reads and returns a single character, incrementing the +// supplied line and column numbers as appropriate. A convenience +// function for the scanning functions below. +static int +read_char(int &line, int &col) { + int c = yyinput(); + if (c == '\n') { + line++; + col = 0; + } else { + col++; + } + return c; +} + +// scan_quoted_string reads a string delimited by quotation marks and +// returns it. +static string +scan_quoted_string(char quote_mark) { + string result; + + // We don't touch the current line number and column number during + // scanning, so that if we detect an error while scanning the string + // (e.g. an unterminated string), we'll report the error as + // occurring at the start of the string, not at the end--somewhat + // more convenient for the user. + + // Instead of adjusting the global line_number and col_number + // variables, we'll operate on our own local variables for the + // interim. + int line = line_number; + int col = col_number; + + int c; + c = read_char(line, col); + while (c != quote_mark && c != EOF) { + // A newline is not allowed within a string unless it is escaped. + if (c == '\n') { + c = EOF; + break; + + } else if (c == '\\') { + // Backslash escapes the following character. We also respect + // some C conventions. + c = read_char(line, col); + switch (c) { + case 'a': + result += '\a'; + c = read_char(line, col); + break; + + case 'n': + result += '\n'; + c = read_char(line, col); + break; + + case 'r': + result += '\r'; + c = read_char(line, col); + break; + + case 't': + result += '\t'; + c = read_char(line, col); + break; + + case 'x': + { + int hex = 0; + c = read_char(line, col); + for (int i = 0; i < 2 && isxdigit(c); i++) { + hex = hex * 16 + (isdigit(c) ? c - '0' : tolower(c) - 'a' + 10); + c = read_char(line, col); + } + + result += hex; + } + break; + + case '0': + { + int oct = 0; + c = read_char(line, col); + for (int i = 0; i < 3 && (c >= '0' && c < '7'); i++) { + oct = oct * 8 + (c - '0'); + c = read_char(line, col); + } + + result += oct; + } + break; + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + int dec = 0; + c = read_char(line, col); + for (int i = 0; i < 3 && isdigit(c); i++) { + dec = dec * 10 + (c - '0'); + c = read_char(line, col); + } + + result += dec; + } + break; + + case EOF: + break; + + default: + result += c; + c = read_char(line, col); + } + + } else { + result += c; + c = read_char(line, col); + } + } + + if (c == EOF) { + dcyyerror("This quotation mark is unterminated."); + } + + line_number = line; + col_number = col; + + return result; +} + +// scan_hex_string reads a string of hexadecimal digits delimited by +// angle brackets and returns the representative string. +static string +scan_hex_string() { + string result; + + // We don't touch the current line number and column number during + // scanning, so that if we detect an error while scanning the string + // (e.g. an unterminated string), we'll report the error as + // occurring at the start of the string, not at the end--somewhat + // more convenient for the user. + + // Instead of adjusting the global line_number and col_number + // variables, we'll operate on our own local variables for the + // interim. + int line = line_number; + int col = col_number; + + bool odd = false; + int last = 0; + int c; + c = read_char(line, col); + while (c != '>' && c != EOF) { + int value; + if (c >= '0' && c <= '9') { + value = c - '0'; + } else if (c >= 'a' && c <= 'f') { + value = c - 'a' + 10; + } else if (c >= 'A' && c <= 'F') { + value = c - 'A' + 10; + } else { + line_number = line; + col_number = col; + dcyyerror("Invalid hex digit."); + return string(); + } + + odd = !odd; + if (odd) { + last = value; + } else { + result += (char)((last << 4) | value); + } + c = read_char(line, col); + } + + if (c == EOF) { + dcyyerror("This hex string is unterminated."); + return string(); + } else if (odd) { + dcyyerror("Odd number of hex digits."); + return string(); + } + + line_number = line; + col_number = col; + + return result; +} + +// eat_c_comment scans past all characters up until the first */ +// encountered. +static void +eat_c_comment() { + // As above, we'll operate on our own local copies of line_number + // and col_number within this function. + + int line = line_number; + int col = col_number; + + int c, last_c; + + last_c = '\0'; + c = read_char(line, col); + while (c != EOF && !(last_c == '*' && c == '/')) { + if (last_c == '/' && c == '*') { + dcyywarning("This comment contains a nested /* symbol--possibly unclosed?"); + } + last_c = c; + c = read_char(line, col); + } + + if (c == EOF) { + dcyyerror("This comment marker is unclosed."); + } + + line_number = line; + col_number = col; +} + + + +// accept() is called below as each piece is pulled off and +// accepted by the lexer; it increments the current column number. +inline void accept() { + col_number += dcyyleng; +} + +#line 984 "lex.yy.c" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int dcyylex_destroy (void ); + +int dcyyget_debug (void ); + +void dcyyset_debug (int debug_flag ); + +YY_EXTRA_TYPE dcyyget_extra (void ); + +void dcyyset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *dcyyget_in (void ); + +void dcyyset_in (FILE * in_str ); + +FILE *dcyyget_out (void ); + +void dcyyset_out (FILE * out_str ); + +int dcyyget_leng (void ); + +char *dcyyget_text (void ); + +int dcyyget_lineno (void ); + +void dcyyset_lineno (int line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int dcyywrap (void ); +#else +extern int dcyywrap (void ); +#endif +#endif + + static void yyunput (int c,char *buf_ptr ); + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO fwrite( dcyytext, dcyyleng, 1, dcyyout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + int n; \ + for ( n = 0; n < max_size && \ + (c = getc( dcyyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( dcyyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, dcyyin))==0 && ferror(dcyyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(dcyyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int dcyylex (void); + +#define YY_DECL int dcyylex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after dcyytext and dcyyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + +#line 415 "dcLexer.lxx" + + + + if (initial_token != 0) { + int t = initial_token; + initial_token = 0; + return t; + } + + +#line 1177 "lex.yy.c" + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! dcyyin ) + dcyyin = stdin; + + if ( ! dcyyout ) + dcyyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + dcyyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + dcyy_create_buffer(dcyyin,YY_BUF_SIZE ); + } + + dcyy_load_buffer_state( ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of dcyytext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 165 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 210 ); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +/* rule 1 can match eol */ +YY_RULE_SETUP +#line 425 "dcLexer.lxx" +{ + // New line. Save a copy of the line so we can print it out for the + // benefit of the user in case we get an error. + + strncpy(current_line, dcyytext+1, max_error_width); + current_line[max_error_width] = '\0'; + line_number++; + col_number=0; + + // Return the whole line to the lexer, except the newline character, + // which we eat. + yyless(1); +} + YY_BREAK +case 2: +YY_RULE_SETUP +#line 439 "dcLexer.lxx" +{ + // Eat whitespace. + accept(); +} + YY_BREAK +case 3: +YY_RULE_SETUP +#line 444 "dcLexer.lxx" +{ + // Eat C++-style comments. + accept(); +} + YY_BREAK +case 4: +YY_RULE_SETUP +#line 449 "dcLexer.lxx" +{ + // Eat C-style comments. + accept(); + eat_c_comment(); +} + YY_BREAK +case 5: +YY_RULE_SETUP +#line 456 "dcLexer.lxx" +{ + accept(); + return KW_DCLASS; +} + YY_BREAK +case 6: +YY_RULE_SETUP +#line 461 "dcLexer.lxx" +{ + accept(); + return KW_STRUCT; +} + YY_BREAK +case 7: +YY_RULE_SETUP +#line 466 "dcLexer.lxx" +{ + accept(); + return KW_FROM; +} + YY_BREAK +case 8: +YY_RULE_SETUP +#line 471 "dcLexer.lxx" +{ + accept(); + return KW_IMPORT; +} + YY_BREAK +case 9: +YY_RULE_SETUP +#line 476 "dcLexer.lxx" +{ + accept(); + return KW_KEYWORD; +} + YY_BREAK +case 10: +YY_RULE_SETUP +#line 481 "dcLexer.lxx" +{ + accept(); + return KW_TYPEDEF; +} + YY_BREAK +case 11: +YY_RULE_SETUP +#line 486 "dcLexer.lxx" +{ + accept(); + return KW_SWITCH; +} + YY_BREAK +case 12: +YY_RULE_SETUP +#line 491 "dcLexer.lxx" +{ + accept(); + return KW_CASE; +} + YY_BREAK +case 13: +YY_RULE_SETUP +#line 496 "dcLexer.lxx" +{ + accept(); + return KW_DEFAULT; +} + YY_BREAK +case 14: +YY_RULE_SETUP +#line 501 "dcLexer.lxx" +{ + accept(); + return KW_BREAK; +} + YY_BREAK +case 15: +YY_RULE_SETUP +#line 506 "dcLexer.lxx" +{ + accept(); + return KW_INT8; +} + YY_BREAK +case 16: +YY_RULE_SETUP +#line 511 "dcLexer.lxx" +{ + accept(); + return KW_INT16; +} + YY_BREAK +case 17: +YY_RULE_SETUP +#line 516 "dcLexer.lxx" +{ + accept(); + return KW_INT32; +} + YY_BREAK +case 18: +YY_RULE_SETUP +#line 521 "dcLexer.lxx" +{ + accept(); + return KW_INT64; +} + YY_BREAK +case 19: +YY_RULE_SETUP +#line 526 "dcLexer.lxx" +{ + accept(); + return KW_UINT8; +} + YY_BREAK +case 20: +YY_RULE_SETUP +#line 531 "dcLexer.lxx" +{ + accept(); + return KW_UINT16; +} + YY_BREAK +case 21: +YY_RULE_SETUP +#line 536 "dcLexer.lxx" +{ + accept(); + return KW_UINT32; +} + YY_BREAK +case 22: +YY_RULE_SETUP +#line 541 "dcLexer.lxx" +{ + accept(); + return KW_UINT64; +} + YY_BREAK +case 23: +YY_RULE_SETUP +#line 546 "dcLexer.lxx" +{ + accept(); + return KW_FLOAT64; +} + YY_BREAK +case 24: +YY_RULE_SETUP +#line 551 "dcLexer.lxx" +{ + accept(); + return KW_STRING; +} + YY_BREAK +case 25: +YY_RULE_SETUP +#line 556 "dcLexer.lxx" +{ + accept(); + return KW_BLOB; +} + YY_BREAK +case 26: +YY_RULE_SETUP +#line 561 "dcLexer.lxx" +{ + accept(); + return KW_BLOB32; +} + YY_BREAK +case 27: +YY_RULE_SETUP +#line 566 "dcLexer.lxx" +{ + accept(); + return KW_INT8ARRAY; +} + YY_BREAK +case 28: +YY_RULE_SETUP +#line 571 "dcLexer.lxx" +{ + accept(); + return KW_INT16ARRAY; +} + YY_BREAK +case 29: +YY_RULE_SETUP +#line 576 "dcLexer.lxx" +{ + accept(); + return KW_INT32ARRAY; +} + YY_BREAK +case 30: +YY_RULE_SETUP +#line 581 "dcLexer.lxx" +{ + accept(); + return KW_UINT8ARRAY; +} + YY_BREAK +case 31: +YY_RULE_SETUP +#line 586 "dcLexer.lxx" +{ + accept(); + return KW_UINT16ARRAY; +} + YY_BREAK +case 32: +YY_RULE_SETUP +#line 591 "dcLexer.lxx" +{ + accept(); + return KW_UINT32ARRAY; +} + YY_BREAK +case 33: +YY_RULE_SETUP +#line 596 "dcLexer.lxx" +{ + accept(); + return KW_UINT32UINT8ARRAY; +} + YY_BREAK +case 34: +YY_RULE_SETUP +#line 601 "dcLexer.lxx" +{ + accept(); + return KW_CHAR; +} + YY_BREAK +case 35: +YY_RULE_SETUP +#line 606 "dcLexer.lxx" +{ + // An unsigned integer number. + accept(); + + // atoll isn't fully portable, so we'll decode the integer by hand. + dcyylval.str = dcyytext; + dcyylval.u.uint64 = 0; + const char *p = dcyytext; + while (*p != '\0') { + PN_uint64 next_value = dcyylval.u.uint64 * 10; + if (next_value < dcyylval.u.uint64) { + dcyyerror("Number out of range."); + dcyylval.u.uint64 = 1; + return UNSIGNED_INTEGER; + } + + dcyylval.u.uint64 = next_value + (*p - '0'); + ++p; + } + + return UNSIGNED_INTEGER; +} + YY_BREAK +case 36: +YY_RULE_SETUP +#line 629 "dcLexer.lxx" +{ + // A signed integer number. + accept(); + + // atoll isn't fully portable, so we'll decode the integer by hand. + dcyylval.str = dcyytext; + + bool neg = false; + const char *p = dcyytext; + if (*p == '-') { + neg = true; + ++p; + } else if (*p == '+') { + ++p; + } + + PN_uint64 value = 0; + while (*p != '\0') { + PN_uint64 next_value = value * 10; + if (next_value < value) { + dcyyerror("Number out of range."); + dcyylval.u.int64 = 1; + return SIGNED_INTEGER; + } + + value = next_value + (*p - '0'); + ++p; + } + + if (neg) { + dcyylval.u.int64 = -(PN_int64)value; + if (dcyylval.u.int64 > 0) { + dcyyerror("Number out of range."); + dcyylval.u.int64 = 1; + } + } else { + dcyylval.u.int64 = (PN_int64)value; + if (dcyylval.u.int64 < 0) { + dcyyerror("Number out of range."); + dcyylval.u.int64 = 1; + } + } + + return SIGNED_INTEGER; +} + YY_BREAK +case 37: +YY_RULE_SETUP +#line 675 "dcLexer.lxx" +{ + // A hexadecimal integer number. + accept(); + + // As above, we'll decode the hex string by hand. + dcyylval.str = dcyytext; + dcyylval.u.uint64 = 0; + const char *p = dcyytext + 2; + while (*p != '\0') { + PN_uint64 next_value = dcyylval.u.uint64 * 16; + if (next_value < dcyylval.u.uint64) { + dcyyerror("Number out of range."); + dcyylval.u.uint64 = 1; + return UNSIGNED_INTEGER; + } + + if (isalpha(*p)) { + dcyylval.u.uint64 = next_value + (tolower(*p) - 'a' + 10); + } else { + dcyylval.u.uint64 = next_value + (*p - '0'); + } + ++p; + } + + return UNSIGNED_INTEGER; +} + YY_BREAK +case 38: +YY_RULE_SETUP +#line 702 "dcLexer.lxx" +{ + // A floating-point number. + accept(); + dcyylval.u.real = patof(dcyytext); + dcyylval.str = dcyytext; + return REAL; +} + YY_BREAK +case 39: +YY_RULE_SETUP +#line 710 "dcLexer.lxx" +{ + // Quoted string. + accept(); + dcyylval.str = scan_quoted_string('"'); + return STRING; +} + YY_BREAK +case 40: +YY_RULE_SETUP +#line 717 "dcLexer.lxx" +{ + // Single-quoted string. + accept(); + dcyylval.str = scan_quoted_string('\''); + return STRING; +} + YY_BREAK +case 41: +YY_RULE_SETUP +#line 724 "dcLexer.lxx" +{ + // Long hex string. + accept(); + dcyylval.str = scan_hex_string(); + return HEX_STRING; +} + YY_BREAK +case 42: +YY_RULE_SETUP +#line 731 "dcLexer.lxx" +{ + // Identifier or keyword. + accept(); + dcyylval.str = dcyytext; + + if (dc_file != (DCFile *)NULL) { + const DCKeyword *keyword = dc_file->get_keyword_by_name(dcyylval.str); + if (keyword != (DCKeyword *)NULL) { + dcyylval.u.keyword = keyword; + return KEYWORD; + } + } + return IDENTIFIER; +} + YY_BREAK +case 43: +YY_RULE_SETUP +#line 747 "dcLexer.lxx" +{ + // Send any other printable character as itself. + accept(); + return dcyytext[0]; +} + YY_BREAK +case 44: +YY_RULE_SETUP +#line 753 "dcLexer.lxx" +ECHO; + YY_BREAK +#line 1721 "lex.yy.c" +case YY_STATE_EOF(INITIAL): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed dcyyin at a new source and called + * dcyylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = dcyyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_c_buf_p); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( dcyywrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * dcyytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of dcyylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = (yytext_ptr); + register int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + dcyyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), (size_t) num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + dcyyrestart(dcyyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) dcyyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 165 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + register int yy_is_jam; + register char *yy_cp = (yy_c_buf_p); + + register YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 165 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 164); + + return yy_is_jam ? 0 : yy_current_state; +} + + static void yyunput (int c, register char * yy_bp ) +{ + register char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up dcyytext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + register int number_to_move = (yy_n_chars) + 2; + register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + (yytext_ptr) = yy_bp; + (yy_hold_char) = *yy_cp; + (yy_c_buf_p) = yy_cp; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (yy_c_buf_p) - (yytext_ptr); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + dcyyrestart(dcyyin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( dcyywrap( ) ) + return EOF; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve dcyytext */ + (yy_hold_char) = *++(yy_c_buf_p); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void dcyyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + dcyyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + dcyy_create_buffer(dcyyin,YY_BUF_SIZE ); + } + + dcyy_init_buffer(YY_CURRENT_BUFFER,input_file ); + dcyy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void dcyy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * dcyypop_buffer_state(); + * dcyypush_buffer_state(new_buffer); + */ + dcyyensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + dcyy_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (dcyywrap()) processing, but the only time this flag + * is looked at is after dcyywrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void dcyy_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + dcyyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE dcyy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) dcyyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in dcyy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) dcyyalloc(b->yy_buf_size + 2 ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in dcyy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + dcyy_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with dcyy_create_buffer() + * + */ + void dcyy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + dcyyfree((void *) b->yy_ch_buf ); + + dcyyfree((void *) b ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a dcyyrestart() or at EOF. + */ + static void dcyy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + dcyy_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then dcyy_init_buffer was _probably_ + * called from dcyyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void dcyy_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + dcyy_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void dcyypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + dcyyensure_buffer_stack(); + + /* This block is copied from dcyy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from dcyy_switch_to_buffer. */ + dcyy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void dcyypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + dcyy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + dcyy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void dcyyensure_buffer_stack (void) +{ + int num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)dcyyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in dcyyensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)dcyyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in dcyyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE dcyy_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) dcyyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in dcyy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + dcyy_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to dcyylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * dcyy_scan_bytes() instead. + */ +YY_BUFFER_STATE dcyy_scan_string (yyconst char * yystr ) +{ + + return dcyy_scan_bytes(yystr,strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to dcyylex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE dcyy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) dcyyalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in dcyy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = dcyy_scan_buffer(buf,n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in dcyy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up dcyytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + dcyytext[dcyyleng] = (yy_hold_char); \ + (yy_c_buf_p) = dcyytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + dcyyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int dcyyget_lineno (void) +{ + + return dcyylineno; +} + +/** Get the input stream. + * + */ +FILE *dcyyget_in (void) +{ + return dcyyin; +} + +/** Get the output stream. + * + */ +FILE *dcyyget_out (void) +{ + return dcyyout; +} + +/** Get the length of the current token. + * + */ +int dcyyget_leng (void) +{ + return dcyyleng; +} + +/** Get the current token. + * + */ + +char *dcyyget_text (void) +{ + return dcyytext; +} + +/** Set the current line number. + * @param line_number + * + */ +void dcyyset_lineno (int line_number ) +{ + + dcyylineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see dcyy_switch_to_buffer + */ +void dcyyset_in (FILE * in_str ) +{ + dcyyin = in_str ; +} + +void dcyyset_out (FILE * out_str ) +{ + dcyyout = out_str ; +} + +int dcyyget_debug (void) +{ + return dcyy_flex_debug; +} + +void dcyyset_debug (int bdebug ) +{ + dcyy_flex_debug = bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from dcyylex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + dcyyin = stdin; + dcyyout = stdout; +#else + dcyyin = (FILE *) 0; + dcyyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * dcyylex_init() + */ + return 0; +} + +/* dcyylex_destroy is for both reentrant and non-reentrant scanners. */ +int dcyylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + dcyy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + dcyypop_buffer_state(); + } + + /* Destroy the stack itself. */ + dcyyfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * dcyylex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *dcyyalloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *dcyyrealloc (void * ptr, yy_size_t size ) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void dcyyfree (void * ptr ) +{ + free( (char *) ptr ); /* see dcyyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 753 "dcLexer.lxx" diff --git a/direct/src/dcparser/dcLexer.lxx b/direct/src/dcparser/dcLexer.lxx index e48157044a..e6ce9ec44d 100644 --- a/direct/src/dcparser/dcLexer.lxx +++ b/direct/src/dcparser/dcLexer.lxx @@ -35,7 +35,7 @@ static int error_count = 0; static int warning_count = 0; // This is the pointer to the current input stream. -static istream *inp = NULL; +static istream *input_p = NULL; // This is the name of the dc file we're parsing. We keep it so we // can print it out for error messages. @@ -52,7 +52,7 @@ static int initial_token; void dc_init_lexer(istream &in, const string &filename) { - inp = ∈ + input_p = ∈ dc_filename = filename; line_number = 0; col_number = 0; @@ -129,10 +129,10 @@ dcyywarning(const string &msg) { // stdio FILE pointer. This is flex-specific. static void input_chars(char *buffer, int &result, int max_size) { - nassertv(inp != NULL); - if (*inp) { - inp->read(buffer, max_size); - result = inp->gcount(); + nassertv(input_p != NULL); + if (*input_p) { + input_p->read(buffer, max_size); + result = input_p->gcount(); if (result >= 0 && result < max_size) { // Truncate at the end of the read. buffer[result] = '\0'; diff --git a/direct/src/dcparser/dcParser.cxx.prebuilt b/direct/src/dcparser/dcParser.cxx.prebuilt index 25be77444f..a7f911e452 100644 --- a/direct/src/dcparser/dcParser.cxx.prebuilt +++ b/direct/src/dcparser/dcParser.cxx.prebuilt @@ -1,24 +1,22 @@ -/* A Bison parser, made by GNU Bison 2.3. */ +/* A Bison parser, made by GNU Bison 2.4.2. */ /* Skeleton implementation for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify + + Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -29,7 +27,7 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ @@ -47,7 +45,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.3" +#define YYBISON_VERSION "2.4.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -55,17 +53,127 @@ /* Pure parsers. */ #define YYPURE 0 +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ -#define yyparse dcyyparse -#define yylex dcyylex -#define yyerror dcyyerror -#define yylval dcyylval -#define yychar dcyychar -#define yydebug dcyydebug -#define yynerrs dcyynerrs +#define yyparse dcyyparse +#define yylex dcyylex +#define yyerror dcyyerror +#define yylval dcyylval +#define yychar dcyychar +#define yydebug dcyydebug +#define yynerrs dcyynerrs + + +/* Copy the first part of user declarations. */ + +/* Line 189 of yacc.c */ +#line 6 "dcParser.yxx" + +#include "dcLexerDefs.h" +#include "dcParserDefs.h" +#include "dcFile.h" +#include "dcClass.h" +#include "dcSwitch.h" +#include "dcAtomicField.h" +#include "dcMolecularField.h" +#include "dcClassParameter.h" +#include "dcSwitchParameter.h" +#include "dcArrayParameter.h" +#include "dcSimpleParameter.h" +#include "dcTypedef.h" +#include "dcKeyword.h" +#include "dcPacker.h" +#include "dcNumericRange.h" + +// Because our token type contains objects of type string, which +// require correct copy construction (and not simply memcpying), we +// cannot use bison's built-in auto-stack-grow feature. As an easy +// solution, we ensure here that we have enough yacc stack to start +// with, and that it doesn't ever try to grow. +#define YYINITDEPTH 1000 +#define YYMAXDEPTH 1000 + +DCFile *dc_file = (DCFile *)NULL; +static DCClass *current_class = (DCClass *)NULL; +static DCSwitch *current_switch = (DCSwitch *)NULL; +static DCAtomicField *current_atomic = (DCAtomicField *)NULL; +static DCMolecularField *current_molecular = (DCMolecularField *)NULL; +static DCParameter *current_parameter = (DCParameter *)NULL; +static DCKeywordList current_keyword_list; +static DCPacker default_packer; +static DCPacker *current_packer; +static DCDoubleRange double_range; +static DCUnsignedIntRange uint_range; +static DCField *parameter_description = (DCField *)NULL; + +//////////////////////////////////////////////////////////////////// +// Defining the interface to the parser. +//////////////////////////////////////////////////////////////////// + +void +dc_init_parser(istream &in, const string &filename, DCFile &file) { + dc_file = &file; + dc_init_lexer(in, filename); +} + +void +dc_init_parser_parameter_value(istream &in, const string &filename, + DCPacker &packer) { + dc_file = NULL; + current_packer = &packer; + dc_init_lexer(in, filename); + dc_start_parameter_value(); +} + +void +dc_init_parser_parameter_description(istream &in, const string &filename, + DCFile *file) { + dc_file = file; + dc_init_lexer(in, filename); + parameter_description = NULL; + dc_start_parameter_description(); +} + +DCField * +dc_get_parameter_description() { + return parameter_description; +} + +void +dc_cleanup_parser() { + dc_file = (DCFile *)NULL; +} + + + +/* Line 189 of yacc.c */ +#line 159 "y.tab.c" + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif /* Tokens. */ @@ -161,118 +269,18 @@ -/* Copy the first part of user declarations. */ -#line 6 "dcParser.yxx" - -#include "dcLexerDefs.h" -#include "dcParserDefs.h" -#include "dcFile.h" -#include "dcClass.h" -#include "dcSwitch.h" -#include "dcAtomicField.h" -#include "dcMolecularField.h" -#include "dcClassParameter.h" -#include "dcSwitchParameter.h" -#include "dcArrayParameter.h" -#include "dcSimpleParameter.h" -#include "dcTypedef.h" -#include "dcKeyword.h" -#include "dcPacker.h" -#include "dcNumericRange.h" - -// Because our token type contains objects of type string, which -// require correct copy construction (and not simply memcpying), we -// cannot use bison's built-in auto-stack-grow feature. As an easy -// solution, we ensure here that we have enough yacc stack to start -// with, and that it doesn't ever try to grow. -#define YYINITDEPTH 1000 -#define YYMAXDEPTH 1000 - -DCFile *dc_file = (DCFile *)NULL; -static DCClass *current_class = (DCClass *)NULL; -static DCSwitch *current_switch = (DCSwitch *)NULL; -static DCAtomicField *current_atomic = (DCAtomicField *)NULL; -static DCMolecularField *current_molecular = (DCMolecularField *)NULL; -static DCParameter *current_parameter = (DCParameter *)NULL; -static DCKeywordList current_keyword_list; -static DCPacker default_packer; -static DCPacker *current_packer; -static DCDoubleRange double_range; -static DCUnsignedIntRange uint_range; -static DCField *parameter_description = (DCField *)NULL; - -//////////////////////////////////////////////////////////////////// -// Defining the interface to the parser. -//////////////////////////////////////////////////////////////////// - -void -dc_init_parser(istream &in, const string &filename, DCFile &file) { - dc_file = &file; - dc_init_lexer(in, filename); -} - -void -dc_init_parser_parameter_value(istream &in, const string &filename, - DCPacker &packer) { - dc_file = NULL; - current_packer = &packer; - dc_init_lexer(in, filename); - dc_start_parameter_value(); -} - -void -dc_init_parser_parameter_description(istream &in, const string &filename, - DCFile *file) { - dc_file = file; - dc_init_lexer(in, filename); - parameter_description = NULL; - dc_start_parameter_description(); -} - -DCField * -dc_get_parameter_description() { - return parameter_description; -} - -void -dc_cleanup_parser() { - dc_file = (DCFile *)NULL; -} - - - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 -#endif - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef int YYSTYPE; + # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 #endif - /* Copy the second part of user declarations. */ -/* Line 216 of yacc.c. */ -#line 276 "y.tab.c" +/* Line 264 of yacc.c */ +#line 284 "y.tab.c" #ifdef short # undef short @@ -347,14 +355,14 @@ typedef short int yytype_int16; #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int -YYID (int i) +YYID (int yyi) #else static int -YYID (i) - int i; +YYID (yyi) + int yyi; #endif { - return i; + return yyi; } #endif @@ -435,9 +443,9 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss; - YYSTYPE yyvs; - }; + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; +}; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) @@ -471,12 +479,12 @@ union yyalloc elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack) \ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ @@ -667,24 +675,24 @@ static const char *const yytname[] = "START_DC", "START_PARAMETER_VALUE", "START_PARAMETER_DESCRIPTION", "';'", "'/'", "'.'", "'*'", "','", "'{'", "'}'", "':'", "'('", "')'", "'='", "'%'", "'-'", "'['", "']'", "$accept", "grammar", "dc", - "slash_identifier", "import_identifier", "import", "@1", + "slash_identifier", "import_identifier", "import", "$@1", "import_symbol_list_or_star", "import_symbol_list", "typedef_decl", "keyword_decl", "keyword_decl_list", "dclass_or_struct", "dclass", "@2", "dclass_name", "dclass_derivation", "dclass_base_list", "dclass_fields", "dclass_field", "struct", "@3", "struct_name", "struct_derivation", "struct_base_list", "struct_fields", "struct_field", "atomic_field", "@4", "parameter_list", "nonempty_parameter_list", "atomic_element", - "named_parameter", "@5", "unnamed_parameter", - "named_parameter_with_default", "@6", "unnamed_parameter_with_default", - "@7", "parameter", "parameter_with_default", "parameter_or_atomic", + "named_parameter", "$@5", "unnamed_parameter", + "named_parameter_with_default", "$@6", "unnamed_parameter_with_default", + "$@7", "parameter", "parameter_with_default", "parameter_or_atomic", "parameter_description", "simple_type_name", "type_name", "double_range", "uint_range", "type_definition", "parameter_definition", "char_or_uint", "small_unsigned_integer", "small_negative_integer", "signed_integer", - "unsigned_integer", "number", "char_or_number", "parameter_value", "@8", - "parameter_actual_value", "@9", "@10", "@11", "array", "maybe_comma", + "unsigned_integer", "number", "char_or_number", "parameter_value", "$@8", + "parameter_actual_value", "$@9", "$@10", "$@11", "array", "maybe_comma", "array_def", "type_token", "keyword_list", "no_keyword_list", - "molecular_field", "@12", "atomic_name", "molecular_atom_list", - "optional_name", "switch", "@13", "switch_fields", "switch_case", "@14", + "molecular_field", "$@12", "atomic_name", "molecular_atom_list", + "optional_name", "switch", "@13", "switch_fields", "switch_case", "$@14", "switch_default", "switch_break", "switch_field", "empty", 0 }; #endif @@ -1001,9 +1009,18 @@ static const yytype_uint8 yystos[] = /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ + Once GCC version 2 has supplanted version 1, this can go. However, + YYFAIL appears to be in use. Nevertheless, it is formally deprecated + in Bison 2.4.2's NEWS entry, where a plan to phase it out is + discussed. */ #define YYFAIL goto yyerrlab +#if defined YYFAIL + /* This is here to suppress warnings from the GCC cpp's + -Wunused-macros. Normally we don't worry about that warning, but + some users do, and we want to make it easy for users to remove + YYFAIL uses, which will produce warnings from Bison 2.5. */ +#endif #define YYRECOVERING() (!!yyerrstatus) @@ -1171,17 +1188,20 @@ yy_symbol_print (yyoutput, yytype, yyvaluep) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void -yy_stack_print (bottom, top) - yytype_int16 *bottom; - yytype_int16 *top; +yy_stack_print (yybottom, yytop) + yytype_int16 *yybottom; + yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); - for (; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } YYFPRINTF (stderr, "\n"); } @@ -1215,11 +1235,11 @@ yy_reduce_print (yyvsp, yyrule) /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { - fprintf (stderr, " $%d = ", yyi + 1); + YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) ); - fprintf (stderr, "\n"); + YYFPRINTF (stderr, "\n"); } } @@ -1499,10 +1519,8 @@ yydestruct (yymsg, yytype, yyvaluep) break; } } - /* Prevent warnings from -Wmissing-prototypes. */ - #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); @@ -1518,11 +1536,10 @@ int yyparse (); #endif /* ! YYPARSE_PARAM */ - -/* The look-ahead symbol. */ +/* The lookahead symbol. */ int yychar; -/* The semantic value of the look-ahead symbol. */ +/* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ @@ -1530,9 +1547,9 @@ int yynerrs; -/*----------. -| yyparse. | -`----------*/ +/*-------------------------. +| yyparse or yypush_parse. | +`-------------------------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ @@ -1556,14 +1573,39 @@ yyparse () #endif #endif { - - int yystate; + + + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + + /* The stacks and their tools: + `yyss': related to states. + `yyvs': related to semantic values. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; + + YYSIZE_T yystacksize; + int yyn; int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ - int yytoken = 0; + /* Lookahead token as an internal (translated) token number. */ + int yytoken; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; @@ -1571,51 +1613,28 @@ yyparse () YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss = yyssa; - yytype_int16 *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; - - - #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) - YYSIZE_T yystacksize = YYINITDEPTH; - - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - - /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; + yytoken = 0; + yyss = yyssa; + yyvs = yyvsa; + yystacksize = YYINITDEPTH; + YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ + yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ - yyssp = yyss; yyvsp = yyvs; @@ -1645,7 +1664,6 @@ yyparse () YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; - /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might @@ -1653,7 +1671,6 @@ yyparse () yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); yyss = yyss1; @@ -1676,9 +1693,8 @@ yyparse () (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); @@ -1689,7 +1705,6 @@ yyparse () yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); @@ -1699,6 +1714,9 @@ yyparse () YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + if (yystate == YYFINAL) + YYACCEPT; + goto yybackup; /*-----------. @@ -1707,16 +1725,16 @@ yyparse () yybackup: /* Do appropriate processing given the current state. Read a - look-ahead token if we need one and don't already have one. */ + lookahead token if we need one and don't already have one. */ - /* First try to decide what to do without reference to look-ahead token. */ + /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; - /* Not known => get a look-ahead token if don't already have one. */ + /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); @@ -1748,20 +1766,16 @@ yybackup: goto yyreduce; } - if (yyn == YYFINAL) - YYACCEPT; - /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; - /* Shift the look-ahead token. */ + /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - /* Discard the shifted token unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; + /* Discard the shifted token. */ + yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; @@ -1801,6 +1815,8 @@ yyreduce: switch (yyn) { case 4: + +/* Line 1464 of yacc.c */ #line 171 "dcParser.yxx" { parameter_description = (yyvsp[(2) - (2)].u.field); @@ -1808,6 +1824,8 @@ yyreduce: break; case 7: + +/* Line 1464 of yacc.c */ #line 180 "dcParser.yxx" { if (!dc_file->add_class((yyvsp[(2) - (2)].u.dclass))) { @@ -1822,6 +1840,8 @@ yyreduce: break; case 8: + +/* Line 1464 of yacc.c */ #line 191 "dcParser.yxx" { if (!dc_file->add_switch((yyvsp[(2) - (2)].u.dswitch))) { @@ -1831,6 +1851,8 @@ yyreduce: break; case 13: + +/* Line 1464 of yacc.c */ #line 204 "dcParser.yxx" { (yyval.str) = (yyvsp[(1) - (3)].str) + string("/") + (yyvsp[(3) - (3)].str); @@ -1838,6 +1860,8 @@ yyreduce: break; case 15: + +/* Line 1464 of yacc.c */ #line 212 "dcParser.yxx" { (yyval.str) = (yyvsp[(1) - (3)].str) + string(".") + (yyvsp[(3) - (3)].str); @@ -1845,6 +1869,8 @@ yyreduce: break; case 16: + +/* Line 1464 of yacc.c */ #line 219 "dcParser.yxx" { dc_file->add_import_module((yyvsp[(2) - (2)].str)); @@ -1852,6 +1878,8 @@ yyreduce: break; case 17: + +/* Line 1464 of yacc.c */ #line 223 "dcParser.yxx" { dc_file->add_import_module((yyvsp[(2) - (3)].str)); @@ -1859,6 +1887,8 @@ yyreduce: break; case 20: + +/* Line 1464 of yacc.c */ #line 232 "dcParser.yxx" { dc_file->add_import_symbol("*"); @@ -1866,6 +1896,8 @@ yyreduce: break; case 21: + +/* Line 1464 of yacc.c */ #line 239 "dcParser.yxx" { dc_file->add_import_symbol((yyvsp[(1) - (1)].str)); @@ -1873,6 +1905,8 @@ yyreduce: break; case 22: + +/* Line 1464 of yacc.c */ #line 243 "dcParser.yxx" { dc_file->add_import_symbol((yyvsp[(3) - (3)].str)); @@ -1880,6 +1914,8 @@ yyreduce: break; case 23: + +/* Line 1464 of yacc.c */ #line 250 "dcParser.yxx" { if ((yyvsp[(2) - (2)].u.parameter) != (DCParameter *)NULL) { @@ -1898,6 +1934,8 @@ yyreduce: break; case 26: + +/* Line 1464 of yacc.c */ #line 273 "dcParser.yxx" { dc_file->add_keyword((yyvsp[(2) - (2)].str)); @@ -1905,6 +1943,8 @@ yyreduce: break; case 27: + +/* Line 1464 of yacc.c */ #line 277 "dcParser.yxx" { // This keyword has already been defined. But since we are now @@ -1916,6 +1956,8 @@ yyreduce: break; case 30: + +/* Line 1464 of yacc.c */ #line 293 "dcParser.yxx" { current_class = new DCClass(dc_file, (yyvsp[(2) - (2)].str), false, false); @@ -1923,6 +1965,8 @@ yyreduce: break; case 31: + +/* Line 1464 of yacc.c */ #line 297 "dcParser.yxx" { (yyval.u.dclass) = current_class; @@ -1931,6 +1975,8 @@ yyreduce: break; case 32: + +/* Line 1464 of yacc.c */ #line 305 "dcParser.yxx" { if (dc_file == (DCFile *)NULL) { @@ -1954,6 +2000,8 @@ yyreduce: break; case 35: + +/* Line 1464 of yacc.c */ #line 333 "dcParser.yxx" { if ((yyvsp[(1) - (1)].u.dclass) != (DCClass *)NULL) { @@ -1963,6 +2011,8 @@ yyreduce: break; case 36: + +/* Line 1464 of yacc.c */ #line 339 "dcParser.yxx" { if (!dc_multiple_inheritance) { @@ -1977,6 +2027,8 @@ yyreduce: break; case 39: + +/* Line 1464 of yacc.c */ #line 355 "dcParser.yxx" { if ((yyvsp[(2) - (3)].u.field) == (DCField *)NULL) { @@ -1990,6 +2042,8 @@ yyreduce: break; case 40: + +/* Line 1464 of yacc.c */ #line 368 "dcParser.yxx" { if ((yyvsp[(1) - (2)].u.field) != (DCField *)NULL) { @@ -2003,6 +2057,8 @@ yyreduce: break; case 42: + +/* Line 1464 of yacc.c */ #line 379 "dcParser.yxx" { yyerror("Unnamed parameters are not allowed on a dclass"); @@ -2014,6 +2070,8 @@ yyreduce: break; case 43: + +/* Line 1464 of yacc.c */ #line 387 "dcParser.yxx" { if ((yyvsp[(1) - (2)].u.parameter) != (DCField *)NULL) { @@ -2024,6 +2082,8 @@ yyreduce: break; case 44: + +/* Line 1464 of yacc.c */ #line 397 "dcParser.yxx" { current_class = new DCClass(dc_file, (yyvsp[(2) - (2)].str), true, false); @@ -2031,6 +2091,8 @@ yyreduce: break; case 45: + +/* Line 1464 of yacc.c */ #line 401 "dcParser.yxx" { (yyval.u.dclass) = current_class; @@ -2039,6 +2101,8 @@ yyreduce: break; case 46: + +/* Line 1464 of yacc.c */ #line 409 "dcParser.yxx" { if (dc_file == (DCFile *)NULL) { @@ -2062,6 +2126,8 @@ yyreduce: break; case 49: + +/* Line 1464 of yacc.c */ #line 437 "dcParser.yxx" { if ((yyvsp[(1) - (1)].u.dclass) != (DCClass *)NULL) { @@ -2071,6 +2137,8 @@ yyreduce: break; case 50: + +/* Line 1464 of yacc.c */ #line 443 "dcParser.yxx" { if ((yyvsp[(3) - (3)].u.dclass) != (DCClass *)NULL) { @@ -2080,6 +2148,8 @@ yyreduce: break; case 53: + +/* Line 1464 of yacc.c */ #line 454 "dcParser.yxx" { if ((yyvsp[(2) - (3)].u.field) == (DCField *)NULL) { @@ -2091,6 +2161,8 @@ yyreduce: break; case 54: + +/* Line 1464 of yacc.c */ #line 465 "dcParser.yxx" { if ((yyvsp[(1) - (2)].u.field)->get_name().empty()) { @@ -2101,6 +2173,8 @@ yyreduce: break; case 56: + +/* Line 1464 of yacc.c */ #line 473 "dcParser.yxx" { (yyval.u.field) = (yyvsp[(1) - (2)].u.parameter); @@ -2108,6 +2182,8 @@ yyreduce: break; case 57: + +/* Line 1464 of yacc.c */ #line 477 "dcParser.yxx" { (yyval.u.field) = (yyvsp[(1) - (2)].u.parameter); @@ -2115,6 +2191,8 @@ yyreduce: break; case 58: + +/* Line 1464 of yacc.c */ #line 484 "dcParser.yxx" { if (current_class == (DCClass *)NULL) { @@ -2128,6 +2206,8 @@ yyreduce: break; case 59: + +/* Line 1464 of yacc.c */ #line 494 "dcParser.yxx" { (yyval.u.field) = current_atomic; @@ -2136,6 +2216,8 @@ yyreduce: break; case 64: + +/* Line 1464 of yacc.c */ #line 512 "dcParser.yxx" { if ((yyvsp[(1) - (1)].u.parameter) != (DCParameter *)NULL) { @@ -2145,6 +2227,8 @@ yyreduce: break; case 65: + +/* Line 1464 of yacc.c */ #line 521 "dcParser.yxx" { current_parameter = (yyvsp[(1) - (1)].u.parameter); @@ -2152,6 +2236,8 @@ yyreduce: break; case 66: + +/* Line 1464 of yacc.c */ #line 525 "dcParser.yxx" { (yyval.u.parameter) = (yyvsp[(3) - (3)].u.parameter); @@ -2159,6 +2245,8 @@ yyreduce: break; case 69: + +/* Line 1464 of yacc.c */ #line 537 "dcParser.yxx" { current_packer = &default_packer; @@ -2170,6 +2258,8 @@ yyreduce: break; case 70: + +/* Line 1464 of yacc.c */ #line 545 "dcParser.yxx" { bool is_valid = false; @@ -2191,6 +2281,8 @@ yyreduce: break; case 72: + +/* Line 1464 of yacc.c */ #line 567 "dcParser.yxx" { current_packer = &default_packer; @@ -2202,6 +2294,8 @@ yyreduce: break; case 73: + +/* Line 1464 of yacc.c */ #line 575 "dcParser.yxx" { bool is_valid = false; @@ -2223,6 +2317,8 @@ yyreduce: break; case 78: + +/* Line 1464 of yacc.c */ #line 606 "dcParser.yxx" { (yyval.u.field) = (yyvsp[(1) - (1)].u.parameter); @@ -2230,6 +2326,8 @@ yyreduce: break; case 79: + +/* Line 1464 of yacc.c */ #line 610 "dcParser.yxx" { (yyval.u.field) = (yyvsp[(1) - (1)].u.field); @@ -2237,6 +2335,8 @@ yyreduce: break; case 80: + +/* Line 1464 of yacc.c */ #line 617 "dcParser.yxx" { (yyval.u.field) = (yyvsp[(1) - (2)].u.field); @@ -2244,6 +2344,8 @@ yyreduce: break; case 81: + +/* Line 1464 of yacc.c */ #line 621 "dcParser.yxx" { (yyval.u.field) = (yyvsp[(1) - (2)].u.parameter); @@ -2251,6 +2353,8 @@ yyreduce: break; case 82: + +/* Line 1464 of yacc.c */ #line 625 "dcParser.yxx" { (yyval.u.field) = (yyvsp[(1) - (2)].u.parameter); @@ -2258,6 +2362,8 @@ yyreduce: break; case 83: + +/* Line 1464 of yacc.c */ #line 632 "dcParser.yxx" { (yyval.u.parameter) = new DCSimpleParameter((yyvsp[(1) - (1)].u.subatomic)); @@ -2265,6 +2371,8 @@ yyreduce: break; case 84: + +/* Line 1464 of yacc.c */ #line 636 "dcParser.yxx" { DCSimpleParameter *simple_param = (yyvsp[(1) - (4)].u.parameter)->as_simple_parameter(); @@ -2277,6 +2385,8 @@ yyreduce: break; case 85: + +/* Line 1464 of yacc.c */ #line 645 "dcParser.yxx" { DCSimpleParameter *simple_param = (yyvsp[(1) - (3)].u.parameter)->as_simple_parameter(); @@ -2296,6 +2406,8 @@ yyreduce: break; case 86: + +/* Line 1464 of yacc.c */ #line 661 "dcParser.yxx" { DCSimpleParameter *simple_param = (yyvsp[(1) - (3)].u.parameter)->as_simple_parameter(); @@ -2311,6 +2423,8 @@ yyreduce: break; case 88: + +/* Line 1464 of yacc.c */ #line 677 "dcParser.yxx" { if (dc_file == (DCFile *)NULL) { @@ -2346,6 +2460,8 @@ yyreduce: break; case 89: + +/* Line 1464 of yacc.c */ #line 709 "dcParser.yxx" { // This is an inline struct definition. @@ -2365,6 +2481,8 @@ yyreduce: break; case 90: + +/* Line 1464 of yacc.c */ #line 725 "dcParser.yxx" { // This is an inline switch definition. @@ -2384,6 +2502,8 @@ yyreduce: break; case 91: + +/* Line 1464 of yacc.c */ #line 744 "dcParser.yxx" { double_range.clear(); @@ -2391,6 +2511,8 @@ yyreduce: break; case 92: + +/* Line 1464 of yacc.c */ #line 748 "dcParser.yxx" { double_range.clear(); @@ -2401,6 +2523,8 @@ yyreduce: break; case 93: + +/* Line 1464 of yacc.c */ #line 755 "dcParser.yxx" { double_range.clear(); @@ -2411,6 +2535,8 @@ yyreduce: break; case 94: + +/* Line 1464 of yacc.c */ #line 762 "dcParser.yxx" { double_range.clear(); @@ -2423,6 +2549,8 @@ yyreduce: break; case 95: + +/* Line 1464 of yacc.c */ #line 771 "dcParser.yxx" { if (!double_range.add_range((yyvsp[(3) - (3)].u.real), (yyvsp[(3) - (3)].u.real))) { @@ -2432,6 +2560,8 @@ yyreduce: break; case 96: + +/* Line 1464 of yacc.c */ #line 777 "dcParser.yxx" { if (!double_range.add_range((yyvsp[(3) - (5)].u.real), (yyvsp[(5) - (5)].u.real))) { @@ -2441,6 +2571,8 @@ yyreduce: break; case 97: + +/* Line 1464 of yacc.c */ #line 783 "dcParser.yxx" { if ((yyvsp[(4) - (4)].u.real) >= 0) { @@ -2452,6 +2584,8 @@ yyreduce: break; case 98: + +/* Line 1464 of yacc.c */ #line 794 "dcParser.yxx" { uint_range.clear(); @@ -2459,6 +2593,8 @@ yyreduce: break; case 99: + +/* Line 1464 of yacc.c */ #line 798 "dcParser.yxx" { uint_range.clear(); @@ -2469,6 +2605,8 @@ yyreduce: break; case 100: + +/* Line 1464 of yacc.c */ #line 805 "dcParser.yxx" { uint_range.clear(); @@ -2479,6 +2617,8 @@ yyreduce: break; case 101: + +/* Line 1464 of yacc.c */ #line 812 "dcParser.yxx" { uint_range.clear(); @@ -2489,6 +2629,8 @@ yyreduce: break; case 102: + +/* Line 1464 of yacc.c */ #line 819 "dcParser.yxx" { if (!uint_range.add_range((yyvsp[(3) - (3)].u.s_uint), (yyvsp[(3) - (3)].u.s_uint))) { @@ -2498,6 +2640,8 @@ yyreduce: break; case 103: + +/* Line 1464 of yacc.c */ #line 825 "dcParser.yxx" { if (!uint_range.add_range((yyvsp[(3) - (5)].u.s_uint), (yyvsp[(5) - (5)].u.s_uint))) { @@ -2507,6 +2651,8 @@ yyreduce: break; case 104: + +/* Line 1464 of yacc.c */ #line 831 "dcParser.yxx" { if (!uint_range.add_range((yyvsp[(3) - (4)].u.s_uint), (yyvsp[(4) - (4)].u.s_uint))) { @@ -2516,6 +2662,8 @@ yyreduce: break; case 106: + +/* Line 1464 of yacc.c */ #line 841 "dcParser.yxx" { if ((yyvsp[(1) - (4)].u.parameter) == (DCParameter *)NULL) { @@ -2527,6 +2675,8 @@ yyreduce: break; case 107: + +/* Line 1464 of yacc.c */ #line 852 "dcParser.yxx" { current_parameter->set_name((yyvsp[(1) - (1)].str)); @@ -2535,6 +2685,8 @@ yyreduce: break; case 108: + +/* Line 1464 of yacc.c */ #line 857 "dcParser.yxx" { DCSimpleParameter *simple_param = (yyvsp[(1) - (3)].u.parameter)->as_simple_parameter(); @@ -2553,6 +2705,8 @@ yyreduce: break; case 109: + +/* Line 1464 of yacc.c */ #line 872 "dcParser.yxx" { DCSimpleParameter *simple_param = (yyvsp[(1) - (3)].u.parameter)->as_simple_parameter(); @@ -2571,6 +2725,8 @@ yyreduce: break; case 110: + +/* Line 1464 of yacc.c */ #line 887 "dcParser.yxx" { (yyval.u.parameter) = (yyvsp[(1) - (4)].u.parameter)->append_array_specification(uint_range); @@ -2578,6 +2734,8 @@ yyreduce: break; case 111: + +/* Line 1464 of yacc.c */ #line 894 "dcParser.yxx" { if ((yyvsp[(1) - (1)].str).length() != 1) { @@ -2590,6 +2748,8 @@ yyreduce: break; case 113: + +/* Line 1464 of yacc.c */ #line 907 "dcParser.yxx" { (yyval.u.s_uint) = (unsigned int)(yyvsp[(1) - (1)].u.uint64); @@ -2601,6 +2761,8 @@ yyreduce: break; case 114: + +/* Line 1464 of yacc.c */ #line 918 "dcParser.yxx" { (yyval.u.s_uint) = (unsigned int)-(yyvsp[(1) - (1)].u.int64); @@ -2615,6 +2777,8 @@ yyreduce: break; case 117: + +/* Line 1464 of yacc.c */ #line 940 "dcParser.yxx" { (yyval.u.real) = (double)(yyvsp[(1) - (1)].u.uint64); @@ -2622,6 +2786,8 @@ yyreduce: break; case 118: + +/* Line 1464 of yacc.c */ #line 944 "dcParser.yxx" { (yyval.u.real) = (double)(yyvsp[(1) - (1)].u.int64); @@ -2629,6 +2795,8 @@ yyreduce: break; case 120: + +/* Line 1464 of yacc.c */ #line 952 "dcParser.yxx" { if ((yyvsp[(1) - (1)].str).length() != 1) { @@ -2641,12 +2809,16 @@ yyreduce: break; case 122: + +/* Line 1464 of yacc.c */ #line 966 "dcParser.yxx" { } break; case 123: + +/* Line 1464 of yacc.c */ #line 969 "dcParser.yxx" { if ((yyvsp[(1) - (2)].str) != current_packer->get_current_field_name()) { @@ -2659,12 +2831,16 @@ yyreduce: break; case 124: + +/* Line 1464 of yacc.c */ #line 978 "dcParser.yxx" { } break; case 125: + +/* Line 1464 of yacc.c */ #line 984 "dcParser.yxx" { current_packer->pack_int64((yyvsp[(1) - (1)].u.int64)); @@ -2672,6 +2848,8 @@ yyreduce: break; case 126: + +/* Line 1464 of yacc.c */ #line 988 "dcParser.yxx" { current_packer->pack_uint64((yyvsp[(1) - (1)].u.uint64)); @@ -2679,6 +2857,8 @@ yyreduce: break; case 127: + +/* Line 1464 of yacc.c */ #line 992 "dcParser.yxx" { current_packer->pack_double((yyvsp[(1) - (1)].u.real)); @@ -2686,6 +2866,8 @@ yyreduce: break; case 128: + +/* Line 1464 of yacc.c */ #line 996 "dcParser.yxx" { current_packer->pack_string((yyvsp[(1) - (1)].str)); @@ -2693,6 +2875,8 @@ yyreduce: break; case 129: + +/* Line 1464 of yacc.c */ #line 1000 "dcParser.yxx" { current_packer->pack_literal_value((yyvsp[(1) - (1)].str)); @@ -2700,6 +2884,8 @@ yyreduce: break; case 130: + +/* Line 1464 of yacc.c */ #line 1004 "dcParser.yxx" { current_packer->push(); @@ -2707,6 +2893,8 @@ yyreduce: break; case 131: + +/* Line 1464 of yacc.c */ #line 1008 "dcParser.yxx" { current_packer->pop(); @@ -2714,6 +2902,8 @@ yyreduce: break; case 132: + +/* Line 1464 of yacc.c */ #line 1012 "dcParser.yxx" { current_packer->push(); @@ -2721,6 +2911,8 @@ yyreduce: break; case 133: + +/* Line 1464 of yacc.c */ #line 1016 "dcParser.yxx" { current_packer->pop(); @@ -2728,6 +2920,8 @@ yyreduce: break; case 134: + +/* Line 1464 of yacc.c */ #line 1020 "dcParser.yxx" { current_packer->push(); @@ -2735,6 +2929,8 @@ yyreduce: break; case 135: + +/* Line 1464 of yacc.c */ #line 1024 "dcParser.yxx" { current_packer->pop(); @@ -2742,6 +2938,8 @@ yyreduce: break; case 136: + +/* Line 1464 of yacc.c */ #line 1028 "dcParser.yxx" { for (unsigned int i = 0; i < (yyvsp[(3) - (3)].u.s_uint); i++) { @@ -2751,6 +2949,8 @@ yyreduce: break; case 137: + +/* Line 1464 of yacc.c */ #line 1034 "dcParser.yxx" { for (unsigned int i = 0; i < (yyvsp[(3) - (3)].u.s_uint); i++) { @@ -2760,6 +2960,8 @@ yyreduce: break; case 138: + +/* Line 1464 of yacc.c */ #line 1040 "dcParser.yxx" { for (unsigned int i = 0; i < (yyvsp[(3) - (3)].u.s_uint); i++) { @@ -2769,6 +2971,8 @@ yyreduce: break; case 139: + +/* Line 1464 of yacc.c */ #line 1046 "dcParser.yxx" { for (unsigned int i = 0; i < (yyvsp[(3) - (3)].u.s_uint); i++) { @@ -2778,6 +2982,8 @@ yyreduce: break; case 146: + +/* Line 1464 of yacc.c */ #line 1070 "dcParser.yxx" { (yyval.u.subatomic) = ST_int8; @@ -2785,6 +2991,8 @@ yyreduce: break; case 147: + +/* Line 1464 of yacc.c */ #line 1074 "dcParser.yxx" { (yyval.u.subatomic) = ST_int16; @@ -2792,6 +3000,8 @@ yyreduce: break; case 148: + +/* Line 1464 of yacc.c */ #line 1078 "dcParser.yxx" { (yyval.u.subatomic) = ST_int32; @@ -2799,6 +3009,8 @@ yyreduce: break; case 149: + +/* Line 1464 of yacc.c */ #line 1082 "dcParser.yxx" { (yyval.u.subatomic) = ST_int64; @@ -2806,6 +3018,8 @@ yyreduce: break; case 150: + +/* Line 1464 of yacc.c */ #line 1086 "dcParser.yxx" { (yyval.u.subatomic) = ST_uint8; @@ -2813,6 +3027,8 @@ yyreduce: break; case 151: + +/* Line 1464 of yacc.c */ #line 1090 "dcParser.yxx" { (yyval.u.subatomic) = ST_uint16; @@ -2820,6 +3036,8 @@ yyreduce: break; case 152: + +/* Line 1464 of yacc.c */ #line 1094 "dcParser.yxx" { (yyval.u.subatomic) = ST_uint32; @@ -2827,6 +3045,8 @@ yyreduce: break; case 153: + +/* Line 1464 of yacc.c */ #line 1098 "dcParser.yxx" { (yyval.u.subatomic) = ST_uint64; @@ -2834,6 +3054,8 @@ yyreduce: break; case 154: + +/* Line 1464 of yacc.c */ #line 1102 "dcParser.yxx" { (yyval.u.subatomic) = ST_float64; @@ -2841,6 +3063,8 @@ yyreduce: break; case 155: + +/* Line 1464 of yacc.c */ #line 1106 "dcParser.yxx" { (yyval.u.subatomic) = ST_string; @@ -2848,6 +3072,8 @@ yyreduce: break; case 156: + +/* Line 1464 of yacc.c */ #line 1110 "dcParser.yxx" { (yyval.u.subatomic) = ST_blob; @@ -2855,6 +3081,8 @@ yyreduce: break; case 157: + +/* Line 1464 of yacc.c */ #line 1114 "dcParser.yxx" { (yyval.u.subatomic) = ST_blob32; @@ -2862,6 +3090,8 @@ yyreduce: break; case 158: + +/* Line 1464 of yacc.c */ #line 1118 "dcParser.yxx" { (yyval.u.subatomic) = ST_int8array; @@ -2869,6 +3099,8 @@ yyreduce: break; case 159: + +/* Line 1464 of yacc.c */ #line 1122 "dcParser.yxx" { (yyval.u.subatomic) = ST_int16array; @@ -2876,6 +3108,8 @@ yyreduce: break; case 160: + +/* Line 1464 of yacc.c */ #line 1126 "dcParser.yxx" { (yyval.u.subatomic) = ST_int32array; @@ -2883,6 +3117,8 @@ yyreduce: break; case 161: + +/* Line 1464 of yacc.c */ #line 1130 "dcParser.yxx" { (yyval.u.subatomic) = ST_uint8array; @@ -2890,6 +3126,8 @@ yyreduce: break; case 162: + +/* Line 1464 of yacc.c */ #line 1134 "dcParser.yxx" { (yyval.u.subatomic) = ST_uint16array; @@ -2897,6 +3135,8 @@ yyreduce: break; case 163: + +/* Line 1464 of yacc.c */ #line 1138 "dcParser.yxx" { (yyval.u.subatomic) = ST_uint32array; @@ -2904,6 +3144,8 @@ yyreduce: break; case 164: + +/* Line 1464 of yacc.c */ #line 1142 "dcParser.yxx" { (yyval.u.subatomic) = ST_uint32uint8array; @@ -2911,6 +3153,8 @@ yyreduce: break; case 165: + +/* Line 1464 of yacc.c */ #line 1146 "dcParser.yxx" { (yyval.u.subatomic) = ST_char; @@ -2918,6 +3162,8 @@ yyreduce: break; case 166: + +/* Line 1464 of yacc.c */ #line 1153 "dcParser.yxx" { current_keyword_list.clear_keywords(); @@ -2925,6 +3171,8 @@ yyreduce: break; case 167: + +/* Line 1464 of yacc.c */ #line 1157 "dcParser.yxx" { current_keyword_list.add_keyword((yyvsp[(2) - (2)].u.keyword)); @@ -2932,6 +3180,8 @@ yyreduce: break; case 168: + +/* Line 1464 of yacc.c */ #line 1164 "dcParser.yxx" { if (current_keyword_list.get_num_keywords() != 0) { @@ -2941,6 +3191,8 @@ yyreduce: break; case 169: + +/* Line 1464 of yacc.c */ #line 1173 "dcParser.yxx" { current_molecular = new DCMolecularField((yyvsp[(1) - (2)].str), current_class); @@ -2948,6 +3200,8 @@ yyreduce: break; case 170: + +/* Line 1464 of yacc.c */ #line 1177 "dcParser.yxx" { (yyval.u.field) = current_molecular; @@ -2955,6 +3209,8 @@ yyreduce: break; case 171: + +/* Line 1464 of yacc.c */ #line 1184 "dcParser.yxx" { DCField *field = current_class->get_field_by_name((yyvsp[(1) - (1)].str)); @@ -2982,6 +3238,8 @@ yyreduce: break; case 172: + +/* Line 1464 of yacc.c */ #line 1211 "dcParser.yxx" { if ((yyvsp[(1) - (1)].u.atomic) != (DCAtomicField *)NULL) { @@ -2991,6 +3249,8 @@ yyreduce: break; case 173: + +/* Line 1464 of yacc.c */ #line 1217 "dcParser.yxx" { if ((yyvsp[(3) - (3)].u.atomic) != (DCAtomicField *)NULL) { @@ -3005,6 +3265,8 @@ yyreduce: break; case 174: + +/* Line 1464 of yacc.c */ #line 1231 "dcParser.yxx" { (yyval.str) = ""; @@ -3012,6 +3274,8 @@ yyreduce: break; case 176: + +/* Line 1464 of yacc.c */ #line 1239 "dcParser.yxx" { current_switch = new DCSwitch((yyvsp[(2) - (6)].str), (yyvsp[(4) - (6)].u.field)); @@ -3019,6 +3283,8 @@ yyreduce: break; case 177: + +/* Line 1464 of yacc.c */ #line 1243 "dcParser.yxx" { (yyval.u.dswitch) = current_switch; @@ -3027,6 +3293,8 @@ yyreduce: break; case 183: + +/* Line 1464 of yacc.c */ #line 1257 "dcParser.yxx" { if (!current_switch->is_field_valid()) { @@ -3040,6 +3308,8 @@ yyreduce: break; case 184: + +/* Line 1464 of yacc.c */ #line 1270 "dcParser.yxx" { current_packer = &default_packer; @@ -3049,6 +3319,8 @@ yyreduce: break; case 185: + +/* Line 1464 of yacc.c */ #line 1276 "dcParser.yxx" { if (!current_packer->end_pack()) { @@ -3064,6 +3336,8 @@ yyreduce: break; case 186: + +/* Line 1464 of yacc.c */ #line 1291 "dcParser.yxx" { if (!current_switch->add_default()) { @@ -3073,6 +3347,8 @@ yyreduce: break; case 187: + +/* Line 1464 of yacc.c */ #line 1300 "dcParser.yxx" { current_switch->add_break(); @@ -3080,6 +3356,8 @@ yyreduce: break; case 188: + +/* Line 1464 of yacc.c */ #line 1307 "dcParser.yxx" { (yyval.u.field) = (yyvsp[(1) - (1)].u.parameter); @@ -3087,6 +3365,8 @@ yyreduce: break; case 189: + +/* Line 1464 of yacc.c */ #line 1311 "dcParser.yxx" { (yyval.u.field) = (yyvsp[(1) - (1)].u.parameter); @@ -3094,8 +3374,9 @@ yyreduce: break; -/* Line 1267 of yacc.c. */ -#line 3099 "y.tab.c" + +/* Line 1464 of yacc.c */ +#line 3380 "y.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -3106,7 +3387,6 @@ yyreduce: *++yyvsp = yyval; - /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ @@ -3171,7 +3451,7 @@ yyerrlab: if (yyerrstatus == 3) { - /* If just tried and failed to reuse look-ahead token after an + /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) @@ -3188,7 +3468,7 @@ yyerrlab: } } - /* Else will try to reuse look-ahead token after shifting the error + /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; @@ -3245,9 +3525,6 @@ yyerrlab1: YY_STACK_PRINT (yyss, yyssp); } - if (yyn == YYFINAL) - YYACCEPT; - *++yyvsp = yylval; @@ -3272,7 +3549,7 @@ yyabortlab: yyresult = 1; goto yyreturn; -#ifndef yyoverflow +#if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -3283,7 +3560,7 @@ yyexhaustedlab: #endif yyreturn: - if (yychar != YYEOF && yychar != YYEMPTY) + if (yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered diff --git a/direct/src/dcparser/dcParser.h.prebuilt b/direct/src/dcparser/dcParser.h.prebuilt index b4741de4e7..680eeff59c 100644 --- a/direct/src/dcparser/dcParser.h.prebuilt +++ b/direct/src/dcparser/dcParser.h.prebuilt @@ -1,24 +1,22 @@ -/* A Bison parser, made by GNU Bison 2.3. */ +/* A Bison parser, made by GNU Bison 2.4.2. */ /* Skeleton interface for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify + + Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -29,10 +27,11 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ + /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE @@ -127,11 +126,11 @@ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef int YYSTYPE; + # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE dcyylval; + diff --git a/panda/src/egg/lexer.cxx.prebuilt b/panda/src/egg/lexer.cxx.prebuilt index 4109ffa33d..004beaa53f 100644 --- a/panda/src/egg/lexer.cxx.prebuilt +++ b/panda/src/egg/lexer.cxx.prebuilt @@ -1,3331 +1,3338 @@ -#line 2 "lex.yy.c" - -#line 4 "lex.yy.c" - -#define YY_INT_ALIGNED short int - -/* A lexical scanner generated by flex */ - -#define yy_create_buffer eggyy_create_buffer -#define yy_delete_buffer eggyy_delete_buffer -#define yy_flex_debug eggyy_flex_debug -#define yy_init_buffer eggyy_init_buffer -#define yy_flush_buffer eggyy_flush_buffer -#define yy_load_buffer_state eggyy_load_buffer_state -#define yy_switch_to_buffer eggyy_switch_to_buffer -#define yyin eggyyin -#define yyleng eggyyleng -#define yylex eggyylex -#define yylineno eggyylineno -#define yyout eggyyout -#define yyrestart eggyyrestart -#define yytext eggyytext -#define yywrap eggyywrap -#define yyalloc eggyyalloc -#define yyrealloc eggyyrealloc -#define yyfree eggyyfree - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 35 -#if YY_FLEX_SUBMINOR_VERSION > 0 -#define FLEX_BETA -#endif - -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ -#include -#include -#include -#include - -/* end standard C headers. */ - -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have . Non-C99 systems may or may not. */ - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif - -#include -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; -#endif /* ! C99 */ - -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - -#endif /* ! FLEXINT_H */ - -#ifdef __cplusplus - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define YY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef YY_USE_CONST -#define yyconst const -#else -#define yyconst -#endif - -/* Returned upon end-of-file. */ -#define YY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. - */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN (yy_start) = 1 + 2 * - -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START (((yy_start) - 1) / 2) -#define YYSTATE YY_START - -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE eggyyrestart(eggyyin ) - -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#ifndef YY_BUF_SIZE -#define YY_BUF_SIZE 16384 -#endif - -/* The state buf must be large enough to hold one state per character in the main buffer. - */ -#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) - -#ifndef YY_TYPEDEF_YY_BUFFER_STATE -#define YY_TYPEDEF_YY_BUFFER_STATE -typedef struct yy_buffer_state *YY_BUFFER_STATE; -#endif - -extern int eggyyleng; - -extern FILE *eggyyin, *eggyyout; - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - - #define YY_LESS_LINENO(n) - -/* Return all but the first "n" matched characters back to the input stream. */ -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up eggyytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - *yy_cp = (yy_hold_char); \ - YY_RESTORE_YY_MORE_OFFSET \ - (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up eggyytext again */ \ - } \ - while ( 0 ) - -#define unput(c) yyunput( c, (yytext_ptr) ) - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - -#ifndef YY_STRUCT_YY_BUFFER_STATE -#define YY_STRUCT_YY_BUFFER_STATE -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - yy_size_t yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - int yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - int yy_bs_lineno; /**< The line count. */ - int yy_bs_column; /**< The column count. */ - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; - -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via eggyyrestart()), so that the user can continue scanning by - * just pointing eggyyin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - - }; -#endif /* !YY_STRUCT_YY_BUFFER_STATE */ - -/* Stack of input buffers. */ -static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ -static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ -static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - * - * Returns the top of the stack, or NULL. - */ -#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ - ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ - : NULL) - -/* Same as previous macro, but useful when we know that the buffer stack is not - * NULL or when we need an lvalue. For internal use only. - */ -#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] - -/* yy_hold_char holds the character lost when eggyytext is formed. */ -static char yy_hold_char; -static int yy_n_chars; /* number of characters read into yy_ch_buf */ -int eggyyleng; - -/* Points to current character in buffer. */ -static char *yy_c_buf_p = (char *) 0; -static int yy_init = 0; /* whether we need to initialize */ -static int yy_start = 0; /* start state number */ - -/* Flag which is used to allow eggyywrap()'s to do buffer switches - * instead of setting up a fresh eggyyin. A bit of a hack ... - */ -static int yy_did_buffer_switch_on_eof; - -void eggyyrestart (FILE *input_file ); -void eggyy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); -YY_BUFFER_STATE eggyy_create_buffer (FILE *file,int size ); -void eggyy_delete_buffer (YY_BUFFER_STATE b ); -void eggyy_flush_buffer (YY_BUFFER_STATE b ); -void eggyypush_buffer_state (YY_BUFFER_STATE new_buffer ); -void eggyypop_buffer_state (void ); - -static void eggyyensure_buffer_stack (void ); -static void eggyy_load_buffer_state (void ); -static void eggyy_init_buffer (YY_BUFFER_STATE b,FILE *file ); - -#define YY_FLUSH_BUFFER eggyy_flush_buffer(YY_CURRENT_BUFFER ) - -YY_BUFFER_STATE eggyy_scan_buffer (char *base,yy_size_t size ); -YY_BUFFER_STATE eggyy_scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE eggyy_scan_bytes (yyconst char *bytes,int len ); - -void *eggyyalloc (yy_size_t ); -void *eggyyrealloc (void *,yy_size_t ); -void eggyyfree (void * ); - -#define yy_new_buffer eggyy_create_buffer - -#define yy_set_interactive(is_interactive) \ - { \ - if ( ! YY_CURRENT_BUFFER ){ \ - eggyyensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - eggyy_create_buffer(eggyyin,YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ - } - -#define yy_set_bol(at_bol) \ - { \ - if ( ! YY_CURRENT_BUFFER ){\ - eggyyensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - eggyy_create_buffer(eggyyin,YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ - } - -#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) - -typedef unsigned char YY_CHAR; - -FILE *eggyyin = (FILE *) 0, *eggyyout = (FILE *) 0; - -typedef int yy_state_type; - -extern int eggyylineno; - -int eggyylineno = 1; - -extern char *eggyytext; -#define yytext_ptr eggyytext - -static yy_state_type yy_get_previous_state (void ); -static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); -static int yy_get_next_buffer (void ); -static void yy_fatal_error (yyconst char msg[] ); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up eggyytext. - */ -#define YY_DO_BEFORE_ACTION \ - (yytext_ptr) = yy_bp; \ - eggyyleng = (size_t) (yy_cp - yy_bp); \ - (yy_hold_char) = *yy_cp; \ - *yy_cp = '\0'; \ - (yy_c_buf_p) = yy_cp; - -#define YY_NUM_RULES 99 -#define YY_END_OF_BUFFER 100 -/* This struct is not used in this scanner, - but its presence is necessary. */ -struct yy_trans_info - { - flex_int32_t yy_verify; - flex_int32_t yy_nxt; - }; -static yyconst flex_int16_t yy_accept[577] = - { 0, - 0, 0, 100, 98, 2, 1, 97, 98, 98, 98, - 98, 89, 89, 89, 98, 98, 98, 5, 98, 1, - 98, 89, 89, 98, 89, 4, 3, 89, 91, 98, - 90, 89, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 89, 98, 3, 3, 91, 98, - 89, 90, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 65, 98, 98, 98, 93, - 98, 98, 94, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 19, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 80, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - - 98, 98, 98, 98, 25, 98, 98, 98, 98, 98, - 23, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 51, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 66, 98, 98, 98, 98, 98, - 98, 98, 98, 77, 98, 98, 98, 98, 98, 98, - 92, 98, 95, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 20, 98, 98, 98, 98, - 98, 24, 98, 29, 98, 98, 98, 98, 98, 36, - 37, 98, 98, 98, 42, 98, 98, 98, 98, 98, - - 98, 98, 52, 98, 54, 55, 56, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 73, - 98, 76, 98, 98, 98, 98, 98, 98, 92, 96, - 98, 98, 8, 98, 98, 98, 13, 98, 98, 98, - 98, 98, 98, 98, 98, 22, 27, 98, 30, 98, - 98, 32, 33, 98, 98, 41, 98, 98, 98, 98, - 47, 98, 98, 98, 98, 98, 98, 59, 98, 98, - 98, 64, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 12, - 14, 98, 98, 98, 98, 98, 98, 98, 98, 98, - - 98, 98, 98, 98, 43, 98, 98, 98, 98, 98, - 98, 53, 57, 58, 98, 98, 62, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 83, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 15, 16, - 98, 98, 98, 98, 21, 98, 34, 98, 98, 39, - 40, 98, 98, 98, 98, 98, 50, 98, 61, 98, - 67, 68, 69, 98, 98, 98, 98, 78, 79, 81, - 98, 98, 98, 82, 98, 98, 98, 98, 11, 98, - 98, 98, 26, 98, 35, 38, 98, 98, 98, 98, - 98, 60, 98, 70, 98, 98, 98, 98, 98, 98, - - 98, 87, 98, 98, 98, 9, 98, 17, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 71, 72, 98, - 98, 98, 98, 86, 98, 98, 98, 98, 98, 98, - 98, 44, 98, 46, 48, 49, 98, 98, 98, 84, - 85, 98, 6, 7, 98, 98, 31, 98, 98, 98, - 74, 98, 88, 98, 98, 98, 45, 98, 98, 98, - 98, 98, 98, 75, 98, 98, 98, 98, 10, 98, - 98, 63, 18, 98, 28, 0 - } ; - -static yyconst flex_int32_t yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 4, 5, 6, 1, 1, 1, 1, - 1, 7, 8, 1, 9, 10, 11, 12, 13, 14, - 15, 16, 14, 14, 14, 14, 14, 1, 1, 17, - 1, 18, 1, 1, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 1, 1, 1, 1, 45, 1, 46, 47, 48, 49, - - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 1, 72, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1 - } ; - -static yyconst flex_int32_t yy_meta[73] = - { 0, - 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2 - } ; - -static yyconst flex_int16_t yy_base[582] = - { 0, - 0, 71, 1210, 0, 1211, 0, 1211, 8, 23, 28, - 18, 134, 55, 79, 203, 2, 0, 1211, 0, 0, - 94, 101, 122, 17, 146, 0, 24, 151, 18, 174, - 263, 276, 31, 277, 289, 338, 72, 64, 69, 71, - 80, 146, 261, 284, 300, 108, 312, 352, 376, 293, - 401, 129, 146, 139, 442, 151, 49, 0, 35, 179, - 339, 0, 151, 271, 259, 286, 337, 309, 352, 349, - 383, 1191, 354, 374, 391, 384, 390, 400, 396, 394, - 392, 404, 407, 411, 432, 422, 427, 434, 434, 430, - 448, 449, 437, 438, 447, 455, 440, 452, 457, 463, - - 446, 466, 467, 453, 470, 463, 494, 449, 475, 501, - 465, 478, 1190, 492, 493, 0, 487, 498, 498, 0, - 1195, 504, 0, 500, 502, 508, 515, 507, 505, 517, - 504, 505, 513, 537, 509, 0, 514, 1188, 538, 523, - 537, 554, 552, 1187, 532, 558, 555, 541, 551, 544, - 551, 547, 563, 553, 570, 566, 566, 560, 572, 571, - 573, 559, 567, 568, 1186, 596, 603, 593, 597, 589, - 607, 592, 601, 1185, 607, 605, 602, 604, 613, 620, - 1184, 608, 0, 609, 612, 610, 618, 1195, 611, 628, - 641, 635, 653, 656, 661, 646, 653, 1193, 661, 658, - - 663, 655, 667, 1181, 0, 651, 672, 662, 675, 671, - 0, 1180, 666, 1179, 664, 660, 681, 663, 665, 1178, - 1177, 668, 678, 677, 1176, 695, 682, 702, 694, 714, - 697, 711, 0, 1175, 699, 1174, 1173, 1172, 711, 720, - 717, 715, 723, 722, 0, 724, 721, 710, 726, 715, - 1171, 721, 1170, 0, 721, 722, 723, 735, 726, 742, - 777, 744, 0, 741, 748, 1169, 754, 763, 779, 1168, - 781, 783, 774, 775, 781, 0, 779, 778, 793, 1167, - 1166, 0, 786, 0, 1165, 793, 784, 1164, 1163, 0, - 0, 790, 776, 1147, 0, 789, 801, 782, 1146, 799, - - 811, 815, 0, 827, 0, 0, 0, 820, 816, 1144, - 821, 822, 829, 1137, 824, 820, 823, 822, 837, 0, - 837, 0, 825, 826, 828, 827, 832, 839, 0, 0, - 849, 852, 0, 855, 857, 1132, 0, 1131, 862, 854, - 872, 870, 866, 884, 876, 0, 0, 886, 0, 885, - 888, 0, 0, 891, 40, 0, 1128, 872, 874, 876, - 0, 890, 889, 885, 755, 526, 413, 0, 897, 895, - 903, 0, 885, 887, 903, 901, 895, 911, 909, 909, - 911, 912, 943, 919, 931, 929, 921, 927, 934, 0, - 0, 412, 411, 933, 948, 934, 946, 410, 930, 409, - - 948, 942, 373, 371, 0, 938, 942, 937, 958, 957, - 369, 0, 0, 0, 961, 367, 0, 955, 365, 361, - 330, 956, 964, 964, 980, 322, 316, 300, 0, 978, - 979, 990, 290, 983, 983, 981, 996, 288, 0, 0, - 981, 983, 989, 278, 0, 1000, 0, 277, 275, 0, - 0, 984, 1001, 992, 996, 1005, 0, 189, 0, 1000, - 0, 0, 0, 181, 1002, 1011, 1030, 0, 0, 0, - 1008, 1003, 1014, 0, 1024, 1028, 1016, 1050, 0, 167, - 1034, 1027, 0, 1030, 0, 0, 1047, 1053, 1050, 1037, - 1038, 0, 1055, 0, 159, 138, 1059, 1041, 1049, 1052, - - 137, 0, 1048, 1064, 1064, 0, 1065, 0, 1052, 1067, - 1054, 134, 1074, 124, 122, 115, 1069, 0, 0, 1069, - 1072, 105, 104, 0, 114, 101, 100, 1078, 1068, 79, - 1095, 0, 1097, 0, 0, 0, 1083, 48, 1097, 0, - 0, 46, 0, 0, 1087, 1089, 0, 1085, 44, 1102, - 0, 1096, 0, 1108, 1094, 1099, 0, 1101, 42, 1100, - 1116, 1107, 1109, 0, 40, 1111, 1110, 39, 0, 34, - 1114, 0, 0, 27, 0, 1211, 1171, 0, 1174, 1176, - 1178 - } ; - -static yyconst flex_int16_t yy_def[582] = - { 0, - 577, 577, 576, 578, 576, 579, 576, 578, 578, 578, - 578, 578, 578, 578, 576, 578, 578, 576, 578, 579, - 578, 578, 578, 578, 578, 578, 580, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 580, 581, 578, 578, - 578, 31, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 261, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 0, 576, 576, 576, 576, - 576 - } ; - -static yyconst flex_int16_t yy_nxt[1284] = - { 0, - 19, 5, 6, 7, 576, 576, 576, 8, 9, 10, - 11, 12, 13, 14, 14, 14, 15, 21, 54, 22, - 22, 22, 22, 22, 26, 58, 16, 58, 27, 59, - 59, 17, 21, 53, 22, 23, 22, 22, 22, 25, - 25, 25, 25, 25, 575, 54, 59, 59, 56, 24, - 58, 573, 58, 16, 403, 404, 572, 569, 17, 564, - 53, 557, 64, 553, 32, 551, 22, 22, 22, 22, - 22, 18, 5, 6, 7, 56, 24, 30, 8, 9, - 10, 11, 12, 13, 14, 14, 14, 15, 28, 64, - 22, 22, 22, 22, 22, 58, 547, 16, 83, 84, - - 85, 30, 17, 86, 30, 25, 25, 25, 25, 25, - 28, 87, 22, 22, 22, 22, 22, 544, 543, 542, - 58, 541, 540, 30, 16, 83, 84, 85, 30, 17, - 86, 55, 536, 22, 22, 22, 22, 22, 87, 535, - 98, 534, 18, 28, 30, 22, 22, 22, 22, 22, - 30, 532, 119, 29, 524, 519, 30, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 98, 30, 120, - 121, 30, 88, 30, 123, 31, 518, 124, 89, 119, - 29, 60, 60, 30, 508, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 30, 120, 121, 494, 88, - - 30, 123, 31, 19, 124, 89, 492, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 33, 34, 35, 36, 19, 37, 38, 19, 39, - 40, 41, 42, 43, 44, 45, 46, 19, 47, 48, - 49, 50, 51, 19, 52, 19, 19, 19, 33, 34, - 35, 36, 19, 37, 38, 19, 39, 40, 41, 42, - 43, 44, 45, 46, 19, 47, 48, 49, 50, 51, - 19, 52, 19, 19, 62, 62, 62, 62, 62, 90, - 63, 62, 62, 62, 62, 62, 62, 25, 25, 25, - 25, 25, 486, 91, 485, 483, 92, 125, 30, 65, - - 66, 112, 126, 67, 127, 479, 90, 474, 62, 62, - 62, 62, 62, 62, 69, 68, 93, 470, 70, 95, - 91, 71, 94, 92, 125, 30, 65, 66, 72, 126, - 67, 127, 113, 469, 99, 96, 100, 114, 97, 468, - 130, 69, 68, 93, 101, 70, 95, 463, 71, 94, - 61, 61, 61, 61, 61, 72, 73, 102, 74, 113, - 75, 99, 96, 100, 76, 97, 128, 130, 129, 77, - 131, 101, 103, 78, 104, 79, 80, 105, 462, 81, - 82, 132, 461, 73, 459, 74, 457, 75, 451, 137, - 450, 76, 106, 128, 107, 129, 77, 131, 108, 103, - - 78, 104, 79, 80, 105, 109, 81, 82, 132, 115, - 138, 110, 133, 134, 139, 135, 137, 111, 116, 106, - 140, 107, 141, 117, 142, 108, 447, 445, 440, 439, - 414, 143, 109, 144, 145, 146, 147, 138, 110, 133, - 134, 139, 135, 148, 111, 118, 122, 140, 151, 141, - 117, 142, 149, 25, 25, 25, 25, 25, 143, 152, - 144, 145, 146, 147, 30, 153, 154, 155, 150, 156, - 148, 157, 158, 159, 160, 151, 161, 162, 163, 149, - 165, 164, 166, 167, 168, 169, 152, 170, 171, 172, - 176, 30, 153, 154, 155, 150, 156, 177, 157, 158, - - 159, 160, 181, 161, 162, 163, 182, 165, 164, 166, - 167, 168, 169, 173, 170, 171, 172, 176, 174, 178, - 184, 185, 186, 179, 177, 175, 187, 180, 188, 181, - 190, 191, 192, 182, 193, 194, 195, 196, 197, 198, - 173, 199, 200, 413, 203, 174, 178, 184, 185, 186, - 179, 204, 175, 187, 180, 188, 206, 190, 191, 192, - 207, 193, 194, 195, 196, 197, 198, 201, 199, 200, - 202, 203, 208, 209, 210, 212, 213, 214, 204, 215, - 216, 217, 218, 206, 219, 220, 221, 207, 224, 225, - 226, 227, 222, 228, 201, 229, 230, 202, 231, 208, - - 209, 210, 212, 213, 214, 223, 215, 216, 217, 218, - 232, 219, 220, 221, 234, 224, 225, 226, 227, 222, - 228, 235, 229, 230, 239, 231, 240, 241, 242, 243, - 244, 246, 223, 249, 247, 250, 251, 232, 252, 255, - 256, 234, 248, 257, 236, 237, 238, 258, 235, 259, - 253, 239, 261, 240, 241, 242, 243, 244, 246, 262, - 249, 247, 250, 251, 263, 252, 255, 256, 264, 248, - 257, 236, 237, 238, 258, 265, 259, 253, 266, 261, - 267, 268, 269, 271, 272, 273, 262, 274, 275, 277, - 278, 263, 279, 280, 281, 264, 283, 285, 286, 287, - - 288, 289, 265, 292, 293, 266, 294, 267, 268, 269, - 271, 272, 273, 296, 274, 275, 277, 278, 297, 279, - 280, 281, 298, 283, 285, 286, 287, 288, 289, 299, - 292, 293, 300, 294, 301, 302, 304, 308, 309, 311, - 296, 312, 310, 313, 314, 297, 315, 316, 317, 298, - 318, 319, 321, 323, 324, 325, 299, 326, 327, 300, - 328, 301, 302, 304, 308, 309, 311, 330, 312, 310, - 313, 314, 412, 315, 316, 317, 331, 318, 319, 321, - 323, 324, 325, 332, 326, 327, 334, 328, 329, 329, - 329, 329, 329, 335, 330, 329, 329, 329, 329, 329, - - 329, 336, 338, 331, 339, 340, 341, 342, 343, 344, - 332, 345, 348, 334, 350, 351, 354, 355, 357, 360, - 335, 358, 329, 329, 329, 329, 329, 329, 336, 338, - 362, 339, 340, 341, 342, 343, 344, 359, 345, 348, - 363, 350, 351, 354, 355, 357, 360, 364, 358, 365, - 366, 367, 369, 370, 371, 373, 374, 362, 375, 376, - 377, 379, 380, 381, 359, 382, 378, 363, 383, 384, - 385, 386, 387, 388, 364, 389, 365, 366, 367, 369, - 370, 371, 373, 374, 392, 375, 376, 377, 379, 380, - 381, 393, 382, 378, 394, 383, 384, 385, 386, 387, - - 388, 395, 389, 396, 397, 398, 399, 400, 401, 402, - 406, 392, 407, 408, 409, 410, 411, 415, 393, 416, - 417, 394, 419, 418, 420, 421, 422, 423, 395, 424, - 396, 397, 398, 399, 400, 401, 402, 406, 425, 407, - 408, 409, 410, 411, 415, 426, 416, 427, 428, 419, - 418, 420, 421, 422, 423, 433, 424, 434, 435, 436, - 429, 430, 437, 438, 441, 425, 442, 443, 444, 446, - 448, 449, 426, 452, 427, 428, 431, 453, 432, 454, - 455, 456, 433, 458, 434, 435, 436, 460, 430, 437, - 438, 441, 464, 442, 443, 444, 446, 448, 449, 465, - - 452, 466, 467, 431, 453, 432, 454, 455, 456, 471, - 458, 472, 473, 475, 460, 476, 477, 478, 480, 464, - 481, 482, 484, 487, 488, 489, 465, 490, 466, 467, - 491, 493, 495, 496, 499, 500, 471, 501, 472, 473, - 475, 502, 476, 477, 478, 480, 504, 481, 482, 484, - 487, 488, 489, 497, 490, 505, 509, 491, 493, 495, - 496, 499, 500, 510, 501, 511, 498, 506, 503, 512, - 507, 513, 514, 504, 515, 516, 517, 520, 521, 522, - 497, 523, 505, 509, 525, 526, 527, 528, 529, 530, - 510, 531, 511, 498, 533, 537, 512, 507, 513, 514, - - 538, 515, 516, 517, 520, 521, 522, 539, 523, 545, - 546, 525, 526, 527, 528, 529, 530, 548, 531, 549, - 550, 533, 537, 552, 554, 555, 556, 538, 558, 559, - 560, 561, 562, 563, 539, 565, 545, 546, 566, 567, - 568, 570, 571, 574, 548, 405, 549, 550, 391, 390, - 552, 554, 555, 556, 372, 558, 559, 560, 561, 562, - 563, 368, 565, 361, 356, 566, 567, 568, 570, 571, - 574, 4, 4, 4, 20, 20, 57, 57, 58, 58, - 353, 352, 349, 347, 346, 337, 333, 322, 320, 307, - 306, 305, 303, 295, 291, 290, 284, 282, 276, 270, - - 260, 254, 245, 233, 211, 205, 189, 183, 136, 576, - 3, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576 - } ; - -static yyconst flex_int16_t yy_chk[1284] = - { 0, - 578, 1, 1, 1, 0, 0, 0, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 8, 17, 8, - 8, 8, 8, 8, 11, 27, 1, 27, 11, 29, - 29, 1, 9, 16, 9, 9, 9, 9, 9, 10, - 10, 10, 10, 10, 574, 17, 59, 59, 24, 9, - 57, 570, 57, 1, 355, 355, 568, 565, 1, 559, - 16, 549, 33, 542, 13, 538, 13, 13, 13, 13, - 13, 1, 2, 2, 2, 24, 9, 13, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 14, 33, - 14, 14, 14, 14, 14, 27, 530, 2, 37, 38, - - 39, 14, 2, 40, 13, 21, 21, 21, 21, 21, - 22, 41, 22, 22, 22, 22, 22, 527, 526, 525, - 57, 523, 522, 22, 2, 37, 38, 39, 14, 2, - 40, 23, 516, 23, 23, 23, 23, 23, 41, 515, - 46, 514, 2, 12, 23, 12, 12, 12, 12, 12, - 22, 512, 52, 12, 501, 496, 12, 25, 25, 25, - 25, 25, 28, 28, 28, 28, 28, 46, 25, 53, - 54, 23, 42, 28, 56, 12, 495, 63, 42, 52, - 12, 30, 30, 12, 480, 30, 30, 30, 30, 30, - 60, 60, 60, 60, 60, 25, 53, 54, 464, 42, - - 28, 56, 12, 15, 63, 42, 458, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 31, 31, 31, 31, 31, 43, - 32, 31, 31, 31, 31, 31, 31, 32, 32, 32, - 32, 32, 449, 43, 448, 444, 43, 64, 32, 34, - - 34, 50, 65, 34, 66, 438, 43, 433, 31, 31, - 31, 31, 31, 31, 35, 34, 44, 428, 35, 45, - 43, 35, 44, 43, 64, 32, 34, 34, 35, 65, - 34, 66, 50, 427, 47, 45, 47, 50, 45, 426, - 68, 35, 34, 44, 47, 35, 45, 421, 35, 44, - 61, 61, 61, 61, 61, 35, 36, 48, 36, 50, - 36, 47, 45, 47, 36, 45, 67, 68, 67, 36, - 69, 47, 48, 36, 48, 36, 36, 48, 420, 36, - 36, 70, 419, 36, 416, 36, 411, 36, 404, 73, - 403, 36, 48, 67, 49, 67, 36, 69, 49, 48, - - 36, 48, 36, 36, 48, 49, 36, 36, 70, 51, - 74, 49, 71, 71, 75, 71, 73, 49, 51, 48, - 76, 49, 77, 51, 78, 49, 400, 398, 393, 392, - 367, 79, 49, 80, 81, 82, 83, 74, 49, 71, - 71, 75, 71, 84, 49, 51, 55, 76, 86, 77, - 51, 78, 85, 55, 55, 55, 55, 55, 79, 87, - 80, 81, 82, 83, 55, 88, 89, 90, 85, 91, - 84, 92, 93, 94, 95, 86, 96, 97, 98, 85, - 99, 98, 100, 101, 102, 103, 87, 104, 105, 106, - 108, 55, 88, 89, 90, 85, 91, 109, 92, 93, - - 94, 95, 111, 96, 97, 98, 112, 99, 98, 100, - 101, 102, 103, 107, 104, 105, 106, 108, 107, 110, - 114, 115, 117, 110, 109, 107, 118, 110, 119, 111, - 122, 124, 125, 112, 126, 127, 128, 129, 130, 131, - 107, 132, 133, 366, 135, 107, 110, 114, 115, 117, - 110, 137, 107, 118, 110, 119, 139, 122, 124, 125, - 140, 126, 127, 128, 129, 130, 131, 134, 132, 133, - 134, 135, 141, 142, 143, 145, 146, 147, 137, 148, - 149, 150, 151, 139, 152, 153, 154, 140, 156, 157, - 158, 159, 155, 160, 134, 161, 162, 134, 163, 141, - - 142, 143, 145, 146, 147, 155, 148, 149, 150, 151, - 164, 152, 153, 154, 166, 156, 157, 158, 159, 155, - 160, 167, 161, 162, 168, 163, 169, 170, 171, 172, - 173, 175, 155, 177, 176, 178, 179, 164, 180, 182, - 184, 166, 176, 185, 167, 167, 167, 186, 167, 187, - 180, 168, 189, 169, 170, 171, 172, 173, 175, 190, - 177, 176, 178, 179, 191, 180, 182, 184, 192, 176, - 185, 167, 167, 167, 186, 193, 187, 180, 194, 189, - 195, 196, 197, 199, 200, 201, 190, 202, 203, 206, - 207, 191, 208, 209, 210, 192, 213, 215, 216, 217, - - 218, 219, 193, 222, 223, 194, 224, 195, 196, 197, - 199, 200, 201, 226, 202, 203, 206, 207, 227, 208, - 209, 210, 228, 213, 215, 216, 217, 218, 219, 229, - 222, 223, 230, 224, 231, 232, 235, 239, 240, 241, - 226, 242, 240, 243, 244, 227, 246, 247, 248, 228, - 249, 250, 252, 255, 256, 257, 229, 258, 259, 230, - 260, 231, 232, 235, 239, 240, 241, 262, 242, 240, - 243, 244, 365, 246, 247, 248, 264, 249, 250, 252, - 255, 256, 257, 265, 258, 259, 267, 260, 261, 261, - 261, 261, 261, 268, 262, 261, 261, 261, 261, 261, - - 261, 269, 271, 264, 272, 273, 274, 275, 277, 278, - 265, 279, 283, 267, 286, 287, 292, 293, 296, 298, - 268, 297, 261, 261, 261, 261, 261, 261, 269, 271, - 300, 272, 273, 274, 275, 277, 278, 297, 279, 283, - 301, 286, 287, 292, 293, 296, 298, 302, 297, 304, - 308, 309, 311, 312, 313, 315, 316, 300, 317, 318, - 319, 321, 323, 324, 297, 325, 319, 301, 326, 327, - 328, 331, 332, 334, 302, 335, 304, 308, 309, 311, - 312, 313, 315, 316, 339, 317, 318, 319, 321, 323, - 324, 340, 325, 319, 341, 326, 327, 328, 331, 332, - - 334, 342, 335, 343, 344, 345, 348, 350, 351, 354, - 358, 339, 359, 360, 362, 363, 364, 369, 340, 370, - 371, 341, 373, 371, 374, 375, 376, 377, 342, 378, - 343, 344, 345, 348, 350, 351, 354, 358, 379, 359, - 360, 362, 363, 364, 369, 380, 370, 381, 382, 373, - 371, 374, 375, 376, 377, 384, 378, 385, 386, 387, - 383, 383, 388, 389, 394, 379, 395, 396, 397, 399, - 401, 402, 380, 406, 381, 382, 383, 407, 383, 408, - 409, 410, 384, 415, 385, 386, 387, 418, 383, 388, - 389, 394, 422, 395, 396, 397, 399, 401, 402, 423, - - 406, 424, 425, 383, 407, 383, 408, 409, 410, 430, - 415, 431, 432, 434, 418, 435, 436, 437, 441, 422, - 442, 443, 446, 452, 453, 454, 423, 455, 424, 425, - 456, 460, 465, 466, 471, 472, 430, 473, 431, 432, - 434, 475, 435, 436, 437, 441, 476, 442, 443, 446, - 452, 453, 454, 467, 455, 477, 481, 456, 460, 465, - 466, 471, 472, 482, 473, 484, 467, 478, 475, 487, - 478, 488, 489, 476, 490, 491, 493, 497, 498, 499, - 467, 500, 477, 481, 503, 504, 505, 507, 509, 510, - 482, 511, 484, 467, 513, 517, 487, 478, 488, 489, - - 520, 490, 491, 493, 497, 498, 499, 521, 500, 528, - 529, 503, 504, 505, 507, 509, 510, 531, 511, 533, - 537, 513, 517, 539, 545, 546, 548, 520, 550, 552, - 554, 555, 556, 558, 521, 560, 528, 529, 561, 562, - 563, 566, 567, 571, 531, 357, 533, 537, 338, 336, - 539, 545, 546, 548, 314, 550, 552, 554, 555, 556, - 558, 310, 560, 299, 294, 561, 562, 563, 566, 567, - 571, 577, 577, 577, 579, 579, 580, 580, 581, 581, - 289, 288, 285, 281, 280, 270, 266, 253, 251, 238, - 237, 236, 234, 225, 221, 220, 214, 212, 204, 198, - - 188, 181, 174, 165, 144, 138, 121, 113, 72, 3, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576 - } ; - -static yy_state_type yy_last_accepting_state; -static char *yy_last_accepting_cpos; - -extern int eggyy_flex_debug; -int eggyy_flex_debug = 0; - -/* The intent behind this definition is that it'll catch - * any uses of REJECT which flex missed. - */ -#define REJECT reject_used_but_not_detected -#define yymore() yymore_used_but_not_detected -#define YY_MORE_ADJ 0 -#define YY_RESTORE_YY_MORE_OFFSET -char *eggyytext; -#line 1 "lexer.lxx" -/* -// Filename: lexer.l -// Created by: drose (16Jan99) -// -//////////////////////////////////////////////////////////////////// -*/ -#line 9 "lexer.lxx" -#include "pandabase.h" -#include "lexerDefs.h" -#include "parserDefs.h" -#include "config_egg.h" -#include "parser.h" -#include "indent.h" -#include "pnotify.h" -#include "lightMutex.h" -#include "thread.h" -#include "pstrtod.h" - -#include - -extern "C" int eggyywrap(void); // declared below. - -static int yyinput(void); // declared by flex. - - -//////////////////////////////////////////////////////////////////// -// Static variables -//////////////////////////////////////////////////////////////////// - -// This mutex protects all of these global variables. -LightMutex egg_lock; - -// We'll increment line_number and col_number as we parse the file, so -// that we can report the position of an error. -static int line_number = 0; -static int col_number = 0; - -// current_line holds as much of the current line as will fit. Its -// only purpose is for printing it out to report an error to the user. -static const int max_error_width = 1024; -static char current_line[max_error_width + 1]; - -static int error_count = 0; -static int warning_count = 0; - -// This is the pointer to the current input stream. -static istream *inp = NULL; - -// This is the name of the egg file we're parsing. We keep it so we -// can print it out for error messages. -static string egg_filename; - -// This is the initial token state returned by the lexer. It allows -// the yacc grammar to start from initial points. -static int initial_token; - -//////////////////////////////////////////////////////////////////// -// Defining the interface to the lexer. -//////////////////////////////////////////////////////////////////// - -void -egg_init_lexer(istream &in, const string &filename) { - inp = ∈ - egg_filename = filename; - line_number = 0; - col_number = 0; - error_count = 0; - warning_count = 0; - initial_token = START_EGG; -} - -void -egg_start_group_body() { - /* Set the initial state to begin within a group_body context, - instead of at the beginning of the egg file. */ - initial_token = START_GROUP_BODY; -} - -void -egg_start_texture_body() { - initial_token = START_TEXTURE_BODY; -} - -void -egg_start_primitive_body() { - initial_token = START_PRIMITIVE_BODY; -} - -int -egg_error_count() { - return error_count; -} - -int -egg_warning_count() { - return warning_count; -} - - -//////////////////////////////////////////////////////////////////// -// Internal support functions. -//////////////////////////////////////////////////////////////////// - -int -eggyywrap(void) { - return 1; -} - -void -eggyyerror(const string &msg) { - if (egg_cat.is_error()) { - ostream &out = egg_cat.error(false); - - out << "\nError"; - if (!egg_filename.empty()) { - out << " in " << egg_filename; - } - out - << " at line " << line_number << ", column " << col_number << ":\n" - << setiosflags(Notify::get_literal_flag()) - << current_line << "\n"; - indent(out, col_number-1) - << "^\n" << msg << "\n\n" - << resetiosflags(Notify::get_literal_flag()) << flush; - } - error_count++; -} - -void -eggyyerror(ostringstream &strm) { - string s = strm.str(); - eggyyerror(s); -} - -void -eggyywarning(const string &msg) { - if (egg_cat.is_warning()) { - ostream &out = egg_cat.warning(false); - - out << "\nWarning"; - if (!egg_filename.empty()) { - out << " in " << egg_filename; - } - out - << " at line " << line_number << ", column " << col_number << ":\n" - << setiosflags(Notify::get_literal_flag()) - << current_line << "\n"; - indent(out, col_number-1) - << "^\n" << msg << "\n\n" - << resetiosflags(Notify::get_literal_flag()) << flush; - } - warning_count++; -} - -void -eggyywarning(ostringstream &strm) { - string s = strm.str(); - eggyywarning(s); -} - -// Now define a function to take input from an istream instead of a -// stdio FILE pointer. This is flex-specific. -static void -input_chars(char *buffer, int &result, int max_size) { - nassertv(inp != NULL); - if (*inp) { - inp->read(buffer, max_size); - result = inp->gcount(); - - if (line_number == 0) { - // This is a special case. If we are reading the very first bit - // from the stream, copy it into the current_line array. This - // is because the \n.* rule below, which fills current_line - // normally, doesn't catch the first line. - int length = min(max_error_width, result); - strncpy(current_line, buffer, length); - current_line[length] = '\0'; - line_number++; - col_number = 0; - - // Truncate it at the newline. - char *end = strchr(current_line, '\n'); - if (end != NULL) { - *end = '\0'; - } - } - - } else { - // End of file or I/O error. - result = 0; - } - Thread::consider_yield(); -} -#undef YY_INPUT -#define YY_INPUT(buffer, result, max_size) input_chars(buffer, result, max_size) - -// read_char reads and returns a single character, incrementing the -// supplied line and column numbers as appropriate. A convenience -// function for the scanning functions below. -static int -read_char(int &line, int &col) { - int c = yyinput(); - if (c == '\n') { - line++; - col = 0; - } else { - col++; - } - return c; -} - -// scan_quoted_string reads a string delimited by quotation marks and -// returns it. -static string -scan_quoted_string() { - string result; - - // We don't touch the current line number and column number during - // scanning, so that if we detect an error while scanning the string - // (e.g. an unterminated string), we'll report the error as - // occurring at the start of the string, not at the end--somewhat - // more convenient for the user. - - // Instead of adjusting the global line_number and col_number - // variables, we'll operate on our own local variables for the - // interim. - int line = line_number; - int col = col_number; - - int c; - c = read_char(line, col); - while (c != '"' && c != EOF) { - result += c; - c = read_char(line, col); - } - - if (c == EOF) { - eggyyerror("This quotation mark is unterminated."); - } - - line_number = line; - col_number = col; - - return result; -} - -// eat_c_comment scans past all characters up until the first */ -// encountered. -static void -eat_c_comment() { - // As above, we'll operate on our own local copies of line_number - // and col_number within this function. - - int line = line_number; - int col = col_number; - - int c, last_c; - - last_c = '\0'; - c = read_char(line, col); - while (c != EOF && !(last_c == '*' && c == '/')) { - if (last_c == '/' && c == '*') { - ostringstream errmsg; - errmsg << "This comment contains a nested /* symbol at line " - << line << ", column " << col-1 << "--possibly unclosed?" - << ends; - eggyywarning(errmsg); - } - last_c = c; - c = read_char(line, col); - } - - if (c == EOF) { - eggyyerror("This comment marker is unclosed."); - } - - line_number = line; - col_number = col; -} - - -// accept() is called below as each piece is pulled off and -// accepted by the lexer; it increments the current column number. -INLINE void accept() { - col_number += eggyyleng; -} - -#line 1229 "lex.yy.c" - -#define INITIAL 0 - -#ifndef YY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -#endif - -#ifndef YY_EXTRA_TYPE -#define YY_EXTRA_TYPE void * -#endif - -static int yy_init_globals (void ); - -/* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - -int eggyylex_destroy (void ); - -int eggyyget_debug (void ); - -void eggyyset_debug (int debug_flag ); - -YY_EXTRA_TYPE eggyyget_extra (void ); - -void eggyyset_extra (YY_EXTRA_TYPE user_defined ); - -FILE *eggyyget_in (void ); - -void eggyyset_in (FILE * in_str ); - -FILE *eggyyget_out (void ); - -void eggyyset_out (FILE * out_str ); - -int eggyyget_leng (void ); - -char *eggyyget_text (void ); - -int eggyyget_lineno (void ); - -void eggyyset_lineno (int line_number ); - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int eggyywrap (void ); -#else -extern int eggyywrap (void ); -#endif -#endif - - static void yyunput (int c,char *buf_ptr ); - -#ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int ); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * ); -#endif - -#ifndef YY_NO_INPUT - -#ifdef __cplusplus -static int yyinput (void ); -#else -static int input (void ); -#endif - -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Copy whatever the last rule matched to the standard output. */ -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO fwrite( eggyytext, eggyyleng, 1, eggyyout ) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ - { \ - int c = '*'; \ - int n; \ - for ( n = 0; n < max_size && \ - (c = getc( eggyyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( eggyyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else \ - { \ - errno=0; \ - while ( (result = fread(buf, 1, max_size, eggyyin))==0 && ferror(eggyyin)) \ - { \ - if( errno != EINTR) \ - { \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - break; \ - } \ - errno=0; \ - clearerr(eggyyin); \ - } \ - }\ -\ - -#endif - -/* No semi-colon after return; correct usage is to write "yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef yyterminate -#define yyterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) -#endif - -/* end tables serialization structures and prototypes */ - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL_IS_OURS 1 - -extern int eggyylex (void); - -#define YY_DECL int eggyylex (void) -#endif /* !YY_DECL */ - -/* Code executed at the beginning of each rule, after eggyytext and eggyyleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK break; -#endif - -#define YY_RULE_SETUP \ - YY_USER_ACTION - -/** The main scanner function which does all the work. - */ -YY_DECL -{ - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; - -#line 295 "lexer.lxx" - - - - if (initial_token != 0) { - int t = initial_token; - initial_token = 0; - return t; - } - - -#line 1422 "lex.yy.c" - - if ( !(yy_init) ) - { - (yy_init) = 1; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! (yy_start) ) - (yy_start) = 1; /* first start state */ - - if ( ! eggyyin ) - eggyyin = stdin; - - if ( ! eggyyout ) - eggyyout = stdout; - - if ( ! YY_CURRENT_BUFFER ) { - eggyyensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - eggyy_create_buffer(eggyyin,YY_BUF_SIZE ); - } - - eggyy_load_buffer_state( ); - } - - while ( 1 ) /* loops until end-of-file is reached */ - { - yy_cp = (yy_c_buf_p); - - /* Support of eggyytext. */ - *yy_cp = (yy_hold_char); - - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - - yy_current_state = (yy_start); -yy_match: - do - { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 577 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - ++yy_cp; - } - while ( yy_base[yy_current_state] != 1211 ); - -yy_find_action: - yy_act = yy_accept[yy_current_state]; - if ( yy_act == 0 ) - { /* have to back up */ - yy_cp = (yy_last_accepting_cpos); - yy_current_state = (yy_last_accepting_state); - yy_act = yy_accept[yy_current_state]; - } - - YY_DO_BEFORE_ACTION; - -do_action: /* This label is used only to access EOF actions. */ - - switch ( yy_act ) - { /* beginning of action switch */ - case 0: /* must back up */ - /* undo the effects of YY_DO_BEFORE_ACTION */ - *yy_cp = (yy_hold_char); - yy_cp = (yy_last_accepting_cpos); - yy_current_state = (yy_last_accepting_state); - goto yy_find_action; - -case 1: -/* rule 1 can match eol */ -YY_RULE_SETUP -#line 305 "lexer.lxx" -{ - // New line. Save a copy of the line so we can print it out for the - // benefit of the user in case we get an error. - - strncpy(current_line, eggyytext+1, max_error_width); - current_line[max_error_width] = '\0'; - line_number++; - col_number=0; - - // Return the whole line to the lexer, except the newline character, - // which we eat. - yyless(1); -} - YY_BREAK -case 2: -YY_RULE_SETUP -#line 319 "lexer.lxx" -{ - // Eat whitespace. - accept(); -} - YY_BREAK -case 3: -YY_RULE_SETUP -#line 324 "lexer.lxx" -{ - // Eat C++-style comments. - accept(); -} - YY_BREAK -case 4: -YY_RULE_SETUP -#line 329 "lexer.lxx" -{ - // Eat C-style comments. - accept(); - eat_c_comment(); -} - YY_BREAK -case 5: -YY_RULE_SETUP -#line 335 "lexer.lxx" -{ - // Send curly braces as themselves. - accept(); - return eggyytext[0]; -} - YY_BREAK -case 6: -YY_RULE_SETUP -#line 343 "lexer.lxx" -{ - accept(); - return ANIMPRELOAD; -} - YY_BREAK -case 7: -YY_RULE_SETUP -#line 347 "lexer.lxx" -{ - accept(); - return BEZIERCURVE; -} - YY_BREAK -case 8: -YY_RULE_SETUP -#line 351 "lexer.lxx" -{ - accept(); - return BFACE; -} - YY_BREAK -case 9: -YY_RULE_SETUP -#line 355 "lexer.lxx" -{ - accept(); - return BILLBOARD; -} - YY_BREAK -case 10: -YY_RULE_SETUP -#line 359 "lexer.lxx" -{ - accept(); - return BILLBOARDCENTER; -} - YY_BREAK -case 11: -YY_RULE_SETUP -#line 363 "lexer.lxx" -{ - accept(); - return BINORMAL; -} - YY_BREAK -case 12: -YY_RULE_SETUP -#line 367 "lexer.lxx" -{ - accept(); - return BUNDLE; -} - YY_BREAK -case 13: -YY_RULE_SETUP -#line 371 "lexer.lxx" -{ - accept(); - return SCALAR; -} - YY_BREAK -case 14: -YY_RULE_SETUP -#line 375 "lexer.lxx" -{ - accept(); - return CLOSED; -} - YY_BREAK -case 15: -YY_RULE_SETUP -#line 379 "lexer.lxx" -{ - accept(); - return COLLIDE; -} - YY_BREAK -case 16: -YY_RULE_SETUP -#line 383 "lexer.lxx" -{ - accept(); - return COMMENT; -} - YY_BREAK -case 17: -YY_RULE_SETUP -#line 387 "lexer.lxx" -{ - accept(); - return COMPONENT; -} - YY_BREAK -case 18: -YY_RULE_SETUP -#line 391 "lexer.lxx" -{ - accept(); - return COORDSYSTEM; -} - YY_BREAK -case 19: -YY_RULE_SETUP -#line 395 "lexer.lxx" -{ - accept(); - return CV; -} - YY_BREAK -case 20: -YY_RULE_SETUP -#line 399 "lexer.lxx" -{ - accept(); - return DART; -} - YY_BREAK -case 21: -YY_RULE_SETUP -#line 403 "lexer.lxx" -{ - accept(); - return DNORMAL; -} - YY_BREAK -case 22: -YY_RULE_SETUP -#line 407 "lexer.lxx" -{ - accept(); - return DRGBA; -} - YY_BREAK -case 23: -YY_RULE_SETUP -#line 411 "lexer.lxx" -{ - accept(); - return DUV; -} - YY_BREAK -case 24: -YY_RULE_SETUP -#line 415 "lexer.lxx" -{ - accept(); - return DXYZ; -} - YY_BREAK -case 25: -YY_RULE_SETUP -#line 419 "lexer.lxx" -{ - accept(); - return DCS; -} - YY_BREAK -case 26: -YY_RULE_SETUP -#line 423 "lexer.lxx" -{ - accept(); - return DISTANCE; -} - YY_BREAK -case 27: -YY_RULE_SETUP -#line 427 "lexer.lxx" -{ - accept(); - return DTREF; -} - YY_BREAK -case 28: -YY_RULE_SETUP -#line 431 "lexer.lxx" -{ - accept(); - return DYNAMICVERTEXPOOL; -} - YY_BREAK -case 29: -YY_RULE_SETUP -#line 435 "lexer.lxx" -{ - accept(); - return EXTERNAL_FILE; -} - YY_BREAK -case 30: -YY_RULE_SETUP -#line 439 "lexer.lxx" -{ - accept(); - return GROUP; -} - YY_BREAK -case 31: -YY_RULE_SETUP -#line 443 "lexer.lxx" -{ - accept(); - return DEFAULTPOSE; -} - YY_BREAK -case 32: -YY_RULE_SETUP -#line 447 "lexer.lxx" -{ - accept(); - return JOINT; -} - YY_BREAK -case 33: -YY_RULE_SETUP -#line 451 "lexer.lxx" -{ - accept(); - return KNOTS; -} - YY_BREAK -case 34: -YY_RULE_SETUP -#line 455 "lexer.lxx" -{ - accept(); - return INCLUDE; -} - YY_BREAK -case 35: -YY_RULE_SETUP -#line 459 "lexer.lxx" -{ - accept(); - return INSTANCE; -} - YY_BREAK -case 36: -YY_RULE_SETUP -#line 463 "lexer.lxx" -{ - accept(); - return LINE; -} - YY_BREAK -case 37: -YY_RULE_SETUP -#line 467 "lexer.lxx" -{ - accept(); - return LOOP; -} - YY_BREAK -case 38: -YY_RULE_SETUP -#line 471 "lexer.lxx" -{ - accept(); - return MATERIAL; -} - YY_BREAK -case 39: -YY_RULE_SETUP -#line 475 "lexer.lxx" -{ - accept(); - return MATRIX3; -} - YY_BREAK -case 40: -YY_RULE_SETUP -#line 479 "lexer.lxx" -{ - accept(); - return MATRIX4; -} - YY_BREAK -case 41: -YY_RULE_SETUP -#line 483 "lexer.lxx" -{ - accept(); - return MODEL; -} - YY_BREAK -case 42: -YY_RULE_SETUP -#line 487 "lexer.lxx" -{ - accept(); - return MREF; -} - YY_BREAK -case 43: -YY_RULE_SETUP -#line 491 "lexer.lxx" -{ - accept(); - return NORMAL; -} - YY_BREAK -case 44: -YY_RULE_SETUP -#line 495 "lexer.lxx" -{ - accept(); - return NURBSCURVE; -} - YY_BREAK -case 45: -YY_RULE_SETUP -#line 499 "lexer.lxx" -{ - accept(); - return NURBSSURFACE; -} - YY_BREAK -case 46: -YY_RULE_SETUP -#line 503 "lexer.lxx" -{ - accept(); - return OBJECTTYPE; -} - YY_BREAK -case 47: -YY_RULE_SETUP -#line 507 "lexer.lxx" -{ - accept(); - return ORDER; -} - YY_BREAK -case 48: -YY_RULE_SETUP -#line 511 "lexer.lxx" -{ - accept(); - return OUTTANGENT; -} - YY_BREAK -case 49: -YY_RULE_SETUP -#line 515 "lexer.lxx" -{ - accept(); - return POINTLIGHT; -} - YY_BREAK -case 50: -YY_RULE_SETUP -#line 519 "lexer.lxx" -{ - accept(); - return POLYGON; -} - YY_BREAK -case 51: -YY_RULE_SETUP -#line 523 "lexer.lxx" -{ - accept(); - return REF; -} - YY_BREAK -case 52: -YY_RULE_SETUP -#line 527 "lexer.lxx" -{ - accept(); - return RGBA; -} - YY_BREAK -case 53: -YY_RULE_SETUP -#line 531 "lexer.lxx" -{ - accept(); - return ROTATE; -} - YY_BREAK -case 54: -YY_RULE_SETUP -#line 535 "lexer.lxx" -{ - accept(); - return ROTX; -} - YY_BREAK -case 55: -YY_RULE_SETUP -#line 539 "lexer.lxx" -{ - accept(); - return ROTY; -} - YY_BREAK -case 56: -YY_RULE_SETUP -#line 543 "lexer.lxx" -{ - accept(); - return ROTZ; -} - YY_BREAK -case 57: -YY_RULE_SETUP -#line 547 "lexer.lxx" -{ - accept(); - return SANIM; -} - YY_BREAK -case 58: -YY_RULE_SETUP -#line 551 "lexer.lxx" -{ - accept(); - return SCALAR; -} - YY_BREAK -case 59: -YY_RULE_SETUP -#line 555 "lexer.lxx" -{ - accept(); - return SCALE; -} - YY_BREAK -case 60: -YY_RULE_SETUP -#line 559 "lexer.lxx" -{ - accept(); - return SEQUENCE; -} - YY_BREAK -case 61: -YY_RULE_SETUP -#line 563 "lexer.lxx" -{ - accept(); - return SHADING; -} - YY_BREAK -case 62: -YY_RULE_SETUP -#line 567 "lexer.lxx" -{ - accept(); - return SWITCH; -} - YY_BREAK -case 63: -YY_RULE_SETUP -#line 571 "lexer.lxx" -{ - accept(); - return SWITCHCONDITION; -} - YY_BREAK -case 64: -YY_RULE_SETUP -#line 575 "lexer.lxx" -{ - accept(); - return TABLE; -} - YY_BREAK -case 65: -YY_RULE_SETUP -#line 579 "lexer.lxx" -{ - accept(); - return TABLE_V; -} - YY_BREAK -case 66: -YY_RULE_SETUP -#line 583 "lexer.lxx" -{ - accept(); - return TAG; -} - YY_BREAK -case 67: -YY_RULE_SETUP -#line 587 "lexer.lxx" -{ - accept(); - return TANGENT; -} - YY_BREAK -case 68: -YY_RULE_SETUP -#line 591 "lexer.lxx" -{ - accept(); - return TEXLIST; -} - YY_BREAK -case 69: -YY_RULE_SETUP -#line 595 "lexer.lxx" -{ - accept(); - return TEXTURE; -} - YY_BREAK -case 70: -YY_RULE_SETUP -#line 599 "lexer.lxx" -{ - accept(); - return TLENGTHS; -} - YY_BREAK -case 71: -YY_RULE_SETUP -#line 603 "lexer.lxx" -{ - accept(); - return TRANSFORM; -} - YY_BREAK -case 72: -YY_RULE_SETUP -#line 607 "lexer.lxx" -{ - accept(); - return TRANSLATE; -} - YY_BREAK -case 73: -YY_RULE_SETUP -#line 611 "lexer.lxx" -{ - accept(); - return TREF; -} - YY_BREAK -case 74: -YY_RULE_SETUP -#line 615 "lexer.lxx" -{ - accept(); - return TRIANGLEFAN; -} - YY_BREAK -case 75: -YY_RULE_SETUP -#line 619 "lexer.lxx" -{ - accept(); - return TRIANGLESTRIP; -} - YY_BREAK -case 76: -YY_RULE_SETUP -#line 623 "lexer.lxx" -{ - accept(); - return TRIM; -} - YY_BREAK -case 77: -YY_RULE_SETUP -#line 627 "lexer.lxx" -{ - accept(); - return TXT; -} - YY_BREAK -case 78: -YY_RULE_SETUP -#line 631 "lexer.lxx" -{ - accept(); - return UKNOTS; -} - YY_BREAK -case 79: -YY_RULE_SETUP -#line 635 "lexer.lxx" -{ - accept(); - return UKNOTS; -} - YY_BREAK -case 80: -YY_RULE_SETUP -#line 639 "lexer.lxx" -{ - accept(); - return UV; -} - YY_BREAK -case 81: -YY_RULE_SETUP -#line 643 "lexer.lxx" -{ - accept(); - return VKNOTS; -} - YY_BREAK -case 82: -YY_RULE_SETUP -#line 647 "lexer.lxx" -{ - accept(); - return VKNOTS; -} - YY_BREAK -case 83: -YY_RULE_SETUP -#line 651 "lexer.lxx" -{ - accept(); - return VERTEX; -} - YY_BREAK -case 84: -YY_RULE_SETUP -#line 655 "lexer.lxx" -{ - accept(); - return VERTEXANIM; -} - YY_BREAK -case 85: -YY_RULE_SETUP -#line 659 "lexer.lxx" -{ - accept(); - return VERTEXPOOL; -} - YY_BREAK -case 86: -YY_RULE_SETUP -#line 663 "lexer.lxx" -{ - accept(); - return VERTEXREF; -} - YY_BREAK -case 87: -YY_RULE_SETUP -#line 667 "lexer.lxx" -{ - accept(); - return XFMANIM; -} - YY_BREAK -case 88: -YY_RULE_SETUP -#line 671 "lexer.lxx" -{ - accept(); - return XFMSANIM; -} - YY_BREAK -case 89: -YY_RULE_SETUP -#line 678 "lexer.lxx" -{ - // An integer or floating-point number. - accept(); - eggyylval._number = patof(eggyytext); - eggyylval._string = eggyytext; - return EGG_NUMBER; -} - YY_BREAK -case 90: -YY_RULE_SETUP -#line 686 "lexer.lxx" -{ - // A hexadecimal integer number. - accept(); - eggyylval._ulong = strtoul(eggyytext+2, NULL, 16); - eggyylval._string = eggyytext; - return EGG_ULONG; -} - YY_BREAK -case 91: -YY_RULE_SETUP -#line 694 "lexer.lxx" -{ - // A binary integer number. - accept(); - eggyylval._ulong = strtoul(eggyytext+2, NULL, 2); - eggyylval._string = eggyytext; - return EGG_ULONG; -} - YY_BREAK -case 92: -YY_RULE_SETUP -#line 702 "lexer.lxx" -{ - // not-a-number. These sometimes show up in egg files accidentally. - accept(); - memset(&eggyylval._number, 0, sizeof(eggyylval._number)); - *(unsigned long *)&eggyylval._number = strtoul(eggyytext+3, NULL, 0); - eggyylval._string = eggyytext; - return EGG_NUMBER; -} - YY_BREAK -case 93: -YY_RULE_SETUP -#line 711 "lexer.lxx" -{ - // infinity. As above. - accept(); - eggyylval._number = HUGE_VAL; - eggyylval._string = eggyytext; - return EGG_NUMBER; -} - YY_BREAK -case 94: -YY_RULE_SETUP -#line 719 "lexer.lxx" -{ - // minus infinity. As above. - accept(); - eggyylval._number = -HUGE_VAL; - eggyylval._string = eggyytext; - return EGG_NUMBER; -} - YY_BREAK -case 95: -YY_RULE_SETUP -#line 727 "lexer.lxx" -{ - // infinity, on Win32. As above. - accept(); - eggyylval._number = HUGE_VAL; - eggyylval._string = eggyytext; - return EGG_NUMBER; -} - YY_BREAK -case 96: -YY_RULE_SETUP -#line 735 "lexer.lxx" -{ - // minus infinity, on Win32. As above. - accept(); - eggyylval._number = -HUGE_VAL; - eggyylval._string = eggyytext; - return EGG_NUMBER; -} - YY_BREAK -case 97: -YY_RULE_SETUP -#line 744 "lexer.lxx" -{ - // Quoted string. - accept(); - eggyylval._string = scan_quoted_string(); - return EGG_STRING; -} - YY_BREAK -case 98: -YY_RULE_SETUP -#line 751 "lexer.lxx" -{ - // Unquoted string. - accept(); - eggyylval._string = eggyytext; - return EGG_STRING; -} - YY_BREAK -case 99: -YY_RULE_SETUP -#line 757 "lexer.lxx" -ECHO; - YY_BREAK -#line 2335 "lex.yy.c" -case YY_STATE_EOF(INITIAL): - yyterminate(); - - case YY_END_OF_BUFFER: - { - /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = (yy_hold_char); - YY_RESTORE_YY_MORE_OFFSET - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed eggyyin at a new source and called - * eggyylex(). If so, then we have to assure - * consistency between YY_CURRENT_BUFFER and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - YY_CURRENT_BUFFER_LVALUE->yy_input_file = eggyyin; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; - } - - /* Note that here we test for yy_c_buf_p "<=" to the position - * of the first EOB in the buffer, since yy_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) - { /* This was really a NUL. */ - yy_state_type yy_next_state; - - (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( ); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * yy_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - yy_next_state = yy_try_NUL_trans( yy_current_state ); - - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - - if ( yy_next_state ) - { - /* Consume the NUL. */ - yy_cp = ++(yy_c_buf_p); - yy_current_state = yy_next_state; - goto yy_match; - } - - else - { - yy_cp = (yy_c_buf_p); - goto yy_find_action; - } - } - - else switch ( yy_get_next_buffer( ) ) - { - case EOB_ACT_END_OF_FILE: - { - (yy_did_buffer_switch_on_eof) = 0; - - if ( eggyywrap( ) ) - { - /* Note: because we've taken care in - * yy_get_next_buffer() to have set up - * eggyytext, we can now set up - * yy_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; - - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! (yy_did_buffer_switch_on_eof) ) - YY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - (yy_c_buf_p) = - (yytext_ptr) + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( ); - - yy_cp = (yy_c_buf_p); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - goto yy_match; - - case EOB_ACT_LAST_MATCH: - (yy_c_buf_p) = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; - - yy_current_state = yy_get_previous_state( ); - - yy_cp = (yy_c_buf_p); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - goto yy_find_action; - } - break; - } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ -} /* end of eggyylex */ - -/* yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ -static int yy_get_next_buffer (void) -{ - register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - register char *source = (yytext_ptr); - register int number_to_move, i; - int ret_val; - - if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) - { - /* We matched a single character, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } - } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; - - else - { - int num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER; - - int yy_c_buf_p_offset = - (int) ((yy_c_buf_p) - b->yy_ch_buf); - - if ( b->yy_is_our_buffer ) - { - int new_size = b->yy_buf_size * 2; - - if ( new_size <= 0 ) - b->yy_buf_size += b->yy_buf_size / 8; - else - b->yy_buf_size *= 2; - - b->yy_ch_buf = (char *) - /* Include room in for 2 EOB chars. */ - eggyyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); - } - else - /* Can't grow it, we don't own it. */ - b->yy_ch_buf = 0; - - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( - "fatal error - scanner input buffer overflow" ); - - (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; - - num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - - number_to_move - 1; - - } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - (yy_n_chars), (size_t) num_to_read ); - - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - if ( (yy_n_chars) == 0 ) - { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - eggyyrestart(eggyyin ); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = - YY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { - /* Extend the array by 50%, plus the number we really need. */ - yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) eggyyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); - if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); - } - - (yy_n_chars) += number_to_move; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; - - (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; - - return ret_val; -} - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - - static yy_state_type yy_get_previous_state (void) -{ - register yy_state_type yy_current_state; - register char *yy_cp; - - yy_current_state = (yy_start); - - for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) - { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 577 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - } - - return yy_current_state; -} - -/* yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = yy_try_NUL_trans( current_state ); - */ - static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) -{ - register int yy_is_jam; - register char *yy_cp = (yy_c_buf_p); - - register YY_CHAR yy_c = 1; - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 577 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 576); - - return yy_is_jam ? 0 : yy_current_state; -} - - static void yyunput (int c, register char * yy_bp ) -{ - register char *yy_cp; - - yy_cp = (yy_c_buf_p); - - /* undo effects of setting up eggyytext */ - *yy_cp = (yy_hold_char); - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - { /* need to shift things up to make room */ - /* +2 for EOB chars. */ - register int number_to_move = (yy_n_chars) + 2; - register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ - YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; - register char *source = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; - - while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - *--dest = *--source; - - yy_cp += (int) (dest - source); - yy_bp += (int) (dest - source); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - YY_FATAL_ERROR( "flex scanner push-back overflow" ); - } - - *--yy_cp = (char) c; - - (yytext_ptr) = yy_bp; - (yy_hold_char) = *yy_cp; - (yy_c_buf_p) = yy_cp; -} - -#ifndef YY_NO_INPUT -#ifdef __cplusplus - static int yyinput (void) -#else - static int input (void) -#endif - -{ - int c; - - *(yy_c_buf_p) = (yy_hold_char); - - if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) - { - /* yy_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) - /* This was really a NUL. */ - *(yy_c_buf_p) = '\0'; - - else - { /* need more input */ - int offset = (yy_c_buf_p) - (yytext_ptr); - ++(yy_c_buf_p); - - switch ( yy_get_next_buffer( ) ) - { - case EOB_ACT_LAST_MATCH: - /* This happens because yy_g_n_b() - * sees that we've accumulated a - * token and flags that we need to - * try matching the token before - * proceeding. But for input(), - * there's no matching to consider. - * So convert the EOB_ACT_LAST_MATCH - * to EOB_ACT_END_OF_FILE. - */ - - /* Reset buffer status. */ - eggyyrestart(eggyyin ); - - /*FALLTHROUGH*/ - - case EOB_ACT_END_OF_FILE: - { - if ( eggyywrap( ) ) - return EOF; - - if ( ! (yy_did_buffer_switch_on_eof) ) - YY_NEW_FILE; -#ifdef __cplusplus - return yyinput(); -#else - return input(); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - (yy_c_buf_p) = (yytext_ptr) + offset; - break; - } - } - } - - c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ - *(yy_c_buf_p) = '\0'; /* preserve eggyytext */ - (yy_hold_char) = *++(yy_c_buf_p); - - return c; -} -#endif /* ifndef YY_NO_INPUT */ - -/** Immediately switch to a different input stream. - * @param input_file A readable stream. - * - * @note This function does not reset the start condition to @c INITIAL . - */ - void eggyyrestart (FILE * input_file ) -{ - - if ( ! YY_CURRENT_BUFFER ){ - eggyyensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - eggyy_create_buffer(eggyyin,YY_BUF_SIZE ); - } - - eggyy_init_buffer(YY_CURRENT_BUFFER,input_file ); - eggyy_load_buffer_state( ); -} - -/** Switch to a different input buffer. - * @param new_buffer The new input buffer. - * - */ - void eggyy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) -{ - - /* TODO. We should be able to replace this entire function body - * with - * eggyypop_buffer_state(); - * eggyypush_buffer_state(new_buffer); - */ - eggyyensure_buffer_stack (); - if ( YY_CURRENT_BUFFER == new_buffer ) - return; - - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(yy_c_buf_p) = (yy_hold_char); - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - YY_CURRENT_BUFFER_LVALUE = new_buffer; - eggyy_load_buffer_state( ); - - /* We don't actually know whether we did this switch during - * EOF (eggyywrap()) processing, but the only time this flag - * is looked at is after eggyywrap() is called, so it's safe - * to go ahead and always set it. - */ - (yy_did_buffer_switch_on_eof) = 1; -} - -static void eggyy_load_buffer_state (void) -{ - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; - eggyyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; - (yy_hold_char) = *(yy_c_buf_p); -} - -/** Allocate and initialize an input buffer state. - * @param file A readable stream. - * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. - * - * @return the allocated buffer state. - */ - YY_BUFFER_STATE eggyy_create_buffer (FILE * file, int size ) -{ - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) eggyyalloc(sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in eggyy_create_buffer()" ); - - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->yy_ch_buf = (char *) eggyyalloc(b->yy_buf_size + 2 ); - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in eggyy_create_buffer()" ); - - b->yy_is_our_buffer = 1; - - eggyy_init_buffer(b,file ); - - return b; -} - -/** Destroy the buffer. - * @param b a buffer created with eggyy_create_buffer() - * - */ - void eggyy_delete_buffer (YY_BUFFER_STATE b ) -{ - - if ( ! b ) - return; - - if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ - YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; - - if ( b->yy_is_our_buffer ) - eggyyfree((void *) b->yy_ch_buf ); - - eggyyfree((void *) b ); -} - -#ifndef __cplusplus -extern int isatty (int ); -#endif /* __cplusplus */ - -/* Initializes or reinitializes a buffer. - * This function is sometimes called more than once on the same buffer, - * such as during a eggyyrestart() or at EOF. - */ - static void eggyy_init_buffer (YY_BUFFER_STATE b, FILE * file ) - -{ - int oerrno = errno; - - eggyy_flush_buffer(b ); - - b->yy_input_file = file; - b->yy_fill_buffer = 1; - - /* If b is the current buffer, then eggyy_init_buffer was _probably_ - * called from eggyyrestart() or through yy_get_next_buffer. - * In that case, we don't want to reset the lineno or column. - */ - if (b != YY_CURRENT_BUFFER){ - b->yy_bs_lineno = 1; - b->yy_bs_column = 0; - } - - b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; - - errno = oerrno; -} - -/** Discard all buffered characters. On the next scan, YY_INPUT will be called. - * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. - * - */ - void eggyy_flush_buffer (YY_BUFFER_STATE b ) -{ - if ( ! b ) - return; - - b->yy_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->yy_buf_pos = &b->yy_ch_buf[0]; - - b->yy_at_bol = 1; - b->yy_buffer_status = YY_BUFFER_NEW; - - if ( b == YY_CURRENT_BUFFER ) - eggyy_load_buffer_state( ); -} - -/** Pushes the new state onto the stack. The new state becomes - * the current state. This function will allocate the stack - * if necessary. - * @param new_buffer The new state. - * - */ -void eggyypush_buffer_state (YY_BUFFER_STATE new_buffer ) -{ - if (new_buffer == NULL) - return; - - eggyyensure_buffer_stack(); - - /* This block is copied from eggyy_switch_to_buffer. */ - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(yy_c_buf_p) = (yy_hold_char); - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - /* Only push if top exists. Otherwise, replace top. */ - if (YY_CURRENT_BUFFER) - (yy_buffer_stack_top)++; - YY_CURRENT_BUFFER_LVALUE = new_buffer; - - /* copied from eggyy_switch_to_buffer. */ - eggyy_load_buffer_state( ); - (yy_did_buffer_switch_on_eof) = 1; -} - -/** Removes and deletes the top of the stack, if present. - * The next element becomes the new top. - * - */ -void eggyypop_buffer_state (void) -{ - if (!YY_CURRENT_BUFFER) - return; - - eggyy_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - if ((yy_buffer_stack_top) > 0) - --(yy_buffer_stack_top); - - if (YY_CURRENT_BUFFER) { - eggyy_load_buffer_state( ); - (yy_did_buffer_switch_on_eof) = 1; - } -} - -/* Allocates the stack if it does not exist. - * Guarantees space for at least one push. - */ -static void eggyyensure_buffer_stack (void) -{ - int num_to_alloc; - - if (!(yy_buffer_stack)) { - - /* First allocation is just for 2 elements, since we don't know if this - * scanner will even need a stack. We use 2 instead of 1 to avoid an - * immediate realloc on the next call. - */ - num_to_alloc = 1; - (yy_buffer_stack) = (struct yy_buffer_state**)eggyyalloc - (num_to_alloc * sizeof(struct yy_buffer_state*) - ); - if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in eggyyensure_buffer_stack()" ); - - memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - - (yy_buffer_stack_max) = num_to_alloc; - (yy_buffer_stack_top) = 0; - return; - } - - if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ - - /* Increase the buffer to prepare for a possible push. */ - int grow_size = 8 /* arbitrary grow size */; - - num_to_alloc = (yy_buffer_stack_max) + grow_size; - (yy_buffer_stack) = (struct yy_buffer_state**)eggyyrealloc - ((yy_buffer_stack), - num_to_alloc * sizeof(struct yy_buffer_state*) - ); - if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in eggyyensure_buffer_stack()" ); - - /* zero only the new slots.*/ - memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); - (yy_buffer_stack_max) = num_to_alloc; - } -} - -/** Setup the input buffer state to scan directly from a user-specified character buffer. - * @param base the character buffer - * @param size the size in bytes of the character buffer - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE eggyy_scan_buffer (char * base, yy_size_t size ) -{ - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return 0; - - b = (YY_BUFFER_STATE) eggyyalloc(sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in eggyy_scan_buffer()" ); - - b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ - b->yy_buf_pos = b->yy_ch_buf = base; - b->yy_is_our_buffer = 0; - b->yy_input_file = 0; - b->yy_n_chars = b->yy_buf_size; - b->yy_is_interactive = 0; - b->yy_at_bol = 1; - b->yy_fill_buffer = 0; - b->yy_buffer_status = YY_BUFFER_NEW; - - eggyy_switch_to_buffer(b ); - - return b; -} - -/** Setup the input buffer state to scan a string. The next call to eggyylex() will - * scan from a @e copy of @a str. - * @param yystr a NUL-terminated string to scan - * - * @return the newly allocated buffer state object. - * @note If you want to scan bytes that may contain NUL values, then use - * eggyy_scan_bytes() instead. - */ -YY_BUFFER_STATE eggyy_scan_string (yyconst char * yystr ) -{ - - return eggyy_scan_bytes(yystr,strlen(yystr) ); -} - -/** Setup the input buffer state to scan the given bytes. The next call to eggyylex() will - * scan from a @e copy of @a bytes. - * @param bytes the byte buffer to scan - * @param len the number of bytes in the buffer pointed to by @a bytes. - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE eggyy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) -{ - YY_BUFFER_STATE b; - char *buf; - yy_size_t n; - int i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = _yybytes_len + 2; - buf = (char *) eggyyalloc(n ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in eggyy_scan_bytes()" ); - - for ( i = 0; i < _yybytes_len; ++i ) - buf[i] = yybytes[i]; - - buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - - b = eggyy_scan_buffer(buf,n ); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in eggyy_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->yy_is_our_buffer = 1; - - return b; -} - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -static void yy_fatal_error (yyconst char* msg ) -{ - (void) fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); -} - -/* Redefine yyless() so it works in section 3 code. */ - -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up eggyytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - eggyytext[eggyyleng] = (yy_hold_char); \ - (yy_c_buf_p) = eggyytext + yyless_macro_arg; \ - (yy_hold_char) = *(yy_c_buf_p); \ - *(yy_c_buf_p) = '\0'; \ - eggyyleng = yyless_macro_arg; \ - } \ - while ( 0 ) - -/* Accessor methods (get/set functions) to struct members. */ - -/** Get the current line number. - * - */ -int eggyyget_lineno (void) -{ - - return eggyylineno; -} - -/** Get the input stream. - * - */ -FILE *eggyyget_in (void) -{ - return eggyyin; -} - -/** Get the output stream. - * - */ -FILE *eggyyget_out (void) -{ - return eggyyout; -} - -/** Get the length of the current token. - * - */ -int eggyyget_leng (void) -{ - return eggyyleng; -} - -/** Get the current token. - * - */ - -char *eggyyget_text (void) -{ - return eggyytext; -} - -/** Set the current line number. - * @param line_number - * - */ -void eggyyset_lineno (int line_number ) -{ - - eggyylineno = line_number; -} - -/** Set the input stream. This does not discard the current - * input buffer. - * @param in_str A readable stream. - * - * @see eggyy_switch_to_buffer - */ -void eggyyset_in (FILE * in_str ) -{ - eggyyin = in_str ; -} - -void eggyyset_out (FILE * out_str ) -{ - eggyyout = out_str ; -} - -int eggyyget_debug (void) -{ - return eggyy_flex_debug; -} - -void eggyyset_debug (int bdebug ) -{ - eggyy_flex_debug = bdebug ; -} - -static int yy_init_globals (void) -{ - /* Initialization is the same as for the non-reentrant scanner. - * This function is called from eggyylex_destroy(), so don't allocate here. - */ - - (yy_buffer_stack) = 0; - (yy_buffer_stack_top) = 0; - (yy_buffer_stack_max) = 0; - (yy_c_buf_p) = (char *) 0; - (yy_init) = 0; - (yy_start) = 0; - -/* Defined in main.c */ -#ifdef YY_STDINIT - eggyyin = stdin; - eggyyout = stdout; -#else - eggyyin = (FILE *) 0; - eggyyout = (FILE *) 0; -#endif - - /* For future reference: Set errno on error, since we are called by - * eggyylex_init() - */ - return 0; -} - -/* eggyylex_destroy is for both reentrant and non-reentrant scanners. */ -int eggyylex_destroy (void) -{ - - /* Pop the buffer stack, destroying each element. */ - while(YY_CURRENT_BUFFER){ - eggyy_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - eggyypop_buffer_state(); - } - - /* Destroy the stack itself. */ - eggyyfree((yy_buffer_stack) ); - (yy_buffer_stack) = NULL; - - /* Reset the globals. This is important in a non-reentrant scanner so the next time - * eggyylex() is called, initialization will occur. */ - yy_init_globals( ); - - return 0; -} - -/* - * Internal utility routines. - */ - -#ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) -{ - register int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; -} -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * s ) -{ - register int n; - for ( n = 0; s[n]; ++n ) - ; - - return n; -} -#endif - -void *eggyyalloc (yy_size_t size ) -{ - return (void *) malloc( size ); -} - -void *eggyyrealloc (void * ptr, yy_size_t size ) -{ - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return (void *) realloc( (char *) ptr, size ); -} - -void eggyyfree (void * ptr ) -{ - free( (char *) ptr ); /* see eggyyrealloc() for (char *) cast */ -} - -#define YYTABLES_NAME "yytables" - -#line 757 "lexer.lxx" +#line 2 "lex.yy.c" + +#line 4 "lex.yy.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define yy_create_buffer eggyy_create_buffer +#define yy_delete_buffer eggyy_delete_buffer +#define yy_flex_debug eggyy_flex_debug +#define yy_init_buffer eggyy_init_buffer +#define yy_flush_buffer eggyy_flush_buffer +#define yy_load_buffer_state eggyy_load_buffer_state +#define yy_switch_to_buffer eggyy_switch_to_buffer +#define yyin eggyyin +#define yyleng eggyyleng +#define yylex eggyylex +#define yylineno eggyylineno +#define yyout eggyyout +#define yyrestart eggyyrestart +#define yytext eggyytext +#define yywrap eggyywrap +#define yyalloc eggyyalloc +#define yyrealloc eggyyrealloc +#define yyfree eggyyfree + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 35 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE eggyyrestart(eggyyin ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +extern int eggyyleng; + +extern FILE *eggyyin, *eggyyout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up eggyytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up eggyytext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, (yytext_ptr) ) + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via eggyyrestart()), so that the user can continue scanning by + * just pointing eggyyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when eggyytext is formed. */ +static char yy_hold_char; +static int yy_n_chars; /* number of characters read into yy_ch_buf */ +int eggyyleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = (char *) 0; +static int yy_init = 0; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow eggyywrap()'s to do buffer switches + * instead of setting up a fresh eggyyin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void eggyyrestart (FILE *input_file ); +void eggyy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE eggyy_create_buffer (FILE *file,int size ); +void eggyy_delete_buffer (YY_BUFFER_STATE b ); +void eggyy_flush_buffer (YY_BUFFER_STATE b ); +void eggyypush_buffer_state (YY_BUFFER_STATE new_buffer ); +void eggyypop_buffer_state (void ); + +static void eggyyensure_buffer_stack (void ); +static void eggyy_load_buffer_state (void ); +static void eggyy_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER eggyy_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE eggyy_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE eggyy_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE eggyy_scan_bytes (yyconst char *bytes,int len ); + +void *eggyyalloc (yy_size_t ); +void *eggyyrealloc (void *,yy_size_t ); +void eggyyfree (void * ); + +#define yy_new_buffer eggyy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + eggyyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + eggyy_create_buffer(eggyyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + eggyyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + eggyy_create_buffer(eggyyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +typedef unsigned char YY_CHAR; + +FILE *eggyyin = (FILE *) 0, *eggyyout = (FILE *) 0; + +typedef int yy_state_type; + +extern int eggyylineno; + +int eggyylineno = 1; + +extern char *eggyytext; +#define yytext_ptr eggyytext + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (yyconst char msg[] ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up eggyytext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + eggyyleng = (size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 99 +#define YY_END_OF_BUFFER 100 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[577] = + { 0, + 0, 0, 100, 98, 2, 1, 97, 98, 98, 98, + 98, 89, 89, 89, 98, 98, 98, 5, 98, 1, + 98, 89, 89, 98, 89, 4, 3, 89, 91, 98, + 90, 89, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 89, 98, 3, 3, 91, 98, + 89, 90, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 65, 98, 98, 98, 93, + 98, 98, 94, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 19, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 80, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + + 98, 98, 98, 98, 25, 98, 98, 98, 98, 98, + 23, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 51, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 66, 98, 98, 98, 98, 98, + 98, 98, 98, 77, 98, 98, 98, 98, 98, 98, + 92, 98, 95, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 20, 98, 98, 98, 98, + 98, 24, 98, 29, 98, 98, 98, 98, 98, 36, + 37, 98, 98, 98, 42, 98, 98, 98, 98, 98, + + 98, 98, 52, 98, 54, 55, 56, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 73, + 98, 76, 98, 98, 98, 98, 98, 98, 92, 96, + 98, 98, 8, 98, 98, 98, 13, 98, 98, 98, + 98, 98, 98, 98, 98, 22, 27, 98, 30, 98, + 98, 32, 33, 98, 98, 41, 98, 98, 98, 98, + 47, 98, 98, 98, 98, 98, 98, 59, 98, 98, + 98, 64, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 12, + 14, 98, 98, 98, 98, 98, 98, 98, 98, 98, + + 98, 98, 98, 98, 43, 98, 98, 98, 98, 98, + 98, 53, 57, 58, 98, 98, 62, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 83, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 15, 16, + 98, 98, 98, 98, 21, 98, 34, 98, 98, 39, + 40, 98, 98, 98, 98, 98, 50, 98, 61, 98, + 67, 68, 69, 98, 98, 98, 98, 78, 79, 81, + 98, 98, 98, 82, 98, 98, 98, 98, 11, 98, + 98, 98, 26, 98, 35, 38, 98, 98, 98, 98, + 98, 60, 98, 70, 98, 98, 98, 98, 98, 98, + + 98, 87, 98, 98, 98, 9, 98, 17, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 71, 72, 98, + 98, 98, 98, 86, 98, 98, 98, 98, 98, 98, + 98, 44, 98, 46, 48, 49, 98, 98, 98, 84, + 85, 98, 6, 7, 98, 98, 31, 98, 98, 98, + 74, 98, 88, 98, 98, 98, 45, 98, 98, 98, + 98, 98, 98, 75, 98, 98, 98, 98, 10, 98, + 98, 63, 18, 98, 28, 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 1, 4, 5, 6, 1, 1, 1, 1, + 1, 7, 8, 1, 9, 10, 11, 12, 13, 14, + 15, 16, 14, 14, 14, 14, 14, 1, 1, 17, + 1, 18, 1, 1, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 1, 1, 1, 1, 45, 1, 46, 47, 48, 49, + + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 1, 72, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[73] = + { 0, + 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2 + } ; + +static yyconst flex_int16_t yy_base[582] = + { 0, + 0, 71, 1210, 0, 1211, 0, 1211, 8, 23, 28, + 18, 134, 55, 79, 203, 2, 0, 1211, 0, 0, + 94, 101, 122, 17, 146, 0, 24, 151, 18, 174, + 263, 276, 31, 277, 289, 338, 72, 64, 69, 71, + 80, 146, 261, 284, 300, 108, 312, 352, 376, 293, + 401, 129, 146, 139, 442, 151, 49, 0, 35, 179, + 339, 0, 151, 271, 259, 286, 337, 309, 352, 349, + 383, 1191, 354, 374, 391, 384, 390, 400, 396, 394, + 392, 404, 407, 411, 432, 422, 427, 434, 434, 430, + 448, 449, 437, 438, 447, 455, 440, 452, 457, 463, + + 446, 466, 467, 453, 470, 463, 494, 449, 475, 501, + 465, 478, 1190, 492, 493, 0, 487, 498, 498, 0, + 1195, 504, 0, 500, 502, 508, 515, 507, 505, 517, + 504, 505, 513, 537, 509, 0, 514, 1188, 538, 523, + 537, 554, 552, 1187, 532, 558, 555, 541, 551, 544, + 551, 547, 563, 553, 570, 566, 566, 560, 572, 571, + 573, 559, 567, 568, 1186, 596, 603, 593, 597, 589, + 607, 592, 601, 1185, 607, 605, 602, 604, 613, 620, + 1184, 608, 0, 609, 612, 610, 618, 1195, 611, 628, + 641, 635, 653, 656, 661, 646, 653, 1193, 661, 658, + + 663, 655, 667, 1181, 0, 651, 672, 662, 675, 671, + 0, 1180, 666, 1179, 664, 660, 681, 663, 665, 1178, + 1177, 668, 678, 677, 1176, 695, 682, 702, 694, 714, + 697, 711, 0, 1175, 699, 1174, 1173, 1172, 711, 720, + 717, 715, 723, 722, 0, 724, 721, 710, 726, 715, + 1171, 721, 1170, 0, 721, 722, 723, 735, 726, 742, + 777, 744, 0, 741, 748, 1169, 754, 763, 779, 1168, + 781, 783, 774, 775, 781, 0, 779, 778, 793, 1167, + 1166, 0, 786, 0, 1165, 793, 784, 1164, 1163, 0, + 0, 790, 776, 1147, 0, 789, 801, 782, 1146, 799, + + 811, 815, 0, 827, 0, 0, 0, 820, 816, 1144, + 821, 822, 829, 1137, 824, 820, 823, 822, 837, 0, + 837, 0, 825, 826, 828, 827, 832, 839, 0, 0, + 849, 852, 0, 855, 857, 1132, 0, 1131, 862, 854, + 872, 870, 866, 884, 876, 0, 0, 886, 0, 885, + 888, 0, 0, 891, 40, 0, 1128, 872, 874, 876, + 0, 890, 889, 885, 755, 526, 413, 0, 897, 895, + 903, 0, 885, 887, 903, 901, 895, 911, 909, 909, + 911, 912, 943, 919, 931, 929, 921, 927, 934, 0, + 0, 412, 411, 933, 948, 934, 946, 410, 930, 409, + + 948, 942, 373, 371, 0, 938, 942, 937, 958, 957, + 369, 0, 0, 0, 961, 367, 0, 955, 365, 361, + 330, 956, 964, 964, 980, 322, 316, 300, 0, 978, + 979, 990, 290, 983, 983, 981, 996, 288, 0, 0, + 981, 983, 989, 278, 0, 1000, 0, 277, 275, 0, + 0, 984, 1001, 992, 996, 1005, 0, 189, 0, 1000, + 0, 0, 0, 181, 1002, 1011, 1030, 0, 0, 0, + 1008, 1003, 1014, 0, 1024, 1028, 1016, 1050, 0, 167, + 1034, 1027, 0, 1030, 0, 0, 1047, 1053, 1050, 1037, + 1038, 0, 1055, 0, 159, 138, 1059, 1041, 1049, 1052, + + 137, 0, 1048, 1064, 1064, 0, 1065, 0, 1052, 1067, + 1054, 134, 1074, 124, 122, 115, 1069, 0, 0, 1069, + 1072, 105, 104, 0, 114, 101, 100, 1078, 1068, 79, + 1095, 0, 1097, 0, 0, 0, 1083, 48, 1097, 0, + 0, 46, 0, 0, 1087, 1089, 0, 1085, 44, 1102, + 0, 1096, 0, 1108, 1094, 1099, 0, 1101, 42, 1100, + 1116, 1107, 1109, 0, 40, 1111, 1110, 39, 0, 34, + 1114, 0, 0, 27, 0, 1211, 1171, 0, 1174, 1176, + 1178 + } ; + +static yyconst flex_int16_t yy_def[582] = + { 0, + 577, 577, 576, 578, 576, 579, 576, 578, 578, 578, + 578, 578, 578, 578, 576, 578, 578, 576, 578, 579, + 578, 578, 578, 578, 578, 578, 580, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 580, 581, 578, 578, + 578, 31, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 261, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 0, 576, 576, 576, 576, + 576 + } ; + +static yyconst flex_int16_t yy_nxt[1284] = + { 0, + 19, 5, 6, 7, 576, 576, 576, 8, 9, 10, + 11, 12, 13, 14, 14, 14, 15, 21, 54, 22, + 22, 22, 22, 22, 26, 58, 16, 58, 27, 59, + 59, 17, 21, 53, 22, 23, 22, 22, 22, 25, + 25, 25, 25, 25, 575, 54, 59, 59, 56, 24, + 58, 573, 58, 16, 403, 404, 572, 569, 17, 564, + 53, 557, 64, 553, 32, 551, 22, 22, 22, 22, + 22, 18, 5, 6, 7, 56, 24, 30, 8, 9, + 10, 11, 12, 13, 14, 14, 14, 15, 28, 64, + 22, 22, 22, 22, 22, 58, 547, 16, 83, 84, + + 85, 30, 17, 86, 30, 25, 25, 25, 25, 25, + 28, 87, 22, 22, 22, 22, 22, 544, 543, 542, + 58, 541, 540, 30, 16, 83, 84, 85, 30, 17, + 86, 55, 536, 22, 22, 22, 22, 22, 87, 535, + 98, 534, 18, 28, 30, 22, 22, 22, 22, 22, + 30, 532, 119, 29, 524, 519, 30, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 98, 30, 120, + 121, 30, 88, 30, 123, 31, 518, 124, 89, 119, + 29, 60, 60, 30, 508, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 30, 120, 121, 494, 88, + + 30, 123, 31, 19, 124, 89, 492, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 33, 34, 35, 36, 19, 37, 38, 19, 39, + 40, 41, 42, 43, 44, 45, 46, 19, 47, 48, + 49, 50, 51, 19, 52, 19, 19, 19, 33, 34, + 35, 36, 19, 37, 38, 19, 39, 40, 41, 42, + 43, 44, 45, 46, 19, 47, 48, 49, 50, 51, + 19, 52, 19, 19, 62, 62, 62, 62, 62, 90, + 63, 62, 62, 62, 62, 62, 62, 25, 25, 25, + 25, 25, 486, 91, 485, 483, 92, 125, 30, 65, + + 66, 112, 126, 67, 127, 479, 90, 474, 62, 62, + 62, 62, 62, 62, 69, 68, 93, 470, 70, 95, + 91, 71, 94, 92, 125, 30, 65, 66, 72, 126, + 67, 127, 113, 469, 99, 96, 100, 114, 97, 468, + 130, 69, 68, 93, 101, 70, 95, 463, 71, 94, + 61, 61, 61, 61, 61, 72, 73, 102, 74, 113, + 75, 99, 96, 100, 76, 97, 128, 130, 129, 77, + 131, 101, 103, 78, 104, 79, 80, 105, 462, 81, + 82, 132, 461, 73, 459, 74, 457, 75, 451, 137, + 450, 76, 106, 128, 107, 129, 77, 131, 108, 103, + + 78, 104, 79, 80, 105, 109, 81, 82, 132, 115, + 138, 110, 133, 134, 139, 135, 137, 111, 116, 106, + 140, 107, 141, 117, 142, 108, 447, 445, 440, 439, + 414, 143, 109, 144, 145, 146, 147, 138, 110, 133, + 134, 139, 135, 148, 111, 118, 122, 140, 151, 141, + 117, 142, 149, 25, 25, 25, 25, 25, 143, 152, + 144, 145, 146, 147, 30, 153, 154, 155, 150, 156, + 148, 157, 158, 159, 160, 151, 161, 162, 163, 149, + 165, 164, 166, 167, 168, 169, 152, 170, 171, 172, + 176, 30, 153, 154, 155, 150, 156, 177, 157, 158, + + 159, 160, 181, 161, 162, 163, 182, 165, 164, 166, + 167, 168, 169, 173, 170, 171, 172, 176, 174, 178, + 184, 185, 186, 179, 177, 175, 187, 180, 188, 181, + 190, 191, 192, 182, 193, 194, 195, 196, 197, 198, + 173, 199, 200, 413, 203, 174, 178, 184, 185, 186, + 179, 204, 175, 187, 180, 188, 206, 190, 191, 192, + 207, 193, 194, 195, 196, 197, 198, 201, 199, 200, + 202, 203, 208, 209, 210, 212, 213, 214, 204, 215, + 216, 217, 218, 206, 219, 220, 221, 207, 224, 225, + 226, 227, 222, 228, 201, 229, 230, 202, 231, 208, + + 209, 210, 212, 213, 214, 223, 215, 216, 217, 218, + 232, 219, 220, 221, 234, 224, 225, 226, 227, 222, + 228, 235, 229, 230, 239, 231, 240, 241, 242, 243, + 244, 246, 223, 249, 247, 250, 251, 232, 252, 255, + 256, 234, 248, 257, 236, 237, 238, 258, 235, 259, + 253, 239, 261, 240, 241, 242, 243, 244, 246, 262, + 249, 247, 250, 251, 263, 252, 255, 256, 264, 248, + 257, 236, 237, 238, 258, 265, 259, 253, 266, 261, + 267, 268, 269, 271, 272, 273, 262, 274, 275, 277, + 278, 263, 279, 280, 281, 264, 283, 285, 286, 287, + + 288, 289, 265, 292, 293, 266, 294, 267, 268, 269, + 271, 272, 273, 296, 274, 275, 277, 278, 297, 279, + 280, 281, 298, 283, 285, 286, 287, 288, 289, 299, + 292, 293, 300, 294, 301, 302, 304, 308, 309, 311, + 296, 312, 310, 313, 314, 297, 315, 316, 317, 298, + 318, 319, 321, 323, 324, 325, 299, 326, 327, 300, + 328, 301, 302, 304, 308, 309, 311, 330, 312, 310, + 313, 314, 412, 315, 316, 317, 331, 318, 319, 321, + 323, 324, 325, 332, 326, 327, 334, 328, 329, 329, + 329, 329, 329, 335, 330, 329, 329, 329, 329, 329, + + 329, 336, 338, 331, 339, 340, 341, 342, 343, 344, + 332, 345, 348, 334, 350, 351, 354, 355, 357, 360, + 335, 358, 329, 329, 329, 329, 329, 329, 336, 338, + 362, 339, 340, 341, 342, 343, 344, 359, 345, 348, + 363, 350, 351, 354, 355, 357, 360, 364, 358, 365, + 366, 367, 369, 370, 371, 373, 374, 362, 375, 376, + 377, 379, 380, 381, 359, 382, 378, 363, 383, 384, + 385, 386, 387, 388, 364, 389, 365, 366, 367, 369, + 370, 371, 373, 374, 392, 375, 376, 377, 379, 380, + 381, 393, 382, 378, 394, 383, 384, 385, 386, 387, + + 388, 395, 389, 396, 397, 398, 399, 400, 401, 402, + 406, 392, 407, 408, 409, 410, 411, 415, 393, 416, + 417, 394, 419, 418, 420, 421, 422, 423, 395, 424, + 396, 397, 398, 399, 400, 401, 402, 406, 425, 407, + 408, 409, 410, 411, 415, 426, 416, 427, 428, 419, + 418, 420, 421, 422, 423, 433, 424, 434, 435, 436, + 429, 430, 437, 438, 441, 425, 442, 443, 444, 446, + 448, 449, 426, 452, 427, 428, 431, 453, 432, 454, + 455, 456, 433, 458, 434, 435, 436, 460, 430, 437, + 438, 441, 464, 442, 443, 444, 446, 448, 449, 465, + + 452, 466, 467, 431, 453, 432, 454, 455, 456, 471, + 458, 472, 473, 475, 460, 476, 477, 478, 480, 464, + 481, 482, 484, 487, 488, 489, 465, 490, 466, 467, + 491, 493, 495, 496, 499, 500, 471, 501, 472, 473, + 475, 502, 476, 477, 478, 480, 504, 481, 482, 484, + 487, 488, 489, 497, 490, 505, 509, 491, 493, 495, + 496, 499, 500, 510, 501, 511, 498, 506, 503, 512, + 507, 513, 514, 504, 515, 516, 517, 520, 521, 522, + 497, 523, 505, 509, 525, 526, 527, 528, 529, 530, + 510, 531, 511, 498, 533, 537, 512, 507, 513, 514, + + 538, 515, 516, 517, 520, 521, 522, 539, 523, 545, + 546, 525, 526, 527, 528, 529, 530, 548, 531, 549, + 550, 533, 537, 552, 554, 555, 556, 538, 558, 559, + 560, 561, 562, 563, 539, 565, 545, 546, 566, 567, + 568, 570, 571, 574, 548, 405, 549, 550, 391, 390, + 552, 554, 555, 556, 372, 558, 559, 560, 561, 562, + 563, 368, 565, 361, 356, 566, 567, 568, 570, 571, + 574, 4, 4, 4, 20, 20, 57, 57, 58, 58, + 353, 352, 349, 347, 346, 337, 333, 322, 320, 307, + 306, 305, 303, 295, 291, 290, 284, 282, 276, 270, + + 260, 254, 245, 233, 211, 205, 189, 183, 136, 576, + 3, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576 + } ; + +static yyconst flex_int16_t yy_chk[1284] = + { 0, + 578, 1, 1, 1, 0, 0, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 8, 17, 8, + 8, 8, 8, 8, 11, 27, 1, 27, 11, 29, + 29, 1, 9, 16, 9, 9, 9, 9, 9, 10, + 10, 10, 10, 10, 574, 17, 59, 59, 24, 9, + 57, 570, 57, 1, 355, 355, 568, 565, 1, 559, + 16, 549, 33, 542, 13, 538, 13, 13, 13, 13, + 13, 1, 2, 2, 2, 24, 9, 13, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 14, 33, + 14, 14, 14, 14, 14, 27, 530, 2, 37, 38, + + 39, 14, 2, 40, 13, 21, 21, 21, 21, 21, + 22, 41, 22, 22, 22, 22, 22, 527, 526, 525, + 57, 523, 522, 22, 2, 37, 38, 39, 14, 2, + 40, 23, 516, 23, 23, 23, 23, 23, 41, 515, + 46, 514, 2, 12, 23, 12, 12, 12, 12, 12, + 22, 512, 52, 12, 501, 496, 12, 25, 25, 25, + 25, 25, 28, 28, 28, 28, 28, 46, 25, 53, + 54, 23, 42, 28, 56, 12, 495, 63, 42, 52, + 12, 30, 30, 12, 480, 30, 30, 30, 30, 30, + 60, 60, 60, 60, 60, 25, 53, 54, 464, 42, + + 28, 56, 12, 15, 63, 42, 458, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 31, 31, 31, 31, 31, 43, + 32, 31, 31, 31, 31, 31, 31, 32, 32, 32, + 32, 32, 449, 43, 448, 444, 43, 64, 32, 34, + + 34, 50, 65, 34, 66, 438, 43, 433, 31, 31, + 31, 31, 31, 31, 35, 34, 44, 428, 35, 45, + 43, 35, 44, 43, 64, 32, 34, 34, 35, 65, + 34, 66, 50, 427, 47, 45, 47, 50, 45, 426, + 68, 35, 34, 44, 47, 35, 45, 421, 35, 44, + 61, 61, 61, 61, 61, 35, 36, 48, 36, 50, + 36, 47, 45, 47, 36, 45, 67, 68, 67, 36, + 69, 47, 48, 36, 48, 36, 36, 48, 420, 36, + 36, 70, 419, 36, 416, 36, 411, 36, 404, 73, + 403, 36, 48, 67, 49, 67, 36, 69, 49, 48, + + 36, 48, 36, 36, 48, 49, 36, 36, 70, 51, + 74, 49, 71, 71, 75, 71, 73, 49, 51, 48, + 76, 49, 77, 51, 78, 49, 400, 398, 393, 392, + 367, 79, 49, 80, 81, 82, 83, 74, 49, 71, + 71, 75, 71, 84, 49, 51, 55, 76, 86, 77, + 51, 78, 85, 55, 55, 55, 55, 55, 79, 87, + 80, 81, 82, 83, 55, 88, 89, 90, 85, 91, + 84, 92, 93, 94, 95, 86, 96, 97, 98, 85, + 99, 98, 100, 101, 102, 103, 87, 104, 105, 106, + 108, 55, 88, 89, 90, 85, 91, 109, 92, 93, + + 94, 95, 111, 96, 97, 98, 112, 99, 98, 100, + 101, 102, 103, 107, 104, 105, 106, 108, 107, 110, + 114, 115, 117, 110, 109, 107, 118, 110, 119, 111, + 122, 124, 125, 112, 126, 127, 128, 129, 130, 131, + 107, 132, 133, 366, 135, 107, 110, 114, 115, 117, + 110, 137, 107, 118, 110, 119, 139, 122, 124, 125, + 140, 126, 127, 128, 129, 130, 131, 134, 132, 133, + 134, 135, 141, 142, 143, 145, 146, 147, 137, 148, + 149, 150, 151, 139, 152, 153, 154, 140, 156, 157, + 158, 159, 155, 160, 134, 161, 162, 134, 163, 141, + + 142, 143, 145, 146, 147, 155, 148, 149, 150, 151, + 164, 152, 153, 154, 166, 156, 157, 158, 159, 155, + 160, 167, 161, 162, 168, 163, 169, 170, 171, 172, + 173, 175, 155, 177, 176, 178, 179, 164, 180, 182, + 184, 166, 176, 185, 167, 167, 167, 186, 167, 187, + 180, 168, 189, 169, 170, 171, 172, 173, 175, 190, + 177, 176, 178, 179, 191, 180, 182, 184, 192, 176, + 185, 167, 167, 167, 186, 193, 187, 180, 194, 189, + 195, 196, 197, 199, 200, 201, 190, 202, 203, 206, + 207, 191, 208, 209, 210, 192, 213, 215, 216, 217, + + 218, 219, 193, 222, 223, 194, 224, 195, 196, 197, + 199, 200, 201, 226, 202, 203, 206, 207, 227, 208, + 209, 210, 228, 213, 215, 216, 217, 218, 219, 229, + 222, 223, 230, 224, 231, 232, 235, 239, 240, 241, + 226, 242, 240, 243, 244, 227, 246, 247, 248, 228, + 249, 250, 252, 255, 256, 257, 229, 258, 259, 230, + 260, 231, 232, 235, 239, 240, 241, 262, 242, 240, + 243, 244, 365, 246, 247, 248, 264, 249, 250, 252, + 255, 256, 257, 265, 258, 259, 267, 260, 261, 261, + 261, 261, 261, 268, 262, 261, 261, 261, 261, 261, + + 261, 269, 271, 264, 272, 273, 274, 275, 277, 278, + 265, 279, 283, 267, 286, 287, 292, 293, 296, 298, + 268, 297, 261, 261, 261, 261, 261, 261, 269, 271, + 300, 272, 273, 274, 275, 277, 278, 297, 279, 283, + 301, 286, 287, 292, 293, 296, 298, 302, 297, 304, + 308, 309, 311, 312, 313, 315, 316, 300, 317, 318, + 319, 321, 323, 324, 297, 325, 319, 301, 326, 327, + 328, 331, 332, 334, 302, 335, 304, 308, 309, 311, + 312, 313, 315, 316, 339, 317, 318, 319, 321, 323, + 324, 340, 325, 319, 341, 326, 327, 328, 331, 332, + + 334, 342, 335, 343, 344, 345, 348, 350, 351, 354, + 358, 339, 359, 360, 362, 363, 364, 369, 340, 370, + 371, 341, 373, 371, 374, 375, 376, 377, 342, 378, + 343, 344, 345, 348, 350, 351, 354, 358, 379, 359, + 360, 362, 363, 364, 369, 380, 370, 381, 382, 373, + 371, 374, 375, 376, 377, 384, 378, 385, 386, 387, + 383, 383, 388, 389, 394, 379, 395, 396, 397, 399, + 401, 402, 380, 406, 381, 382, 383, 407, 383, 408, + 409, 410, 384, 415, 385, 386, 387, 418, 383, 388, + 389, 394, 422, 395, 396, 397, 399, 401, 402, 423, + + 406, 424, 425, 383, 407, 383, 408, 409, 410, 430, + 415, 431, 432, 434, 418, 435, 436, 437, 441, 422, + 442, 443, 446, 452, 453, 454, 423, 455, 424, 425, + 456, 460, 465, 466, 471, 472, 430, 473, 431, 432, + 434, 475, 435, 436, 437, 441, 476, 442, 443, 446, + 452, 453, 454, 467, 455, 477, 481, 456, 460, 465, + 466, 471, 472, 482, 473, 484, 467, 478, 475, 487, + 478, 488, 489, 476, 490, 491, 493, 497, 498, 499, + 467, 500, 477, 481, 503, 504, 505, 507, 509, 510, + 482, 511, 484, 467, 513, 517, 487, 478, 488, 489, + + 520, 490, 491, 493, 497, 498, 499, 521, 500, 528, + 529, 503, 504, 505, 507, 509, 510, 531, 511, 533, + 537, 513, 517, 539, 545, 546, 548, 520, 550, 552, + 554, 555, 556, 558, 521, 560, 528, 529, 561, 562, + 563, 566, 567, 571, 531, 357, 533, 537, 338, 336, + 539, 545, 546, 548, 314, 550, 552, 554, 555, 556, + 558, 310, 560, 299, 294, 561, 562, 563, 566, 567, + 571, 577, 577, 577, 579, 579, 580, 580, 581, 581, + 289, 288, 285, 281, 280, 270, 266, 253, 251, 238, + 237, 236, 234, 225, 221, 220, 214, 212, 204, 198, + + 188, 181, 174, 165, 144, 138, 121, 113, 72, 3, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576 + } ; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int eggyy_flex_debug; +int eggyy_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *eggyytext; +#line 1 "lexer.lxx" +/* +// Filename: lexer.l +// Created by: drose (16Jan99) +// +//////////////////////////////////////////////////////////////////// +*/ +#line 9 "lexer.lxx" +#include "pandabase.h" +#include "lexerDefs.h" +#include "parserDefs.h" +#include "config_egg.h" +#include "parser.h" +#include "indent.h" +#include "pnotify.h" +#include "lightMutex.h" +#include "thread.h" +#include "pstrtod.h" + +#include + +extern "C" int eggyywrap(void); // declared below. + +static int yyinput(void); // declared by flex. + + +//////////////////////////////////////////////////////////////////// +// Static variables +//////////////////////////////////////////////////////////////////// + +// This mutex protects all of these global variables. +LightMutex egg_lock; + +// We'll increment line_number and col_number as we parse the file, so +// that we can report the position of an error. +static int line_number = 0; +static int col_number = 0; + +// current_line holds as much of the current line as will fit. Its +// only purpose is for printing it out to report an error to the user. +static const int max_error_width = 1024; +static char current_line[max_error_width + 1]; + +static int error_count = 0; +static int warning_count = 0; + +// This is the pointer to the current input stream. +static istream *input_p = NULL; + +// This is the name of the egg file we're parsing. We keep it so we +// can print it out for error messages. +static string egg_filename; + +// This is the initial token state returned by the lexer. It allows +// the yacc grammar to start from initial points. +static int initial_token; + +//////////////////////////////////////////////////////////////////// +// Defining the interface to the lexer. +//////////////////////////////////////////////////////////////////// + +void +egg_init_lexer(istream &in, const string &filename) { + input_p = ∈ + egg_filename = filename; + line_number = 0; + col_number = 0; + error_count = 0; + warning_count = 0; + initial_token = START_EGG; +} + +void +egg_start_group_body() { + /* Set the initial state to begin within a group_body context, + instead of at the beginning of the egg file. */ + initial_token = START_GROUP_BODY; +} + +void +egg_start_texture_body() { + initial_token = START_TEXTURE_BODY; +} + +void +egg_start_primitive_body() { + initial_token = START_PRIMITIVE_BODY; +} + +int +egg_error_count() { + return error_count; +} + +int +egg_warning_count() { + return warning_count; +} + + +//////////////////////////////////////////////////////////////////// +// Internal support functions. +//////////////////////////////////////////////////////////////////// + +int +eggyywrap(void) { + return 1; +} + +void +eggyyerror(const string &msg) { + if (egg_cat.is_error()) { + ostream &out = egg_cat.error(false); + + out << "\nError"; + if (!egg_filename.empty()) { + out << " in " << egg_filename; + } + out + << " at line " << line_number << ", column " << col_number << ":\n" + << setiosflags(Notify::get_literal_flag()) + << current_line << "\n"; + indent(out, col_number-1) + << "^\n" << msg << "\n\n" + << resetiosflags(Notify::get_literal_flag()) << flush; + } + error_count++; +} + +void +eggyyerror(ostringstream &strm) { + string s = strm.str(); + eggyyerror(s); +} + +void +eggyywarning(const string &msg) { + if (egg_cat.is_warning()) { + ostream &out = egg_cat.warning(false); + + out << "\nWarning"; + if (!egg_filename.empty()) { + out << " in " << egg_filename; + } + out + << " at line " << line_number << ", column " << col_number << ":\n" + << setiosflags(Notify::get_literal_flag()) + << current_line << "\n"; + indent(out, col_number-1) + << "^\n" << msg << "\n\n" + << resetiosflags(Notify::get_literal_flag()) << flush; + } + warning_count++; +} + +void +eggyywarning(ostringstream &strm) { + string s = strm.str(); + eggyywarning(s); +} + +// Now define a function to take input from an istream instead of a +// stdio FILE pointer. This is flex-specific. +static void +input_chars(char *buffer, int &result, int max_size) { + nassertv(input_p != NULL); + if (*input_p) { + input_p->read(buffer, max_size); + result = input_p->gcount(); + + if (line_number == 0) { + // This is a special case. If we are reading the very first bit + // from the stream, copy it into the current_line array. This + // is because the \n.* rule below, which fills current_line + // normally, doesn't catch the first line. + int length = min(max_error_width, result); + strncpy(current_line, buffer, length); + current_line[length] = '\0'; + line_number++; + col_number = 0; + + // Truncate it at the newline. + char *end = strchr(current_line, '\n'); + if (end != NULL) { + *end = '\0'; + } + } + + } else { + // End of file or I/O error. + result = 0; + } + Thread::consider_yield(); +} +#undef YY_INPUT + +// Define this macro carefully, since different flex versions call it +// with a different type for result. +#define YY_INPUT(buffer, result, max_size) { \ + int int_result; \ + input_chars((buffer), int_result, (max_size)); \ + (result) = int_result; \ +} + +// read_char reads and returns a single character, incrementing the +// supplied line and column numbers as appropriate. A convenience +// function for the scanning functions below. +static int +read_char(int &line, int &col) { + int c = yyinput(); + if (c == '\n') { + line++; + col = 0; + } else { + col++; + } + return c; +} + +// scan_quoted_string reads a string delimited by quotation marks and +// returns it. +static string +scan_quoted_string() { + string result; + + // We don't touch the current line number and column number during + // scanning, so that if we detect an error while scanning the string + // (e.g. an unterminated string), we'll report the error as + // occurring at the start of the string, not at the end--somewhat + // more convenient for the user. + + // Instead of adjusting the global line_number and col_number + // variables, we'll operate on our own local variables for the + // interim. + int line = line_number; + int col = col_number; + + int c; + c = read_char(line, col); + while (c != '"' && c != EOF) { + result += c; + c = read_char(line, col); + } + + if (c == EOF) { + eggyyerror("This quotation mark is unterminated."); + } + + line_number = line; + col_number = col; + + return result; +} + +// eat_c_comment scans past all characters up until the first */ +// encountered. +static void +eat_c_comment() { + // As above, we'll operate on our own local copies of line_number + // and col_number within this function. + + int line = line_number; + int col = col_number; + + int c, last_c; + + last_c = '\0'; + c = read_char(line, col); + while (c != EOF && !(last_c == '*' && c == '/')) { + if (last_c == '/' && c == '*') { + ostringstream errmsg; + errmsg << "This comment contains a nested /* symbol at line " + << line << ", column " << col-1 << "--possibly unclosed?" + << ends; + eggyywarning(errmsg); + } + last_c = c; + c = read_char(line, col); + } + + if (c == EOF) { + eggyyerror("This comment marker is unclosed."); + } + + line_number = line; + col_number = col; +} + + +// accept() is called below as each piece is pulled off and +// accepted by the lexer; it increments the current column number. +INLINE void accept() { + col_number += eggyyleng; +} + +#line 1236 "lex.yy.c" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int eggyylex_destroy (void ); + +int eggyyget_debug (void ); + +void eggyyset_debug (int debug_flag ); + +YY_EXTRA_TYPE eggyyget_extra (void ); + +void eggyyset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *eggyyget_in (void ); + +void eggyyset_in (FILE * in_str ); + +FILE *eggyyget_out (void ); + +void eggyyset_out (FILE * out_str ); + +int eggyyget_leng (void ); + +char *eggyyget_text (void ); + +int eggyyget_lineno (void ); + +void eggyyset_lineno (int line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int eggyywrap (void ); +#else +extern int eggyywrap (void ); +#endif +#endif + + static void yyunput (int c,char *buf_ptr ); + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO fwrite( eggyytext, eggyyleng, 1, eggyyout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + int n; \ + for ( n = 0; n < max_size && \ + (c = getc( eggyyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( eggyyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, eggyyin))==0 && ferror(eggyyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(eggyyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int eggyylex (void); + +#define YY_DECL int eggyylex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after eggyytext and eggyyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + +#line 302 "lexer.lxx" + + + + if (initial_token != 0) { + int t = initial_token; + initial_token = 0; + return t; + } + + +#line 1429 "lex.yy.c" + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! eggyyin ) + eggyyin = stdin; + + if ( ! eggyyout ) + eggyyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + eggyyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + eggyy_create_buffer(eggyyin,YY_BUF_SIZE ); + } + + eggyy_load_buffer_state( ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of eggyytext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 577 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 1211 ); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +/* rule 1 can match eol */ +YY_RULE_SETUP +#line 312 "lexer.lxx" +{ + // New line. Save a copy of the line so we can print it out for the + // benefit of the user in case we get an error. + + strncpy(current_line, eggyytext+1, max_error_width); + current_line[max_error_width] = '\0'; + line_number++; + col_number=0; + + // Return the whole line to the lexer, except the newline character, + // which we eat. + yyless(1); +} + YY_BREAK +case 2: +YY_RULE_SETUP +#line 326 "lexer.lxx" +{ + // Eat whitespace. + accept(); +} + YY_BREAK +case 3: +YY_RULE_SETUP +#line 331 "lexer.lxx" +{ + // Eat C++-style comments. + accept(); +} + YY_BREAK +case 4: +YY_RULE_SETUP +#line 336 "lexer.lxx" +{ + // Eat C-style comments. + accept(); + eat_c_comment(); +} + YY_BREAK +case 5: +YY_RULE_SETUP +#line 342 "lexer.lxx" +{ + // Send curly braces as themselves. + accept(); + return eggyytext[0]; +} + YY_BREAK +case 6: +YY_RULE_SETUP +#line 350 "lexer.lxx" +{ + accept(); + return ANIMPRELOAD; +} + YY_BREAK +case 7: +YY_RULE_SETUP +#line 354 "lexer.lxx" +{ + accept(); + return BEZIERCURVE; +} + YY_BREAK +case 8: +YY_RULE_SETUP +#line 358 "lexer.lxx" +{ + accept(); + return BFACE; +} + YY_BREAK +case 9: +YY_RULE_SETUP +#line 362 "lexer.lxx" +{ + accept(); + return BILLBOARD; +} + YY_BREAK +case 10: +YY_RULE_SETUP +#line 366 "lexer.lxx" +{ + accept(); + return BILLBOARDCENTER; +} + YY_BREAK +case 11: +YY_RULE_SETUP +#line 370 "lexer.lxx" +{ + accept(); + return BINORMAL; +} + YY_BREAK +case 12: +YY_RULE_SETUP +#line 374 "lexer.lxx" +{ + accept(); + return BUNDLE; +} + YY_BREAK +case 13: +YY_RULE_SETUP +#line 378 "lexer.lxx" +{ + accept(); + return SCALAR; +} + YY_BREAK +case 14: +YY_RULE_SETUP +#line 382 "lexer.lxx" +{ + accept(); + return CLOSED; +} + YY_BREAK +case 15: +YY_RULE_SETUP +#line 386 "lexer.lxx" +{ + accept(); + return COLLIDE; +} + YY_BREAK +case 16: +YY_RULE_SETUP +#line 390 "lexer.lxx" +{ + accept(); + return COMMENT; +} + YY_BREAK +case 17: +YY_RULE_SETUP +#line 394 "lexer.lxx" +{ + accept(); + return COMPONENT; +} + YY_BREAK +case 18: +YY_RULE_SETUP +#line 398 "lexer.lxx" +{ + accept(); + return COORDSYSTEM; +} + YY_BREAK +case 19: +YY_RULE_SETUP +#line 402 "lexer.lxx" +{ + accept(); + return CV; +} + YY_BREAK +case 20: +YY_RULE_SETUP +#line 406 "lexer.lxx" +{ + accept(); + return DART; +} + YY_BREAK +case 21: +YY_RULE_SETUP +#line 410 "lexer.lxx" +{ + accept(); + return DNORMAL; +} + YY_BREAK +case 22: +YY_RULE_SETUP +#line 414 "lexer.lxx" +{ + accept(); + return DRGBA; +} + YY_BREAK +case 23: +YY_RULE_SETUP +#line 418 "lexer.lxx" +{ + accept(); + return DUV; +} + YY_BREAK +case 24: +YY_RULE_SETUP +#line 422 "lexer.lxx" +{ + accept(); + return DXYZ; +} + YY_BREAK +case 25: +YY_RULE_SETUP +#line 426 "lexer.lxx" +{ + accept(); + return DCS; +} + YY_BREAK +case 26: +YY_RULE_SETUP +#line 430 "lexer.lxx" +{ + accept(); + return DISTANCE; +} + YY_BREAK +case 27: +YY_RULE_SETUP +#line 434 "lexer.lxx" +{ + accept(); + return DTREF; +} + YY_BREAK +case 28: +YY_RULE_SETUP +#line 438 "lexer.lxx" +{ + accept(); + return DYNAMICVERTEXPOOL; +} + YY_BREAK +case 29: +YY_RULE_SETUP +#line 442 "lexer.lxx" +{ + accept(); + return EXTERNAL_FILE; +} + YY_BREAK +case 30: +YY_RULE_SETUP +#line 446 "lexer.lxx" +{ + accept(); + return GROUP; +} + YY_BREAK +case 31: +YY_RULE_SETUP +#line 450 "lexer.lxx" +{ + accept(); + return DEFAULTPOSE; +} + YY_BREAK +case 32: +YY_RULE_SETUP +#line 454 "lexer.lxx" +{ + accept(); + return JOINT; +} + YY_BREAK +case 33: +YY_RULE_SETUP +#line 458 "lexer.lxx" +{ + accept(); + return KNOTS; +} + YY_BREAK +case 34: +YY_RULE_SETUP +#line 462 "lexer.lxx" +{ + accept(); + return INCLUDE; +} + YY_BREAK +case 35: +YY_RULE_SETUP +#line 466 "lexer.lxx" +{ + accept(); + return INSTANCE; +} + YY_BREAK +case 36: +YY_RULE_SETUP +#line 470 "lexer.lxx" +{ + accept(); + return LINE; +} + YY_BREAK +case 37: +YY_RULE_SETUP +#line 474 "lexer.lxx" +{ + accept(); + return LOOP; +} + YY_BREAK +case 38: +YY_RULE_SETUP +#line 478 "lexer.lxx" +{ + accept(); + return MATERIAL; +} + YY_BREAK +case 39: +YY_RULE_SETUP +#line 482 "lexer.lxx" +{ + accept(); + return MATRIX3; +} + YY_BREAK +case 40: +YY_RULE_SETUP +#line 486 "lexer.lxx" +{ + accept(); + return MATRIX4; +} + YY_BREAK +case 41: +YY_RULE_SETUP +#line 490 "lexer.lxx" +{ + accept(); + return MODEL; +} + YY_BREAK +case 42: +YY_RULE_SETUP +#line 494 "lexer.lxx" +{ + accept(); + return MREF; +} + YY_BREAK +case 43: +YY_RULE_SETUP +#line 498 "lexer.lxx" +{ + accept(); + return NORMAL; +} + YY_BREAK +case 44: +YY_RULE_SETUP +#line 502 "lexer.lxx" +{ + accept(); + return NURBSCURVE; +} + YY_BREAK +case 45: +YY_RULE_SETUP +#line 506 "lexer.lxx" +{ + accept(); + return NURBSSURFACE; +} + YY_BREAK +case 46: +YY_RULE_SETUP +#line 510 "lexer.lxx" +{ + accept(); + return OBJECTTYPE; +} + YY_BREAK +case 47: +YY_RULE_SETUP +#line 514 "lexer.lxx" +{ + accept(); + return ORDER; +} + YY_BREAK +case 48: +YY_RULE_SETUP +#line 518 "lexer.lxx" +{ + accept(); + return OUTTANGENT; +} + YY_BREAK +case 49: +YY_RULE_SETUP +#line 522 "lexer.lxx" +{ + accept(); + return POINTLIGHT; +} + YY_BREAK +case 50: +YY_RULE_SETUP +#line 526 "lexer.lxx" +{ + accept(); + return POLYGON; +} + YY_BREAK +case 51: +YY_RULE_SETUP +#line 530 "lexer.lxx" +{ + accept(); + return REF; +} + YY_BREAK +case 52: +YY_RULE_SETUP +#line 534 "lexer.lxx" +{ + accept(); + return RGBA; +} + YY_BREAK +case 53: +YY_RULE_SETUP +#line 538 "lexer.lxx" +{ + accept(); + return ROTATE; +} + YY_BREAK +case 54: +YY_RULE_SETUP +#line 542 "lexer.lxx" +{ + accept(); + return ROTX; +} + YY_BREAK +case 55: +YY_RULE_SETUP +#line 546 "lexer.lxx" +{ + accept(); + return ROTY; +} + YY_BREAK +case 56: +YY_RULE_SETUP +#line 550 "lexer.lxx" +{ + accept(); + return ROTZ; +} + YY_BREAK +case 57: +YY_RULE_SETUP +#line 554 "lexer.lxx" +{ + accept(); + return SANIM; +} + YY_BREAK +case 58: +YY_RULE_SETUP +#line 558 "lexer.lxx" +{ + accept(); + return SCALAR; +} + YY_BREAK +case 59: +YY_RULE_SETUP +#line 562 "lexer.lxx" +{ + accept(); + return SCALE; +} + YY_BREAK +case 60: +YY_RULE_SETUP +#line 566 "lexer.lxx" +{ + accept(); + return SEQUENCE; +} + YY_BREAK +case 61: +YY_RULE_SETUP +#line 570 "lexer.lxx" +{ + accept(); + return SHADING; +} + YY_BREAK +case 62: +YY_RULE_SETUP +#line 574 "lexer.lxx" +{ + accept(); + return SWITCH; +} + YY_BREAK +case 63: +YY_RULE_SETUP +#line 578 "lexer.lxx" +{ + accept(); + return SWITCHCONDITION; +} + YY_BREAK +case 64: +YY_RULE_SETUP +#line 582 "lexer.lxx" +{ + accept(); + return TABLE; +} + YY_BREAK +case 65: +YY_RULE_SETUP +#line 586 "lexer.lxx" +{ + accept(); + return TABLE_V; +} + YY_BREAK +case 66: +YY_RULE_SETUP +#line 590 "lexer.lxx" +{ + accept(); + return TAG; +} + YY_BREAK +case 67: +YY_RULE_SETUP +#line 594 "lexer.lxx" +{ + accept(); + return TANGENT; +} + YY_BREAK +case 68: +YY_RULE_SETUP +#line 598 "lexer.lxx" +{ + accept(); + return TEXLIST; +} + YY_BREAK +case 69: +YY_RULE_SETUP +#line 602 "lexer.lxx" +{ + accept(); + return TEXTURE; +} + YY_BREAK +case 70: +YY_RULE_SETUP +#line 606 "lexer.lxx" +{ + accept(); + return TLENGTHS; +} + YY_BREAK +case 71: +YY_RULE_SETUP +#line 610 "lexer.lxx" +{ + accept(); + return TRANSFORM; +} + YY_BREAK +case 72: +YY_RULE_SETUP +#line 614 "lexer.lxx" +{ + accept(); + return TRANSLATE; +} + YY_BREAK +case 73: +YY_RULE_SETUP +#line 618 "lexer.lxx" +{ + accept(); + return TREF; +} + YY_BREAK +case 74: +YY_RULE_SETUP +#line 622 "lexer.lxx" +{ + accept(); + return TRIANGLEFAN; +} + YY_BREAK +case 75: +YY_RULE_SETUP +#line 626 "lexer.lxx" +{ + accept(); + return TRIANGLESTRIP; +} + YY_BREAK +case 76: +YY_RULE_SETUP +#line 630 "lexer.lxx" +{ + accept(); + return TRIM; +} + YY_BREAK +case 77: +YY_RULE_SETUP +#line 634 "lexer.lxx" +{ + accept(); + return TXT; +} + YY_BREAK +case 78: +YY_RULE_SETUP +#line 638 "lexer.lxx" +{ + accept(); + return UKNOTS; +} + YY_BREAK +case 79: +YY_RULE_SETUP +#line 642 "lexer.lxx" +{ + accept(); + return UKNOTS; +} + YY_BREAK +case 80: +YY_RULE_SETUP +#line 646 "lexer.lxx" +{ + accept(); + return UV; +} + YY_BREAK +case 81: +YY_RULE_SETUP +#line 650 "lexer.lxx" +{ + accept(); + return VKNOTS; +} + YY_BREAK +case 82: +YY_RULE_SETUP +#line 654 "lexer.lxx" +{ + accept(); + return VKNOTS; +} + YY_BREAK +case 83: +YY_RULE_SETUP +#line 658 "lexer.lxx" +{ + accept(); + return VERTEX; +} + YY_BREAK +case 84: +YY_RULE_SETUP +#line 662 "lexer.lxx" +{ + accept(); + return VERTEXANIM; +} + YY_BREAK +case 85: +YY_RULE_SETUP +#line 666 "lexer.lxx" +{ + accept(); + return VERTEXPOOL; +} + YY_BREAK +case 86: +YY_RULE_SETUP +#line 670 "lexer.lxx" +{ + accept(); + return VERTEXREF; +} + YY_BREAK +case 87: +YY_RULE_SETUP +#line 674 "lexer.lxx" +{ + accept(); + return XFMANIM; +} + YY_BREAK +case 88: +YY_RULE_SETUP +#line 678 "lexer.lxx" +{ + accept(); + return XFMSANIM; +} + YY_BREAK +case 89: +YY_RULE_SETUP +#line 685 "lexer.lxx" +{ + // An integer or floating-point number. + accept(); + eggyylval._number = patof(eggyytext); + eggyylval._string = eggyytext; + return EGG_NUMBER; +} + YY_BREAK +case 90: +YY_RULE_SETUP +#line 693 "lexer.lxx" +{ + // A hexadecimal integer number. + accept(); + eggyylval._ulong = strtoul(eggyytext+2, NULL, 16); + eggyylval._string = eggyytext; + return EGG_ULONG; +} + YY_BREAK +case 91: +YY_RULE_SETUP +#line 701 "lexer.lxx" +{ + // A binary integer number. + accept(); + eggyylval._ulong = strtoul(eggyytext+2, NULL, 2); + eggyylval._string = eggyytext; + return EGG_ULONG; +} + YY_BREAK +case 92: +YY_RULE_SETUP +#line 709 "lexer.lxx" +{ + // not-a-number. These sometimes show up in egg files accidentally. + accept(); + memset(&eggyylval._number, 0, sizeof(eggyylval._number)); + *(unsigned long *)&eggyylval._number = strtoul(eggyytext+3, NULL, 0); + eggyylval._string = eggyytext; + return EGG_NUMBER; +} + YY_BREAK +case 93: +YY_RULE_SETUP +#line 718 "lexer.lxx" +{ + // infinity. As above. + accept(); + eggyylval._number = HUGE_VAL; + eggyylval._string = eggyytext; + return EGG_NUMBER; +} + YY_BREAK +case 94: +YY_RULE_SETUP +#line 726 "lexer.lxx" +{ + // minus infinity. As above. + accept(); + eggyylval._number = -HUGE_VAL; + eggyylval._string = eggyytext; + return EGG_NUMBER; +} + YY_BREAK +case 95: +YY_RULE_SETUP +#line 734 "lexer.lxx" +{ + // infinity, on Win32. As above. + accept(); + eggyylval._number = HUGE_VAL; + eggyylval._string = eggyytext; + return EGG_NUMBER; +} + YY_BREAK +case 96: +YY_RULE_SETUP +#line 742 "lexer.lxx" +{ + // minus infinity, on Win32. As above. + accept(); + eggyylval._number = -HUGE_VAL; + eggyylval._string = eggyytext; + return EGG_NUMBER; +} + YY_BREAK +case 97: +YY_RULE_SETUP +#line 751 "lexer.lxx" +{ + // Quoted string. + accept(); + eggyylval._string = scan_quoted_string(); + return EGG_STRING; +} + YY_BREAK +case 98: +YY_RULE_SETUP +#line 758 "lexer.lxx" +{ + // Unquoted string. + accept(); + eggyylval._string = eggyytext; + return EGG_STRING; +} + YY_BREAK +case 99: +YY_RULE_SETUP +#line 764 "lexer.lxx" +ECHO; + YY_BREAK +#line 2342 "lex.yy.c" +case YY_STATE_EOF(INITIAL): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed eggyyin at a new source and called + * eggyylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = eggyyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_c_buf_p); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( eggyywrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * eggyytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of eggyylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = (yytext_ptr); + register int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + eggyyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), (size_t) num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + eggyyrestart(eggyyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) eggyyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 577 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + register int yy_is_jam; + register char *yy_cp = (yy_c_buf_p); + + register YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 577 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 576); + + return yy_is_jam ? 0 : yy_current_state; +} + + static void yyunput (int c, register char * yy_bp ) +{ + register char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up eggyytext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + register int number_to_move = (yy_n_chars) + 2; + register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + (yytext_ptr) = yy_bp; + (yy_hold_char) = *yy_cp; + (yy_c_buf_p) = yy_cp; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (yy_c_buf_p) - (yytext_ptr); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + eggyyrestart(eggyyin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( eggyywrap( ) ) + return EOF; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve eggyytext */ + (yy_hold_char) = *++(yy_c_buf_p); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void eggyyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + eggyyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + eggyy_create_buffer(eggyyin,YY_BUF_SIZE ); + } + + eggyy_init_buffer(YY_CURRENT_BUFFER,input_file ); + eggyy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void eggyy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * eggyypop_buffer_state(); + * eggyypush_buffer_state(new_buffer); + */ + eggyyensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + eggyy_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (eggyywrap()) processing, but the only time this flag + * is looked at is after eggyywrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void eggyy_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + eggyyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE eggyy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) eggyyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in eggyy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) eggyyalloc(b->yy_buf_size + 2 ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in eggyy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + eggyy_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with eggyy_create_buffer() + * + */ + void eggyy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + eggyyfree((void *) b->yy_ch_buf ); + + eggyyfree((void *) b ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a eggyyrestart() or at EOF. + */ + static void eggyy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + eggyy_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then eggyy_init_buffer was _probably_ + * called from eggyyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void eggyy_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + eggyy_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void eggyypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + eggyyensure_buffer_stack(); + + /* This block is copied from eggyy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from eggyy_switch_to_buffer. */ + eggyy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void eggyypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + eggyy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + eggyy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void eggyyensure_buffer_stack (void) +{ + int num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)eggyyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in eggyyensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)eggyyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in eggyyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE eggyy_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) eggyyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in eggyy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + eggyy_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to eggyylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * eggyy_scan_bytes() instead. + */ +YY_BUFFER_STATE eggyy_scan_string (yyconst char * yystr ) +{ + + return eggyy_scan_bytes(yystr,strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to eggyylex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE eggyy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) eggyyalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in eggyy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = eggyy_scan_buffer(buf,n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in eggyy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up eggyytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + eggyytext[eggyyleng] = (yy_hold_char); \ + (yy_c_buf_p) = eggyytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + eggyyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int eggyyget_lineno (void) +{ + + return eggyylineno; +} + +/** Get the input stream. + * + */ +FILE *eggyyget_in (void) +{ + return eggyyin; +} + +/** Get the output stream. + * + */ +FILE *eggyyget_out (void) +{ + return eggyyout; +} + +/** Get the length of the current token. + * + */ +int eggyyget_leng (void) +{ + return eggyyleng; +} + +/** Get the current token. + * + */ + +char *eggyyget_text (void) +{ + return eggyytext; +} + +/** Set the current line number. + * @param line_number + * + */ +void eggyyset_lineno (int line_number ) +{ + + eggyylineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see eggyy_switch_to_buffer + */ +void eggyyset_in (FILE * in_str ) +{ + eggyyin = in_str ; +} + +void eggyyset_out (FILE * out_str ) +{ + eggyyout = out_str ; +} + +int eggyyget_debug (void) +{ + return eggyy_flex_debug; +} + +void eggyyset_debug (int bdebug ) +{ + eggyy_flex_debug = bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from eggyylex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + eggyyin = stdin; + eggyyout = stdout; +#else + eggyyin = (FILE *) 0; + eggyyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * eggyylex_init() + */ + return 0; +} + +/* eggyylex_destroy is for both reentrant and non-reentrant scanners. */ +int eggyylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + eggyy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + eggyypop_buffer_state(); + } + + /* Destroy the stack itself. */ + eggyyfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * eggyylex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *eggyyalloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *eggyyrealloc (void * ptr, yy_size_t size ) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void eggyyfree (void * ptr ) +{ + free( (char *) ptr ); /* see eggyyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 764 "lexer.lxx" diff --git a/panda/src/egg/lexer.lxx b/panda/src/egg/lexer.lxx index 611707a995..9671a15f9b 100644 --- a/panda/src/egg/lexer.lxx +++ b/panda/src/egg/lexer.lxx @@ -45,7 +45,7 @@ static int error_count = 0; static int warning_count = 0; // This is the pointer to the current input stream. -static istream *inp = NULL; +static istream *input_p = NULL; // This is the name of the egg file we're parsing. We keep it so we // can print it out for error messages. @@ -61,7 +61,7 @@ static int initial_token; void egg_init_lexer(istream &in, const string &filename) { - inp = ∈ + input_p = ∈ egg_filename = filename; line_number = 0; col_number = 0; @@ -163,10 +163,10 @@ eggyywarning(ostringstream &strm) { // stdio FILE pointer. This is flex-specific. static void input_chars(char *buffer, int &result, int max_size) { - nassertv(inp != NULL); - if (*inp) { - inp->read(buffer, max_size); - result = inp->gcount(); + nassertv(input_p != NULL); + if (*input_p) { + input_p->read(buffer, max_size); + result = input_p->gcount(); if (line_number == 0) { // This is a special case. If we are reading the very first bit diff --git a/panda/src/egg/parser.cxx.prebuilt b/panda/src/egg/parser.cxx.prebuilt index 20e63137e6..ab97875654 100644 --- a/panda/src/egg/parser.cxx.prebuilt +++ b/panda/src/egg/parser.cxx.prebuilt @@ -1,24 +1,22 @@ -/* A Bison parser, made by GNU Bison 2.3. */ +/* A Bison parser, made by GNU Bison 2.4.2. */ /* Skeleton implementation for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify + + Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -29,7 +27,7 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ @@ -47,7 +45,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.3" +#define YYBISON_VERSION "2.4.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -55,17 +53,200 @@ /* Pure parsers. */ #define YYPURE 0 +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ -#define yyparse eggyyparse -#define yylex eggyylex -#define yyerror eggyyerror -#define yylval eggyylval -#define yychar eggyychar -#define yydebug eggyydebug -#define yynerrs eggyynerrs +#define yyparse eggyyparse +#define yylex eggyylex +#define yyerror eggyyerror +#define yylval eggyylval +#define yychar eggyychar +#define yydebug eggyydebug +#define yynerrs eggyynerrs + + +/* Copy the first part of user declarations. */ + +/* Line 189 of yacc.c */ +#line 6 "parser.yxx" + + +#include "pandabase.h" +#include "config_egg.h" +#include "parserDefs.h" +#include "lexerDefs.h" +#include "eggObject.h" +#include "eggGroup.h" +#include "eggVertex.h" +#include "eggVertexPool.h" +#include "eggVertexUV.h" +#include "eggPolygon.h" +#include "eggCompositePrimitive.h" +#include "eggTriangleFan.h" +#include "eggTriangleStrip.h" +#include "eggPoint.h" +#include "eggLine.h" +#include "eggNurbsSurface.h" +#include "eggNurbsCurve.h" +#include "eggTable.h" +#include "eggSAnimData.h" +#include "eggXfmSAnim.h" +#include "eggXfmAnimData.h" +#include "eggTexture.h" +#include "eggMaterial.h" +#include "eggComment.h" +#include "eggCoordinateSystem.h" +#include "eggExternalReference.h" +#include "eggData.h" +#include "eggAnimPreload.h" +#include "eggTransform.h" +#include "pt_EggTexture.h" +#include "pt_EggMaterial.h" + +#include "string_utils.h" +#include "filename.h" +#include "luse.h" +#include "lmatrix.h" +#include "coordinateSystem.h" +#include "pvector.h" +#include "dcast.h" +#include "thread.h" + +// Because our token type contains objects of type string, which +// require correct copy construction (and not simply memcpying), we +// cannot use bison's built-in auto-stack-grow feature. As an easy +// solution, we ensure here that we have enough yacc stack to start +// with, and that it doesn't ever try to grow. +#define YYINITDEPTH 1000 +#define YYMAXDEPTH 1000 + +// We need a stack of EggObject pointers. Each time we encounter a +// nested EggObject of some kind, we'll allocate a new one of these +// and push it onto the stack. At any given time, the top of the +// stack is the EggObject we are currently scanning. + +typedef pvector< PT(EggObject) > EggStack; +static EggStack egg_stack; + +// This is used just when parsing a or entry. +static EggTransform *egg_top_transform; + +// There's one "top-level" egg node, which is where we should parent +// things (e.g. implicit textures) encountered in the egg file that +// don't have an explicit place in the tree. If this is NULL, such +// things won't be parented anywhere. +static EggGroupNode *egg_top_node; + +// We need a table mapping vertex pool names to vertex pools. +typedef pmap VertexPools; +static VertexPools vertex_pools; + +// And another one mapping texture names to textures. +typedef pmap Textures; +static Textures textures; + +// And again for material names to materials. +typedef pmap Materials; +static Materials materials; + +// Group names to groups. +typedef pmap Groups; +static Groups groups; + +// We need to be able to save the index number requested for a vertex +// temporarily. +static int vertex_index; + +// We need to hold a matrix for a little bit while parsing the +// entries. +static LMatrix3d matrix_2d; + + +//////////////////////////////////////////////////////////////////// +// Defining the interface to the parser. +//////////////////////////////////////////////////////////////////// + +void +egg_init_parser(istream &in, const string &filename, + EggObject *tos, EggGroupNode *top_node) { + egg_init_lexer(in, filename); + + egg_stack.clear(); + vertex_pools.clear(); + textures.clear(); + materials.clear(); + groups.clear(); + + egg_stack.push_back(tos); + egg_top_node = top_node; +} + +void +egg_cleanup_parser() { + // Check for undefined vertex pools. + VertexPools::const_iterator vpi; + for (vpi = vertex_pools.begin(); vpi != vertex_pools.end(); ++vpi) { + EggVertexPool *pool = (*vpi).second; + if (pool->has_forward_vertices()) { + if (!pool->has_defined_vertices()) { + eggyyerror("Undefined vertex pool " + pool->get_name()); + } else { + eggyyerror("Undefined vertices in pool " + pool->get_name()); + + egg_cat.error(false) + << "Undefined vertex index numbers:"; + EggVertexPool::const_iterator vi; + for (vi = pool->begin(); vi != pool->end(); ++vi) { + EggVertex *vertex = (*vi); + if (vertex->is_forward_reference()) { + egg_cat.error(false) + << " " << vertex->get_index(); + } + } + egg_cat.error(false) + << "\n"; + } + } + } + + // Clean these out after we're done, so we don't keep big memory + // structures around needlessly. + egg_stack.clear(); + vertex_pools.clear(); + textures.clear(); + materials.clear(); + groups.clear(); +} + + + +/* Line 189 of yacc.c */ +#line 232 "y.tab.c" + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif /* Tokens. */ @@ -255,191 +436,18 @@ -/* Copy the first part of user declarations. */ -#line 6 "parser.yxx" - - -#include "pandabase.h" -#include "config_egg.h" -#include "parserDefs.h" -#include "lexerDefs.h" -#include "eggObject.h" -#include "eggGroup.h" -#include "eggVertex.h" -#include "eggVertexPool.h" -#include "eggVertexUV.h" -#include "eggPolygon.h" -#include "eggCompositePrimitive.h" -#include "eggTriangleFan.h" -#include "eggTriangleStrip.h" -#include "eggPoint.h" -#include "eggLine.h" -#include "eggNurbsSurface.h" -#include "eggNurbsCurve.h" -#include "eggTable.h" -#include "eggSAnimData.h" -#include "eggXfmSAnim.h" -#include "eggXfmAnimData.h" -#include "eggTexture.h" -#include "eggMaterial.h" -#include "eggComment.h" -#include "eggCoordinateSystem.h" -#include "eggExternalReference.h" -#include "eggData.h" -#include "eggAnimPreload.h" -#include "eggTransform.h" -#include "pt_EggTexture.h" -#include "pt_EggMaterial.h" - -#include "string_utils.h" -#include "filename.h" -#include "luse.h" -#include "lmatrix.h" -#include "coordinateSystem.h" -#include "pvector.h" -#include "dcast.h" -#include "thread.h" - -// Because our token type contains objects of type string, which -// require correct copy construction (and not simply memcpying), we -// cannot use bison's built-in auto-stack-grow feature. As an easy -// solution, we ensure here that we have enough yacc stack to start -// with, and that it doesn't ever try to grow. -#define YYINITDEPTH 1000 -#define YYMAXDEPTH 1000 - -// We need a stack of EggObject pointers. Each time we encounter a -// nested EggObject of some kind, we'll allocate a new one of these -// and push it onto the stack. At any given time, the top of the -// stack is the EggObject we are currently scanning. - -typedef pvector< PT(EggObject) > EggStack; -static EggStack egg_stack; - -// This is used just when parsing a or entry. -static EggTransform *egg_top_transform; - -// There's one "top-level" egg node, which is where we should parent -// things (e.g. implicit textures) encountered in the egg file that -// don't have an explicit place in the tree. If this is NULL, such -// things won't be parented anywhere. -static EggGroupNode *egg_top_node; - -// We need a table mapping vertex pool names to vertex pools. -typedef pmap VertexPools; -static VertexPools vertex_pools; - -// And another one mapping texture names to textures. -typedef pmap Textures; -static Textures textures; - -// And again for material names to materials. -typedef pmap Materials; -static Materials materials; - -// Group names to groups. -typedef pmap Groups; -static Groups groups; - -// We need to be able to save the index number requested for a vertex -// temporarily. -static int vertex_index; - -// We need to hold a matrix for a little bit while parsing the -// entries. -static LMatrix3d matrix_2d; - - -//////////////////////////////////////////////////////////////////// -// Defining the interface to the parser. -//////////////////////////////////////////////////////////////////// - -void -egg_init_parser(istream &in, const string &filename, - EggObject *tos, EggGroupNode *top_node) { - egg_init_lexer(in, filename); - - egg_stack.clear(); - vertex_pools.clear(); - textures.clear(); - materials.clear(); - groups.clear(); - - egg_stack.push_back(tos); - egg_top_node = top_node; -} - -void -egg_cleanup_parser() { - // Check for undefined vertex pools. - VertexPools::const_iterator vpi; - for (vpi = vertex_pools.begin(); vpi != vertex_pools.end(); ++vpi) { - EggVertexPool *pool = (*vpi).second; - if (pool->has_forward_vertices()) { - if (!pool->has_defined_vertices()) { - eggyyerror("Undefined vertex pool " + pool->get_name()); - } else { - eggyyerror("Undefined vertices in pool " + pool->get_name()); - - egg_cat.error(false) - << "Undefined vertex index numbers:"; - EggVertexPool::const_iterator vi; - for (vi = pool->begin(); vi != pool->end(); ++vi) { - EggVertex *vertex = (*vi); - if (vertex->is_forward_reference()) { - egg_cat.error(false) - << " " << vertex->get_index(); - } - } - egg_cat.error(false) - << "\n"; - } - } - } - - // Clean these out after we're done, so we don't keep big memory - // structures around needlessly. - egg_stack.clear(); - vertex_pools.clear(); - textures.clear(); - materials.clear(); - groups.clear(); -} - - - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 -#endif - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef int YYSTYPE; + # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 #endif - /* Copy the second part of user declarations. */ -/* Line 216 of yacc.c. */ -#line 443 "y.tab.c" +/* Line 264 of yacc.c */ +#line 451 "y.tab.c" #ifdef short # undef short @@ -514,14 +522,14 @@ typedef short int yytype_int16; #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int -YYID (int i) +YYID (int yyi) #else static int -YYID (i) - int i; +YYID (yyi) + int yyi; #endif { - return i; + return yyi; } #endif @@ -602,9 +610,9 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss; - YYSTYPE yyvs; - }; + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; +}; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) @@ -638,12 +646,12 @@ union yyalloc elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack) \ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ @@ -875,31 +883,31 @@ static const yytype_uint16 yyrline[] = 0, 231, 231, 232, 233, 234, 245, 246, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 290, 313, 328, 327, - 355, 356, 688, 700, 699, 726, 727, 822, 829, 850, - 849, 889, 890, 902, 901, 913, 912, 958, 962, 966, - 970, 975, 974, 989, 990, 991, 999, 1018, 1022, 1026, - 1034, 1042, 1050, 1058, 1066, 1084, 1088, 1096, 1114, 1118, - 1126, 1145, 1144, 1170, 1169, 1191, 1190, 1215, 1216, 1346, - 1358, 1363, 1370, 1376, 1389, 1396, 1409, 1415, 1421, 1427, - 1432, 1438, 1439, 1440, 1441, 1442, 1451, 1465, 1495, 1496, - 1519, 1518, 1535, 1534, 1555, 1556, 1557, 1558, 1559, 1560, - 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1571, 1578, 1585, - 1592, 1599, 1606, 1613, 1620, 1627, 1634, 1641, 1645, 1646, - 1658, 1662, 1663, 1685, 1718, 1722, 1747, 1759, 1764, 1782, - 1781, 1801, 1800, 1820, 1819, 1839, 1838, 1858, 1857, 1877, - 1876, 1896, 1895, 1915, 1916, 1917, 1928, 1930, 1929, 1950, - 1951, 1952, 1953, 1954, 1955, 1956, 1957, 2030, 2031, 2032, - 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2047, - 2048, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, - 2121, 2122, 2191, 2208, 2248, 2265, 2269, 2277, 2295, 2299, - 2307, 2325, 2341, 2372, 2390, 2410, 2430, 2435, 2446, 2452, - 2471, 2487, 2509, 2508, 2532, 2531, 2552, 2553, 2557, 2561, - 2565, 2569, 2585, 2584, 2605, 2606, 2618, 2633, 2632, 2653, - 2654, 2671, 2686, 2685, 2706, 2707, 2722, 2738, 2737, 2758, - 2759, 2783, 2787, 2801, 2805, 2819, 2840, 2861, 2886, 2907, - 2912, 2924, 2936, 2941, 2952, 2956, 2970, 2974, 2978, 2991, - 2995, 3011, 3015, 3029, 3030, 3045, 3051, 3057, 3074, 3082, - 3088 + 355, 356, 691, 703, 702, 729, 730, 825, 832, 853, + 852, 892, 893, 905, 904, 916, 915, 961, 965, 969, + 973, 978, 977, 992, 993, 994, 1002, 1021, 1025, 1029, + 1037, 1045, 1053, 1061, 1069, 1087, 1091, 1099, 1117, 1121, + 1129, 1148, 1147, 1173, 1172, 1194, 1193, 1218, 1219, 1364, + 1376, 1381, 1388, 1394, 1407, 1414, 1427, 1433, 1439, 1445, + 1450, 1456, 1457, 1458, 1459, 1460, 1469, 1483, 1513, 1514, + 1537, 1536, 1553, 1552, 1573, 1574, 1575, 1576, 1577, 1578, + 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1589, 1596, 1603, + 1610, 1617, 1624, 1631, 1638, 1645, 1652, 1659, 1663, 1664, + 1676, 1680, 1681, 1703, 1736, 1740, 1765, 1777, 1782, 1800, + 1799, 1819, 1818, 1838, 1837, 1857, 1856, 1876, 1875, 1895, + 1894, 1914, 1913, 1933, 1934, 1935, 1946, 1948, 1947, 1968, + 1969, 1970, 1971, 1972, 1973, 1974, 1975, 2050, 2051, 2052, + 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2067, + 2068, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, + 2143, 2144, 2215, 2232, 2272, 2289, 2293, 2301, 2319, 2323, + 2331, 2349, 2365, 2396, 2414, 2434, 2454, 2459, 2470, 2476, + 2495, 2511, 2533, 2532, 2556, 2555, 2576, 2577, 2581, 2585, + 2589, 2593, 2609, 2608, 2629, 2630, 2642, 2657, 2656, 2677, + 2678, 2695, 2710, 2709, 2730, 2731, 2746, 2762, 2761, 2782, + 2783, 2807, 2811, 2825, 2829, 2843, 2864, 2885, 2910, 2931, + 2936, 2948, 2960, 2965, 2976, 2980, 2994, 2998, 3002, 3015, + 3019, 3035, 3039, 3053, 3054, 3069, 3075, 3081, 3098, 3106, + 3112 }; #endif @@ -924,29 +932,29 @@ static const char *const yytname[] = "VERTEXANIM", "VERTEXPOOL", "VERTEXREF", "XFMANIM", "XFMSANIM", "START_EGG", "START_GROUP_BODY", "START_TEXTURE_BODY", "START_PRIMITIVE_BODY", "'{'", "'}'", "$accept", "grammar", "egg", - "node", "coordsystem", "comment", "texture", "@1", "texture_body", - "material", "@2", "material_body", "external_reference", "vertex_pool", - "@3", "vertex_pool_body", "vertex", "@4", "@5", "vertex_body", "@6", + "node", "coordsystem", "comment", "texture", "$@1", "texture_body", + "material", "$@2", "material_body", "external_reference", "vertex_pool", + "$@3", "vertex_pool_body", "vertex", "$@4", "$@5", "vertex_body", "$@6", "vertex_uv_body", "vertex_normal_body", "vertex_color_body", "group", - "@7", "joint", "@8", "instance", "@9", "group_body", "cs_type", - "collide_flags", "transform", "@10", "default_pose", "@11", + "$@7", "joint", "$@8", "instance", "$@9", "group_body", "cs_type", + "collide_flags", "transform", "$@10", "default_pose", "$@11", "transform_body", "translate2d", "translate3d", "rotate2d", "rotx", "roty", "rotz", "rotate3d", "scale2d", "scale3d", "uniform_scale", "matrix3", "matrix3_body", "matrix4", "matrix4_body", "group_vertex_ref", "group_vertex_membership", "switchcondition", "switchcondition_body", - "polygon", "@12", "trianglefan", "@13", "trianglestrip", "@14", - "point_light", "@15", "line", "@16", "nurbs_surface", "@17", - "nurbs_curve", "@18", "primitive_component_body", "primitive_body", - "@19", "nurbs_surface_body", "nurbs_curve_body", "primitive_tref_body", + "polygon", "$@12", "trianglefan", "$@13", "trianglestrip", "$@14", + "point_light", "$@15", "line", "$@16", "nurbs_surface", "$@17", + "nurbs_curve", "$@18", "primitive_component_body", "primitive_body", + "$@19", "nurbs_surface_body", "nurbs_curve_body", "primitive_tref_body", "primitive_texture_body", "primitive_material_body", "primitive_normal_body", "primitive_color_body", "primitive_bface_body", "primitive_vertex_ref", "nurbs_surface_order_body", "nurbs_surface_uknots_body", "nurbs_surface_vknots_body", "nurbs_surface_trim_body", "nurbs_surface_trim_loop_body", - "nurbs_curve_order_body", "nurbs_curve_knots_body", "table", "@20", - "bundle", "@21", "table_body", "sanim", "@22", "sanim_body", "xfmanim", - "@23", "xfmanim_body", "xfm_s_anim", "@24", "xfm_s_anim_body", - "anim_preload", "@25", "anim_preload_body", "integer_list", "real_list", + "nurbs_curve_order_body", "nurbs_curve_knots_body", "table", "$@20", + "bundle", "$@21", "table_body", "sanim", "$@22", "sanim_body", "xfmanim", + "$@23", "xfmanim_body", "xfm_s_anim", "$@24", "xfm_s_anim_body", + "anim_preload", "$@25", "anim_preload_body", "integer_list", "real_list", "texture_name", "material_name", "vertex_pool_name", "group_name", "required_name", "optional_name", "required_string", "optional_string", "string", "repeated_string", "repeated_string_body", "real", @@ -1616,9 +1624,18 @@ static const yytype_uint8 yystos[] = /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ + Once GCC version 2 has supplanted version 1, this can go. However, + YYFAIL appears to be in use. Nevertheless, it is formally deprecated + in Bison 2.4.2's NEWS entry, where a plan to phase it out is + discussed. */ #define YYFAIL goto yyerrlab +#if defined YYFAIL + /* This is here to suppress warnings from the GCC cpp's + -Wunused-macros. Normally we don't worry about that warning, but + some users do, and we want to make it easy for users to remove + YYFAIL uses, which will produce warnings from Bison 2.5. */ +#endif #define YYRECOVERING() (!!yyerrstatus) @@ -1786,17 +1803,20 @@ yy_symbol_print (yyoutput, yytype, yyvaluep) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void -yy_stack_print (bottom, top) - yytype_int16 *bottom; - yytype_int16 *top; +yy_stack_print (yybottom, yytop) + yytype_int16 *yybottom; + yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); - for (; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } YYFPRINTF (stderr, "\n"); } @@ -1830,11 +1850,11 @@ yy_reduce_print (yyvsp, yyrule) /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { - fprintf (stderr, " $%d = ", yyi + 1); + YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) ); - fprintf (stderr, "\n"); + YYFPRINTF (stderr, "\n"); } } @@ -2114,10 +2134,8 @@ yydestruct (yymsg, yytype, yyvaluep) break; } } - /* Prevent warnings from -Wmissing-prototypes. */ - #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); @@ -2133,11 +2151,10 @@ int yyparse (); #endif /* ! YYPARSE_PARAM */ - -/* The look-ahead symbol. */ +/* The lookahead symbol. */ int yychar; -/* The semantic value of the look-ahead symbol. */ +/* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ @@ -2145,9 +2162,9 @@ int yynerrs; -/*----------. -| yyparse. | -`----------*/ +/*-------------------------. +| yyparse or yypush_parse. | +`-------------------------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ @@ -2171,14 +2188,39 @@ yyparse () #endif #endif { - - int yystate; + + + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + + /* The stacks and their tools: + `yyss': related to states. + `yyvs': related to semantic values. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; + + YYSIZE_T yystacksize; + int yyn; int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ - int yytoken = 0; + /* Lookahead token as an internal (translated) token number. */ + int yytoken; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; @@ -2186,51 +2228,28 @@ yyparse () YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss = yyssa; - yytype_int16 *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; - - - #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) - YYSIZE_T yystacksize = YYINITDEPTH; - - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - - /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; + yytoken = 0; + yyss = yyssa; + yyvs = yyvsa; + yystacksize = YYINITDEPTH; + YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ + yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ - yyssp = yyss; yyvsp = yyvs; @@ -2260,7 +2279,6 @@ yyparse () YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; - /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might @@ -2268,7 +2286,6 @@ yyparse () yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); yyss = yyss1; @@ -2291,9 +2308,8 @@ yyparse () (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); @@ -2304,7 +2320,6 @@ yyparse () yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); @@ -2314,6 +2329,9 @@ yyparse () YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + if (yystate == YYFINAL) + YYACCEPT; + goto yybackup; /*-----------. @@ -2322,16 +2340,16 @@ yyparse () yybackup: /* Do appropriate processing given the current state. Read a - look-ahead token if we need one and don't already have one. */ + lookahead token if we need one and don't already have one. */ - /* First try to decide what to do without reference to look-ahead token. */ + /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; - /* Not known => get a look-ahead token if don't already have one. */ + /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); @@ -2363,20 +2381,16 @@ yybackup: goto yyreduce; } - if (yyn == YYFINAL) - YYACCEPT; - /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; - /* Shift the look-ahead token. */ + /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - /* Discard the shifted token unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; + /* Discard the shifted token. */ + yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; @@ -2416,6 +2430,8 @@ yyreduce: switch (yyn) { case 7: + +/* Line 1464 of yacc.c */ #line 247 "parser.yxx" { assert(!egg_stack.empty()); @@ -2424,6 +2440,8 @@ yyreduce: break; case 26: + +/* Line 1464 of yacc.c */ #line 291 "parser.yxx" { string strval = (yyvsp[(3) - (4)]._string); @@ -2440,6 +2458,8 @@ yyreduce: break; case 27: + +/* Line 1464 of yacc.c */ #line 314 "parser.yxx" { (yyval._egg) = new EggComment((yyvsp[(2) - (5)]._string), (yyvsp[(4) - (5)]._string)); @@ -2447,6 +2467,8 @@ yyreduce: break; case 28: + +/* Line 1464 of yacc.c */ #line 328 "parser.yxx" { string tref_name = (yyvsp[(2) - (4)]._string); @@ -2463,6 +2485,8 @@ yyreduce: break; case 29: + +/* Line 1464 of yacc.c */ #line 341 "parser.yxx" { (yyval._egg) = egg_stack.back(); @@ -2471,6 +2495,8 @@ yyreduce: break; case 31: + +/* Line 1464 of yacc.c */ #line 357 "parser.yxx" { EggTexture *texture = DCAST(EggTexture, egg_stack.back()); @@ -2784,6 +2810,9 @@ yyreduce: texture->set_visibility_mode(m); } + } else if (cmp_nocase_uh(name, "depth_offset") == 0) { + texture->set_depth_offset((int)value); + } else if (cmp_nocase_uh(name, "draw_order") == 0) { texture->set_draw_order((int)value); @@ -2806,7 +2835,9 @@ yyreduce: break; case 33: -#line 700 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 703 "parser.yxx" { string mref_name = (yyvsp[(2) - (3)]._string); EggMaterial *material = new EggMaterial(mref_name); @@ -2821,7 +2852,9 @@ yyreduce: break; case 34: -#line 712 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 715 "parser.yxx" { (yyval._egg) = egg_stack.back(); egg_stack.pop_back(); @@ -2829,7 +2862,9 @@ yyreduce: break; case 36: -#line 728 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 731 "parser.yxx" { EggMaterial *material = DCAST(EggMaterial, egg_stack.back()); string name = (yyvsp[(3) - (6)]._string); @@ -2916,7 +2951,9 @@ yyreduce: break; case 37: -#line 823 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 826 "parser.yxx" { string node_name = (yyvsp[(2) - (5)]._string); Filename filename = (yyvsp[(4) - (5)]._string); @@ -2926,7 +2963,9 @@ yyreduce: break; case 38: -#line 830 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 833 "parser.yxx" { if (cmp_nocase_uh((yyvsp[(1) - (6)]._string), "group") != 0) { eggyyerror("keyword 'group' expected"); @@ -2939,7 +2978,9 @@ yyreduce: break; case 39: -#line 850 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 853 "parser.yxx" { string name = (yyvsp[(2) - (2)]._string); EggVertexPool *pool = NULL; @@ -2966,7 +3007,9 @@ yyreduce: break; case 40: -#line 874 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 877 "parser.yxx" { (yyval._egg) = egg_stack.back(); egg_stack.pop_back(); @@ -2974,14 +3017,18 @@ yyreduce: break; case 43: -#line 902 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 905 "parser.yxx" { egg_stack.push_back(new EggVertex); } break; case 44: -#line 906 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 909 "parser.yxx" { PT(EggVertex) vtx = DCAST(EggVertex, egg_stack.back()); egg_stack.pop_back(); @@ -2991,7 +3038,9 @@ yyreduce: break; case 45: -#line 913 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 916 "parser.yxx" { vertex_index = (int)(yyvsp[(2) - (2)]._number); EggVertexPool *pool = DCAST(EggVertexPool, egg_stack.back()); @@ -3019,7 +3068,9 @@ yyreduce: break; case 46: -#line 938 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 941 "parser.yxx" { PT(EggVertex) vtx = DCAST(EggVertex, egg_stack.back()); egg_stack.pop_back(); @@ -3032,35 +3083,45 @@ yyreduce: break; case 47: -#line 959 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 962 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_pos((yyvsp[(1) - (1)]._number)); } break; case 48: -#line 963 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 966 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_pos(LPoint2d((yyvsp[(1) - (2)]._number), (yyvsp[(2) - (2)]._number))); } break; case 49: -#line 967 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 970 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_pos(LPoint3d((yyvsp[(1) - (3)]._number), (yyvsp[(2) - (3)]._number), (yyvsp[(3) - (3)]._number))); } break; case 50: -#line 971 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 974 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_pos(LPoint4d((yyvsp[(1) - (4)]._number), (yyvsp[(2) - (4)]._number), (yyvsp[(3) - (4)]._number), (yyvsp[(4) - (4)]._number))); } break; case 51: -#line 975 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 978 "parser.yxx" { EggVertex *vertex = DCAST(EggVertex, egg_stack.back()); EggVertexUV *uv = new EggVertexUV((yyvsp[(3) - (4)]._string), TexCoordd::zero()); @@ -3074,14 +3135,18 @@ yyreduce: break; case 52: -#line 986 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 989 "parser.yxx" { egg_stack.pop_back(); } break; case 55: -#line 992 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 995 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_dxyzs. insert(EggMorphVertex((yyvsp[(3) - (8)]._string), LVector3d((yyvsp[(5) - (8)]._number), (yyvsp[(6) - (8)]._number), (yyvsp[(7) - (8)]._number)))).second; @@ -3092,7 +3157,9 @@ yyreduce: break; case 56: -#line 1000 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1003 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_dxyzs. insert(EggMorphVertex((yyvsp[(4) - (8)]._string), LVector3d((yyvsp[(5) - (8)]._number), (yyvsp[(6) - (8)]._number), (yyvsp[(7) - (8)]._number)))).second; @@ -3103,21 +3170,27 @@ yyreduce: break; case 57: -#line 1019 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1022 "parser.yxx" { DCAST(EggVertexUV, egg_stack.back())->set_uv(TexCoordd((yyvsp[(1) - (2)]._number), (yyvsp[(2) - (2)]._number))); } break; case 58: -#line 1023 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1026 "parser.yxx" { DCAST(EggVertexUV, egg_stack.back())->set_uvw(LVecBase3d((yyvsp[(1) - (3)]._number), (yyvsp[(2) - (3)]._number), (yyvsp[(3) - (3)]._number))); } break; case 59: -#line 1027 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1030 "parser.yxx" { if (DCAST(EggVertexUV, egg_stack.back())->has_tangent()) { eggyywarning("Ignoring repeated tangent"); @@ -3128,7 +3201,9 @@ yyreduce: break; case 60: -#line 1035 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1038 "parser.yxx" { if (DCAST(EggVertexUV, egg_stack.back())->has_binormal()) { eggyywarning("Ignoring repeated binormal"); @@ -3139,7 +3214,9 @@ yyreduce: break; case 61: -#line 1043 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1046 "parser.yxx" { bool inserted = DCAST(EggVertexUV, egg_stack.back())->_duvs. insert(EggMorphTexCoord((yyvsp[(3) - (7)]._string), LVector3d((yyvsp[(5) - (7)]._number), (yyvsp[(6) - (7)]._number), 0.0))).second; @@ -3150,7 +3227,9 @@ yyreduce: break; case 62: -#line 1051 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1054 "parser.yxx" { bool inserted = DCAST(EggVertexUV, egg_stack.back())->_duvs. insert(EggMorphTexCoord((yyvsp[(3) - (8)]._string), LVector3d((yyvsp[(5) - (8)]._number), (yyvsp[(6) - (8)]._number), (yyvsp[(7) - (8)]._number)))).second; @@ -3161,7 +3240,9 @@ yyreduce: break; case 63: -#line 1059 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1062 "parser.yxx" { bool inserted = DCAST(EggVertexUV, egg_stack.back())->_duvs. insert(EggMorphTexCoord((yyvsp[(4) - (7)]._string), LVector3d((yyvsp[(5) - (7)]._number), (yyvsp[(6) - (7)]._number), 0.0))).second; @@ -3172,7 +3253,9 @@ yyreduce: break; case 64: -#line 1067 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1070 "parser.yxx" { bool inserted = DCAST(EggVertexUV, egg_stack.back())->_duvs. insert(EggMorphTexCoord((yyvsp[(4) - (8)]._string), LVector3d((yyvsp[(5) - (8)]._number), (yyvsp[(6) - (8)]._number), (yyvsp[(7) - (8)]._number)))).second; @@ -3183,14 +3266,18 @@ yyreduce: break; case 65: -#line 1085 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1088 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_normal(Normald((yyvsp[(1) - (3)]._number), (yyvsp[(2) - (3)]._number), (yyvsp[(3) - (3)]._number))); } break; case 66: -#line 1089 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1092 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_dnormals. insert(EggMorphNormal((yyvsp[(3) - (8)]._string), LVector3d((yyvsp[(5) - (8)]._number), (yyvsp[(6) - (8)]._number), (yyvsp[(7) - (8)]._number)))).second; @@ -3201,7 +3288,9 @@ yyreduce: break; case 67: -#line 1097 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1100 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_dnormals. insert(EggMorphNormal((yyvsp[(4) - (8)]._string), LVector3d((yyvsp[(5) - (8)]._number), (yyvsp[(6) - (8)]._number), (yyvsp[(7) - (8)]._number)))).second; @@ -3212,14 +3301,18 @@ yyreduce: break; case 68: -#line 1115 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1118 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_color(Colorf((yyvsp[(1) - (4)]._number), (yyvsp[(2) - (4)]._number), (yyvsp[(3) - (4)]._number), (yyvsp[(4) - (4)]._number))); } break; case 69: -#line 1119 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1122 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_drgbas. insert(EggMorphColor((yyvsp[(3) - (9)]._string), LVector4f((yyvsp[(5) - (9)]._number), (yyvsp[(6) - (9)]._number), (yyvsp[(7) - (9)]._number), (yyvsp[(8) - (9)]._number)))).second; @@ -3230,7 +3323,9 @@ yyreduce: break; case 70: -#line 1127 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1130 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_drgbas. insert(EggMorphColor((yyvsp[(4) - (9)]._string), LVector4f((yyvsp[(5) - (9)]._number), (yyvsp[(6) - (9)]._number), (yyvsp[(7) - (9)]._number), (yyvsp[(8) - (9)]._number)))).second; @@ -3241,7 +3336,9 @@ yyreduce: break; case 71: -#line 1145 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1148 "parser.yxx" { EggGroup *group = new EggGroup((yyvsp[(2) - (2)]._string)); egg_stack.push_back(group); @@ -3249,7 +3346,9 @@ yyreduce: break; case 72: -#line 1150 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1153 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); (yyval._egg) = group; @@ -3262,7 +3361,9 @@ yyreduce: break; case 73: -#line 1170 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1173 "parser.yxx" { EggGroup *group = new EggGroup((yyvsp[(2) - (2)]._string)); group->set_group_type(EggGroup::GT_joint); @@ -3271,7 +3372,9 @@ yyreduce: break; case 74: -#line 1176 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1179 "parser.yxx" { (yyval._egg) = egg_stack.back(); egg_stack.pop_back(); @@ -3279,7 +3382,9 @@ yyreduce: break; case 75: -#line 1191 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1194 "parser.yxx" { EggGroup *group = new EggGroup((yyvsp[(2) - (2)]._string)); group->set_group_type(EggGroup::GT_instance); @@ -3288,7 +3393,9 @@ yyreduce: break; case 76: -#line 1197 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1200 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); (yyval._egg) = group; @@ -3300,7 +3407,9 @@ yyreduce: break; case 78: -#line 1217 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1220 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string name = (yyvsp[(3) - (6)]._string); @@ -3355,6 +3464,9 @@ yyreduce: group->set_visibility_mode(m); } + } else if (cmp_nocase_uh(name, "depth_offset") == 0) { + group->set_depth_offset(ulong_value); + } else if (cmp_nocase_uh(name, "draw_order") == 0) { group->set_draw_order(ulong_value); @@ -3373,12 +3485,24 @@ yyreduce: } else if (cmp_nocase_uh(name, "portal") == 0) { group->set_portal_flag(value != 0); + } else if (cmp_nocase_uh(name, "occluder") == 0) { + group->set_occluder_flag(value != 0); + } else if (cmp_nocase_uh(name, "polylight") == 0) { group->set_polylight_flag(value != 0); } else if (cmp_nocase_uh(name, "indexed") == 0) { group->set_indexed_flag(value != 0); + } else if (cmp_nocase_uh(name, "scroll_u") == 0) { + group->set_scroll_u(value); + + } else if (cmp_nocase_uh(name, "scroll_v") == 0) { + group->set_scroll_v(value); + + } else if (cmp_nocase_uh(name, "scroll_r") == 0) { + group->set_scroll_r(value); + } else if (cmp_nocase_uh(name, "blend") == 0) { EggGroup::BlendMode blend_mode = EggGroup::string_blend_mode(strval); @@ -3433,7 +3557,9 @@ yyreduce: break; case 79: -#line 1347 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1365 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string strval = (yyvsp[(4) - (5)]._string); @@ -3448,7 +3574,9 @@ yyreduce: break; case 80: -#line 1359 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1377 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); group->set_billboard_center(LPoint3d((yyvsp[(4) - (7)]._number), (yyvsp[(5) - (7)]._number), (yyvsp[(6) - (7)]._number))); @@ -3456,7 +3584,9 @@ yyreduce: break; case 81: -#line 1364 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1382 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string name = (yyvsp[(3) - (7)]._string); @@ -3466,7 +3596,9 @@ yyreduce: break; case 82: -#line 1371 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1389 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)(yyvsp[(4) - (5)]._number); @@ -3475,7 +3607,9 @@ yyreduce: break; case 83: -#line 1377 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1395 "parser.yxx" { // The special flavor of DCS, with { sync } or { nosync }. EggGroup *group = DCAST(EggGroup, egg_stack.back()); @@ -3491,7 +3625,9 @@ yyreduce: break; case 84: -#line 1390 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1408 "parser.yxx" { // The traditional flavor of DART, with { 0 } or { 1 }. EggGroup *group = DCAST(EggGroup, egg_stack.back()); @@ -3501,7 +3637,9 @@ yyreduce: break; case 85: -#line 1397 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1415 "parser.yxx" { // The special flavor of DART, with { sync } or { nosync }. EggGroup *group = DCAST(EggGroup, egg_stack.back()); @@ -3517,7 +3655,9 @@ yyreduce: break; case 86: -#line 1410 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1428 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)(yyvsp[(4) - (5)]._number); @@ -3526,7 +3666,9 @@ yyreduce: break; case 87: -#line 1416 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1434 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string type = (yyvsp[(4) - (5)]._string); @@ -3535,7 +3677,9 @@ yyreduce: break; case 88: -#line 1422 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1440 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)(yyvsp[(4) - (5)]._number); @@ -3544,7 +3688,9 @@ yyreduce: break; case 89: -#line 1428 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1446 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); group->set_tag((yyvsp[(3) - (6)]._string), (yyvsp[(5) - (6)]._string)); @@ -3552,7 +3698,9 @@ yyreduce: break; case 90: -#line 1433 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1451 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)(yyvsp[(4) - (5)]._number); @@ -3561,7 +3709,9 @@ yyreduce: break; case 95: -#line 1443 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1461 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); if (group->get_group_type() != EggGroup::GT_instance) { @@ -3573,14 +3723,18 @@ yyreduce: break; case 96: -#line 1452 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1470 "parser.yxx" { DCAST(EggGroup, egg_stack.back())->add_child(DCAST(EggNode, (yyvsp[(2) - (2)]._egg))); } break; case 97: -#line 1466 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1484 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string strval = (yyvsp[(1) - (1)]._string); @@ -3603,7 +3757,9 @@ yyreduce: break; case 99: -#line 1497 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1515 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string strval = (yyvsp[(2) - (2)]._string); @@ -3618,7 +3774,9 @@ yyreduce: break; case 100: -#line 1519 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1537 "parser.yxx" { egg_top_transform = egg_stack.back()->as_transform(); egg_top_transform->clear_transform(); @@ -3626,7 +3784,9 @@ yyreduce: break; case 102: -#line 1535 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1553 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); if (group->get_group_type() != EggGroup::GT_joint) { @@ -3638,77 +3798,99 @@ yyreduce: break; case 117: -#line 1572 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1590 "parser.yxx" { egg_top_transform->add_translate2d(LVector2d((yyvsp[(3) - (5)]._number), (yyvsp[(4) - (5)]._number))); } break; case 118: -#line 1579 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1597 "parser.yxx" { egg_top_transform->add_translate3d(LVector3d((yyvsp[(3) - (6)]._number), (yyvsp[(4) - (6)]._number), (yyvsp[(5) - (6)]._number))); } break; case 119: -#line 1586 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1604 "parser.yxx" { egg_top_transform->add_rotate2d((yyvsp[(3) - (4)]._number)); } break; case 120: -#line 1593 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1611 "parser.yxx" { egg_top_transform->add_rotx((yyvsp[(3) - (4)]._number)); } break; case 121: -#line 1600 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1618 "parser.yxx" { egg_top_transform->add_roty((yyvsp[(3) - (4)]._number)); } break; case 122: -#line 1607 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1625 "parser.yxx" { egg_top_transform->add_rotz((yyvsp[(3) - (4)]._number)); } break; case 123: -#line 1614 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1632 "parser.yxx" { egg_top_transform->add_rotate3d((yyvsp[(3) - (7)]._number), LVector3d((yyvsp[(4) - (7)]._number), (yyvsp[(5) - (7)]._number), (yyvsp[(6) - (7)]._number))); } break; case 124: -#line 1621 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1639 "parser.yxx" { egg_top_transform->add_scale2d(LVecBase2d((yyvsp[(3) - (5)]._number), (yyvsp[(4) - (5)]._number))); } break; case 125: -#line 1628 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1646 "parser.yxx" { egg_top_transform->add_scale3d(LVecBase3d((yyvsp[(3) - (6)]._number), (yyvsp[(4) - (6)]._number), (yyvsp[(5) - (6)]._number))); } break; case 126: -#line 1635 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1653 "parser.yxx" { egg_top_transform->add_uniform_scale((yyvsp[(3) - (4)]._number)); } break; case 129: -#line 1649 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1667 "parser.yxx" { egg_top_transform->add_matrix3 (LMatrix3d((yyvsp[(1) - (9)]._number), (yyvsp[(2) - (9)]._number), (yyvsp[(3) - (9)]._number), @@ -3718,7 +3900,9 @@ yyreduce: break; case 132: -#line 1667 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1685 "parser.yxx" { egg_top_transform->add_matrix4 (LMatrix4d((yyvsp[(1) - (16)]._number), (yyvsp[(2) - (16)]._number), (yyvsp[(3) - (16)]._number), (yyvsp[(4) - (16)]._number), @@ -3729,7 +3913,9 @@ yyreduce: break; case 133: -#line 1686 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1704 "parser.yxx" { if ((yyvsp[(7) - (9)]._egg) != (EggVertexPool *)NULL) { EggVertexPool *pool = DCAST(EggVertexPool, (yyvsp[(7) - (9)]._egg)); @@ -3754,14 +3940,18 @@ yyreduce: break; case 134: -#line 1719 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1737 "parser.yxx" { (yyval._number) = 1.0; } break; case 135: -#line 1723 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1741 "parser.yxx" { string name = (yyvsp[(3) - (6)]._string); double value = (yyvsp[(5) - (6)]._number); @@ -3778,7 +3968,9 @@ yyreduce: break; case 137: -#line 1760 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1778 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); group->set_lod(EggSwitchConditionDistance((yyvsp[(3) - (11)]._number), (yyvsp[(4) - (11)]._number), LPoint3d((yyvsp[(7) - (11)]._number), (yyvsp[(8) - (11)]._number), (yyvsp[(9) - (11)]._number)))); @@ -3786,7 +3978,9 @@ yyreduce: break; case 138: -#line 1765 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1783 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); group->set_lod(EggSwitchConditionDistance((yyvsp[(3) - (12)]._number), (yyvsp[(4) - (12)]._number), LPoint3d((yyvsp[(8) - (12)]._number), (yyvsp[(9) - (12)]._number), (yyvsp[(10) - (12)]._number)), (yyvsp[(5) - (12)]._number))); @@ -3794,14 +3988,18 @@ yyreduce: break; case 139: -#line 1782 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1800 "parser.yxx" { egg_stack.push_back(new EggPolygon((yyvsp[(2) - (2)]._string))); } break; case 140: -#line 1786 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1804 "parser.yxx" { (yyval._egg) = egg_stack.back(); egg_stack.pop_back(); @@ -3809,14 +4007,18 @@ yyreduce: break; case 141: -#line 1801 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1819 "parser.yxx" { egg_stack.push_back(new EggTriangleFan((yyvsp[(2) - (2)]._string))); } break; case 142: -#line 1805 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1823 "parser.yxx" { (yyval._egg) = egg_stack.back(); egg_stack.pop_back(); @@ -3824,14 +4026,18 @@ yyreduce: break; case 143: -#line 1820 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1838 "parser.yxx" { egg_stack.push_back(new EggTriangleStrip((yyvsp[(2) - (2)]._string))); } break; case 144: -#line 1824 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1842 "parser.yxx" { (yyval._egg) = egg_stack.back(); egg_stack.pop_back(); @@ -3839,14 +4045,18 @@ yyreduce: break; case 145: -#line 1839 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1857 "parser.yxx" { egg_stack.push_back(new EggPoint((yyvsp[(2) - (2)]._string))); } break; case 146: -#line 1843 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1861 "parser.yxx" { (yyval._egg) = egg_stack.back(); egg_stack.pop_back(); @@ -3854,14 +4064,18 @@ yyreduce: break; case 147: -#line 1858 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1876 "parser.yxx" { egg_stack.push_back(new EggLine((yyvsp[(2) - (2)]._string))); } break; case 148: -#line 1862 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1880 "parser.yxx" { (yyval._egg) = egg_stack.back(); egg_stack.pop_back(); @@ -3869,14 +4083,18 @@ yyreduce: break; case 149: -#line 1877 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1895 "parser.yxx" { egg_stack.push_back(new EggNurbsSurface((yyvsp[(2) - (2)]._string))); } break; case 150: -#line 1881 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1899 "parser.yxx" { (yyval._egg) = egg_stack.back(); egg_stack.pop_back(); @@ -3884,14 +4102,18 @@ yyreduce: break; case 151: -#line 1896 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1914 "parser.yxx" { egg_stack.push_back(new EggNurbsCurve((yyvsp[(2) - (2)]._string))); } break; case 152: -#line 1900 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1918 "parser.yxx" { (yyval._egg) = egg_stack.back(); egg_stack.pop_back(); @@ -3899,7 +4121,9 @@ yyreduce: break; case 157: -#line 1930 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1948 "parser.yxx" { if (!egg_stack.back()->is_of_type(EggCompositePrimitive::get_class_type())) { eggyyerror("Not a composite primitive; components are not allowed here."); @@ -3916,7 +4140,9 @@ yyreduce: break; case 158: -#line 1944 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1962 "parser.yxx" { PT(EggPrimitive) prim = DCAST(EggPrimitive, egg_stack.back()); egg_stack.pop_back(); @@ -3926,7 +4152,9 @@ yyreduce: break; case 166: -#line 1958 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 1976 "parser.yxx" { EggPrimitive *primitive = DCAST(EggPrimitive, egg_stack.back()); string name = (yyvsp[(3) - (6)]._string); @@ -3967,6 +4195,8 @@ yyreduce: primitive->set_visibility_mode(m); } + } else if (cmp_nocase_uh(name, "depth_offset") == 0) { + primitive->set_depth_offset((int)value); } else if (cmp_nocase_uh(name, "draw_order") == 0) { primitive->set_draw_order((int)value); } else if (cmp_nocase_uh(name, "bin") == 0) { @@ -3992,7 +4222,9 @@ yyreduce: break; case 178: -#line 2042 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2062 "parser.yxx" { EggNurbsCurve *curve = DCAST(EggNurbsCurve, (yyvsp[(2) - (2)]._egg)); EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); @@ -4001,7 +4233,9 @@ yyreduce: break; case 180: -#line 2049 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2069 "parser.yxx" { EggNurbsSurface *primitive = DCAST(EggNurbsSurface, egg_stack.back()); string name = (yyvsp[(3) - (6)]._string); @@ -4042,6 +4276,8 @@ yyreduce: primitive->set_visibility_mode(m); } + } else if (cmp_nocase_uh(name, "depth_offset") == 0) { + primitive->set_depth_offset((int)value); } else if (cmp_nocase_uh(name, "draw_order") == 0) { primitive->set_draw_order((int)value); } else if (cmp_nocase_uh(name, "bin") == 0) { @@ -4057,7 +4293,9 @@ yyreduce: break; case 191: -#line 2123 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2145 "parser.yxx" { EggNurbsCurve *primitive = DCAST(EggNurbsCurve, egg_stack.back()); string name = (yyvsp[(3) - (6)]._string); @@ -4098,6 +4336,8 @@ yyreduce: primitive->set_visibility_mode(m); } + } else if (cmp_nocase_uh(name, "depth_offset") == 0) { + primitive->set_depth_offset((int)value); } else if (cmp_nocase_uh(name, "draw_order") == 0) { primitive->set_draw_order((int)value); } else if (cmp_nocase_uh(name, "bin") == 0) { @@ -4119,7 +4359,9 @@ yyreduce: break; case 192: -#line 2192 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2216 "parser.yxx" { if ((yyvsp[(1) - (1)]._egg) != (EggTexture *)NULL) { EggTexture *texture = DCAST(EggTexture, (yyvsp[(1) - (1)]._egg)); @@ -4129,7 +4371,9 @@ yyreduce: break; case 193: -#line 2209 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2233 "parser.yxx" { EggTexture *texture = NULL; @@ -4162,7 +4406,9 @@ yyreduce: break; case 194: -#line 2249 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2273 "parser.yxx" { if ((yyvsp[(1) - (1)]._egg) != (EggMaterial *)NULL) { EggMaterial *material = DCAST(EggMaterial, (yyvsp[(1) - (1)]._egg)); @@ -4172,14 +4418,18 @@ yyreduce: break; case 195: -#line 2266 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2290 "parser.yxx" { DCAST(EggPrimitive, egg_stack.back())->set_normal(Normald((yyvsp[(1) - (3)]._number), (yyvsp[(2) - (3)]._number), (yyvsp[(3) - (3)]._number))); } break; case 196: -#line 2270 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2294 "parser.yxx" { bool inserted = DCAST(EggPrimitive, egg_stack.back())->_dnormals. insert(EggMorphNormal((yyvsp[(3) - (8)]._string), LVector3d((yyvsp[(5) - (8)]._number), (yyvsp[(6) - (8)]._number), (yyvsp[(7) - (8)]._number)))).second; @@ -4190,7 +4440,9 @@ yyreduce: break; case 197: -#line 2278 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2302 "parser.yxx" { bool inserted = DCAST(EggPrimitive, egg_stack.back())->_dnormals. insert(EggMorphNormal((yyvsp[(4) - (8)]._string), LVector3d((yyvsp[(5) - (8)]._number), (yyvsp[(6) - (8)]._number), (yyvsp[(7) - (8)]._number)))).second; @@ -4201,14 +4453,18 @@ yyreduce: break; case 198: -#line 2296 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2320 "parser.yxx" { DCAST(EggPrimitive, egg_stack.back())->set_color(Colorf((yyvsp[(1) - (4)]._number), (yyvsp[(2) - (4)]._number), (yyvsp[(3) - (4)]._number), (yyvsp[(4) - (4)]._number))); } break; case 199: -#line 2300 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2324 "parser.yxx" { bool inserted = DCAST(EggPrimitive, egg_stack.back())->_drgbas. insert(EggMorphColor((yyvsp[(3) - (9)]._string), LVector4f((yyvsp[(5) - (9)]._number), (yyvsp[(6) - (9)]._number), (yyvsp[(7) - (9)]._number), (yyvsp[(8) - (9)]._number)))).second; @@ -4219,7 +4475,9 @@ yyreduce: break; case 200: -#line 2308 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2332 "parser.yxx" { bool inserted = DCAST(EggPrimitive, egg_stack.back())->_drgbas. insert(EggMorphColor((yyvsp[(4) - (9)]._string), LVector4f((yyvsp[(5) - (9)]._number), (yyvsp[(6) - (9)]._number), (yyvsp[(7) - (9)]._number), (yyvsp[(8) - (9)]._number)))).second; @@ -4230,7 +4488,9 @@ yyreduce: break; case 201: -#line 2326 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2350 "parser.yxx" { EggPrimitive *primitive = DCAST(EggPrimitive, egg_stack.back()); int value = (int)(yyvsp[(1) - (1)]._number); @@ -4239,7 +4499,9 @@ yyreduce: break; case 202: -#line 2342 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2366 "parser.yxx" { if ((yyvsp[(6) - (8)]._egg) != (EggVertexPool *)NULL) { EggVertexPool *pool = DCAST(EggVertexPool, (yyvsp[(6) - (8)]._egg)); @@ -4263,7 +4525,9 @@ yyreduce: break; case 203: -#line 2373 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2397 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); int u_order = (int)(yyvsp[(1) - (2)]._number); @@ -4274,7 +4538,9 @@ yyreduce: break; case 204: -#line 2391 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2415 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); PTA_double nums = (yyvsp[(1) - (1)]._number_list); @@ -4287,7 +4553,9 @@ yyreduce: break; case 205: -#line 2411 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2435 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); PTA_double nums = (yyvsp[(1) - (1)]._number_list); @@ -4300,7 +4568,9 @@ yyreduce: break; case 206: -#line 2431 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2455 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); nurbs->_trims.push_back(EggNurbsSurface::Trim()); @@ -4308,7 +4578,9 @@ yyreduce: break; case 208: -#line 2447 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2471 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); nassertr(!nurbs->_trims.empty(), 0); @@ -4317,7 +4589,9 @@ yyreduce: break; case 209: -#line 2453 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2477 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); nassertr(!nurbs->_trims.empty(), 0); @@ -4328,7 +4602,9 @@ yyreduce: break; case 210: -#line 2472 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2496 "parser.yxx" { EggNurbsCurve *nurbs = DCAST(EggNurbsCurve, egg_stack.back()); int order = (int)(yyvsp[(1) - (1)]._number); @@ -4337,7 +4613,9 @@ yyreduce: break; case 211: -#line 2488 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2512 "parser.yxx" { EggNurbsCurve *nurbs = DCAST(EggNurbsCurve, egg_stack.back()); PTA_double nums = (yyvsp[(1) - (1)]._number_list); @@ -4350,7 +4628,9 @@ yyreduce: break; case 212: -#line 2509 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2533 "parser.yxx" { EggTable *table = new EggTable((yyvsp[(2) - (2)]._string)); table->set_table_type(EggTable::TT_table); @@ -4359,7 +4639,9 @@ yyreduce: break; case 213: -#line 2515 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2539 "parser.yxx" { (yyval._egg) = egg_stack.back(); egg_stack.pop_back(); @@ -4368,7 +4650,9 @@ yyreduce: break; case 214: -#line 2532 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2556 "parser.yxx" { EggTable *table = new EggTable((yyvsp[(2) - (2)]._string)); table->set_table_type(EggTable::TT_bundle); @@ -4377,7 +4661,9 @@ yyreduce: break; case 215: -#line 2538 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2562 "parser.yxx" { (yyval._egg) = egg_stack.back(); egg_stack.pop_back(); @@ -4385,42 +4671,54 @@ yyreduce: break; case 217: -#line 2554 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2578 "parser.yxx" { DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, (yyvsp[(2) - (2)]._egg))); } break; case 218: -#line 2558 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2582 "parser.yxx" { DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, (yyvsp[(2) - (2)]._egg))); } break; case 219: -#line 2562 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2586 "parser.yxx" { DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, (yyvsp[(2) - (2)]._egg))); } break; case 220: -#line 2566 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2590 "parser.yxx" { DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, (yyvsp[(2) - (2)]._egg))); } break; case 221: -#line 2570 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2594 "parser.yxx" { DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, (yyvsp[(2) - (2)]._egg))); } break; case 222: -#line 2585 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2609 "parser.yxx" { EggSAnimData *anim_data = new EggSAnimData((yyvsp[(2) - (2)]._string)); egg_stack.push_back(anim_data); @@ -4428,7 +4726,9 @@ yyreduce: break; case 223: -#line 2590 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2614 "parser.yxx" { (yyval._egg) = egg_stack.back(); egg_stack.pop_back(); @@ -4436,7 +4736,9 @@ yyreduce: break; case 225: -#line 2607 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2631 "parser.yxx" { EggSAnimData *anim_data = DCAST(EggSAnimData, egg_stack.back()); string name = (yyvsp[(3) - (6)]._string); @@ -4451,14 +4753,18 @@ yyreduce: break; case 226: -#line 2619 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2643 "parser.yxx" { DCAST(EggSAnimData, egg_stack.back())->set_data((yyvsp[(4) - (5)]._number_list)); } break; case 227: -#line 2633 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2657 "parser.yxx" { EggXfmAnimData *anim_data = new EggXfmAnimData((yyvsp[(2) - (2)]._string)); egg_stack.push_back(anim_data); @@ -4466,7 +4772,9 @@ yyreduce: break; case 228: -#line 2638 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2662 "parser.yxx" { (yyval._egg) = egg_stack.back(); egg_stack.pop_back(); @@ -4474,7 +4782,9 @@ yyreduce: break; case 230: -#line 2655 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2679 "parser.yxx" { EggXfmAnimData *anim_data = DCAST(EggXfmAnimData, egg_stack.back()); string name = (yyvsp[(3) - (6)]._string); @@ -4494,14 +4804,18 @@ yyreduce: break; case 231: -#line 2672 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2696 "parser.yxx" { DCAST(EggXfmAnimData, egg_stack.back())->set_data((yyvsp[(4) - (5)]._number_list)); } break; case 232: -#line 2686 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2710 "parser.yxx" { EggXfmSAnim *anim_group = new EggXfmSAnim((yyvsp[(2) - (2)]._string)); egg_stack.push_back(anim_group); @@ -4509,7 +4823,9 @@ yyreduce: break; case 233: -#line 2691 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2715 "parser.yxx" { (yyval._egg) = egg_stack.back(); egg_stack.pop_back(); @@ -4517,7 +4833,9 @@ yyreduce: break; case 235: -#line 2708 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2732 "parser.yxx" { EggXfmSAnim *anim_group = DCAST(EggXfmSAnim, egg_stack.back()); string name = (yyvsp[(3) - (6)]._string); @@ -4535,14 +4853,18 @@ yyreduce: break; case 236: -#line 2723 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2747 "parser.yxx" { DCAST(EggXfmSAnim, egg_stack.back())->add_child(DCAST(EggNode, (yyvsp[(2) - (2)]._egg))); } break; case 237: -#line 2738 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2762 "parser.yxx" { EggAnimPreload *anim_preload = new EggAnimPreload((yyvsp[(2) - (2)]._string)); egg_stack.push_back(anim_preload); @@ -4550,7 +4872,9 @@ yyreduce: break; case 238: -#line 2743 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2767 "parser.yxx" { (yyval._egg) = egg_stack.back(); egg_stack.pop_back(); @@ -4558,7 +4882,9 @@ yyreduce: break; case 240: -#line 2760 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2784 "parser.yxx" { EggAnimPreload *anim_preload = DCAST(EggAnimPreload, egg_stack.back()); string name = (yyvsp[(3) - (6)]._string); @@ -4575,35 +4901,45 @@ yyreduce: break; case 241: -#line 2784 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2808 "parser.yxx" { (yyval._number_list) = PTA_double::empty_array(0); } break; case 242: -#line 2788 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2812 "parser.yxx" { (yyval._number_list).push_back((double)(yyvsp[(2) - (2)]._number)); } break; case 243: -#line 2802 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2826 "parser.yxx" { (yyval._number_list) = PTA_double::empty_array(0); } break; case 244: -#line 2806 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2830 "parser.yxx" { (yyval._number_list).push_back((yyvsp[(2) - (2)]._number)); } break; case 245: -#line 2820 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2844 "parser.yxx" { string name = (yyvsp[(1) - (1)]._string); Textures::iterator vpi = textures.find(name); @@ -4617,7 +4953,9 @@ yyreduce: break; case 246: -#line 2841 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2865 "parser.yxx" { string name = (yyvsp[(1) - (1)]._string); Materials::iterator vpi = materials.find(name); @@ -4631,7 +4969,9 @@ yyreduce: break; case 247: -#line 2862 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2886 "parser.yxx" { string name = (yyvsp[(1) - (1)]._string); VertexPools::iterator vpi = vertex_pools.find(name); @@ -4649,7 +4989,9 @@ yyreduce: break; case 248: -#line 2887 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2911 "parser.yxx" { string name = (yyvsp[(1) - (1)]._string); Groups::iterator vpi = groups.find(name); @@ -4663,7 +5005,9 @@ yyreduce: break; case 249: -#line 2908 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2932 "parser.yxx" { eggyyerror("Name required."); (yyval._string) = ""; @@ -4671,7 +5015,9 @@ yyreduce: break; case 252: -#line 2937 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2961 "parser.yxx" { eggyyerror("String required."); (yyval._string) = ""; @@ -4679,63 +5025,81 @@ yyreduce: break; case 254: -#line 2953 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2977 "parser.yxx" { (yyval._string) = ""; } break; case 256: -#line 2971 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2995 "parser.yxx" { (yyval._string) = (yyvsp[(1) - (1)]._string); } break; case 257: -#line 2975 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 2999 "parser.yxx" { (yyval._string) = (yyvsp[(1) - (1)]._string); } break; case 259: -#line 2992 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 3016 "parser.yxx" { (yyval._string) = ""; } break; case 260: -#line 2996 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 3020 "parser.yxx" { (yyval._string) = (yyvsp[(1) - (1)]._string); } break; case 261: -#line 3012 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 3036 "parser.yxx" { (yyval._string) = (yyvsp[(1) - (1)]._string); } break; case 262: -#line 3016 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 3040 "parser.yxx" { (yyval._string) = (yyvsp[(1) - (2)]._string) + "\n" + (yyvsp[(2) - (2)]._string); } break; case 264: -#line 3031 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 3055 "parser.yxx" { (yyval._number) = (yyvsp[(1) - (1)]._ulong); } break; case 265: -#line 3046 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 3070 "parser.yxx" { (yyval._number) = (yyvsp[(1) - (1)]._number); (yyval._ulong) = (unsigned long)(yyvsp[(1) - (1)]._number); @@ -4744,7 +5108,9 @@ yyreduce: break; case 266: -#line 3052 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 3076 "parser.yxx" { (yyval._number) = (yyvsp[(1) - (1)]._ulong); (yyval._ulong) = (yyvsp[(1) - (1)]._ulong); @@ -4753,7 +5119,9 @@ yyreduce: break; case 267: -#line 3058 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 3082 "parser.yxx" { (yyval._number) = 0.0; (yyval._ulong) = 0; @@ -4762,7 +5130,9 @@ yyreduce: break; case 268: -#line 3075 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 3099 "parser.yxx" { int i = (int)(yyvsp[(1) - (1)]._number); if ((double)i != (yyvsp[(1) - (1)]._number)) { @@ -4773,15 +5143,18 @@ yyreduce: break; case 269: -#line 3083 "parser.yxx" + +/* Line 1464 of yacc.c */ +#line 3107 "parser.yxx" { (yyval._number) = (yyvsp[(1) - (1)]._ulong); } break; -/* Line 1267 of yacc.c. */ -#line 4785 "y.tab.c" + +/* Line 1464 of yacc.c */ +#line 5158 "y.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -4792,7 +5165,6 @@ yyreduce: *++yyvsp = yyval; - /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ @@ -4857,7 +5229,7 @@ yyerrlab: if (yyerrstatus == 3) { - /* If just tried and failed to reuse look-ahead token after an + /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) @@ -4874,7 +5246,7 @@ yyerrlab: } } - /* Else will try to reuse look-ahead token after shifting the error + /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; @@ -4931,9 +5303,6 @@ yyerrlab1: YY_STACK_PRINT (yyss, yyssp); } - if (yyn == YYFINAL) - YYACCEPT; - *++yyvsp = yylval; @@ -4958,7 +5327,7 @@ yyabortlab: yyresult = 1; goto yyreturn; -#ifndef yyoverflow +#if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -4969,7 +5338,7 @@ yyexhaustedlab: #endif yyreturn: - if (yychar != YYEOF && yychar != YYEMPTY) + if (yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered diff --git a/panda/src/egg/parser.h.prebuilt b/panda/src/egg/parser.h.prebuilt index bcf13255df..1a7658b4f4 100644 --- a/panda/src/egg/parser.h.prebuilt +++ b/panda/src/egg/parser.h.prebuilt @@ -1,24 +1,22 @@ -/* A Bison parser, made by GNU Bison 2.3. */ +/* A Bison parser, made by GNU Bison 2.4.2. */ /* Skeleton interface for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify + + Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -29,10 +27,11 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ + /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE @@ -221,11 +220,11 @@ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef int YYSTYPE; + # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE eggyylval; + diff --git a/panda/src/windisplay/winGraphicsWindow.cxx b/panda/src/windisplay/winGraphicsWindow.cxx index 0826cba135..910da619ac 100644 --- a/panda/src/windisplay/winGraphicsWindow.cxx +++ b/panda/src/windisplay/winGraphicsWindow.cxx @@ -2689,9 +2689,13 @@ static HCURSOR get_cursor(const Filename &filename); //////////////////////////////////////////////////////////////////// const WinGraphicsWindow::WindowClass &WinGraphicsWindow:: register_window_class(const WindowProperties &props) { - pair found = - _window_classes.insert(WindowClass(props)); - WindowClass &wclass = (*found.first); + WindowClass wcreg(props); + ostringstream wclass_name; + wclass_name << "WinGraphicsWindow" << _window_class_index; + wcreg._name = wclass_name.str(); + + pair found = _window_classes.insert(wcreg); + const WindowClass &wclass = (*found.first); if (!found.second) { // We have already created a window class. @@ -2699,10 +2703,7 @@ register_window_class(const WindowProperties &props) { } // We have not yet created this window class. - ostringstream wclass_name; - wclass_name << "WinGraphicsWindow" << _window_class_index; _window_class_index++; - wclass._name = wclass_name.str(); WNDCLASS wc; diff --git a/pandatool/src/vrml/vrmlLexer.cxx.prebuilt b/pandatool/src/vrml/vrmlLexer.cxx.prebuilt index 9574f282f2..a1b294457a 100644 --- a/pandatool/src/vrml/vrmlLexer.cxx.prebuilt +++ b/pandatool/src/vrml/vrmlLexer.cxx.prebuilt @@ -1,4758 +1,4765 @@ -#line 2 "lex.yy.c" - -#line 4 "lex.yy.c" - -#define YY_INT_ALIGNED short int - -/* A lexical scanner generated by flex */ - -#define yy_create_buffer vrmlyy_create_buffer -#define yy_delete_buffer vrmlyy_delete_buffer -#define yy_flex_debug vrmlyy_flex_debug -#define yy_init_buffer vrmlyy_init_buffer -#define yy_flush_buffer vrmlyy_flush_buffer -#define yy_load_buffer_state vrmlyy_load_buffer_state -#define yy_switch_to_buffer vrmlyy_switch_to_buffer -#define yyin vrmlyyin -#define yyleng vrmlyyleng -#define yylex vrmlyylex -#define yylineno vrmlyylineno -#define yyout vrmlyyout -#define yyrestart vrmlyyrestart -#define yytext vrmlyytext -#define yywrap vrmlyywrap -#define yyalloc vrmlyyalloc -#define yyrealloc vrmlyyrealloc -#define yyfree vrmlyyfree - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 35 -#if YY_FLEX_SUBMINOR_VERSION > 0 -#define FLEX_BETA -#endif - -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ -#include -#include -#include -#include - -/* end standard C headers. */ - -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have . Non-C99 systems may or may not. */ - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif - -#include -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; -#endif /* ! C99 */ - -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - -#endif /* ! FLEXINT_H */ - -#ifdef __cplusplus - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define YY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef YY_USE_CONST -#define yyconst const -#else -#define yyconst -#endif - -/* Returned upon end-of-file. */ -#define YY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. - */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN (yy_start) = 1 + 2 * - -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START (((yy_start) - 1) / 2) -#define YYSTATE YY_START - -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE vrmlyyrestart(vrmlyyin ) - -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#ifndef YY_BUF_SIZE -#define YY_BUF_SIZE 16384 -#endif - -/* The state buf must be large enough to hold one state per character in the main buffer. - */ -#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) - -#ifndef YY_TYPEDEF_YY_BUFFER_STATE -#define YY_TYPEDEF_YY_BUFFER_STATE -typedef struct yy_buffer_state *YY_BUFFER_STATE; -#endif - -extern int vrmlyyleng; - -extern FILE *vrmlyyin, *vrmlyyout; - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - - #define YY_LESS_LINENO(n) - -/* Return all but the first "n" matched characters back to the input stream. */ -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up vrmlyytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - *yy_cp = (yy_hold_char); \ - YY_RESTORE_YY_MORE_OFFSET \ - (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up vrmlyytext again */ \ - } \ - while ( 0 ) - -#define unput(c) yyunput( c, (yytext_ptr) ) - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - -#ifndef YY_STRUCT_YY_BUFFER_STATE -#define YY_STRUCT_YY_BUFFER_STATE -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - yy_size_t yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - int yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - int yy_bs_lineno; /**< The line count. */ - int yy_bs_column; /**< The column count. */ - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; - -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via vrmlyyrestart()), so that the user can continue scanning by - * just pointing vrmlyyin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - - }; -#endif /* !YY_STRUCT_YY_BUFFER_STATE */ - -/* Stack of input buffers. */ -static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ -static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ -static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - * - * Returns the top of the stack, or NULL. - */ -#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ - ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ - : NULL) - -/* Same as previous macro, but useful when we know that the buffer stack is not - * NULL or when we need an lvalue. For internal use only. - */ -#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] - -/* yy_hold_char holds the character lost when vrmlyytext is formed. */ -static char yy_hold_char; -static int yy_n_chars; /* number of characters read into yy_ch_buf */ -int vrmlyyleng; - -/* Points to current character in buffer. */ -static char *yy_c_buf_p = (char *) 0; -static int yy_init = 0; /* whether we need to initialize */ -static int yy_start = 0; /* start state number */ - -/* Flag which is used to allow vrmlyywrap()'s to do buffer switches - * instead of setting up a fresh vrmlyyin. A bit of a hack ... - */ -static int yy_did_buffer_switch_on_eof; - -void vrmlyyrestart (FILE *input_file ); -void vrmlyy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); -YY_BUFFER_STATE vrmlyy_create_buffer (FILE *file,int size ); -void vrmlyy_delete_buffer (YY_BUFFER_STATE b ); -void vrmlyy_flush_buffer (YY_BUFFER_STATE b ); -void vrmlyypush_buffer_state (YY_BUFFER_STATE new_buffer ); -void vrmlyypop_buffer_state (void ); - -static void vrmlyyensure_buffer_stack (void ); -static void vrmlyy_load_buffer_state (void ); -static void vrmlyy_init_buffer (YY_BUFFER_STATE b,FILE *file ); - -#define YY_FLUSH_BUFFER vrmlyy_flush_buffer(YY_CURRENT_BUFFER ) - -YY_BUFFER_STATE vrmlyy_scan_buffer (char *base,yy_size_t size ); -YY_BUFFER_STATE vrmlyy_scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE vrmlyy_scan_bytes (yyconst char *bytes,int len ); - -void *vrmlyyalloc (yy_size_t ); -void *vrmlyyrealloc (void *,yy_size_t ); -void vrmlyyfree (void * ); - -#define yy_new_buffer vrmlyy_create_buffer - -#define yy_set_interactive(is_interactive) \ - { \ - if ( ! YY_CURRENT_BUFFER ){ \ - vrmlyyensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - vrmlyy_create_buffer(vrmlyyin,YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ - } - -#define yy_set_bol(at_bol) \ - { \ - if ( ! YY_CURRENT_BUFFER ){\ - vrmlyyensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - vrmlyy_create_buffer(vrmlyyin,YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ - } - -#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) - -typedef unsigned char YY_CHAR; - -FILE *vrmlyyin = (FILE *) 0, *vrmlyyout = (FILE *) 0; - -typedef int yy_state_type; - -extern int vrmlyylineno; - -int vrmlyylineno = 1; - -extern char *vrmlyytext; -#define yytext_ptr vrmlyytext - -static yy_state_type yy_get_previous_state (void ); -static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); -static int yy_get_next_buffer (void ); -static void yy_fatal_error (yyconst char msg[] ); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up vrmlyytext. - */ -#define YY_DO_BEFORE_ACTION \ - (yytext_ptr) = yy_bp; \ - vrmlyyleng = (size_t) (yy_cp - yy_bp); \ - (yy_hold_char) = *yy_cp; \ - *yy_cp = '\0'; \ - (yy_c_buf_p) = yy_cp; - -#define YY_NUM_RULES 48 -#define YY_END_OF_BUFFER 49 -/* This struct is not used in this scanner, - but its presence is necessary. */ -struct yy_trans_info - { - flex_int32_t yy_verify; - flex_int32_t yy_nxt; - }; -static yyconst flex_int16_t yy_accept[977] = - { 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 49, 47, 45, 46, 45, 14, - 45, 15, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 47, 47, 47, 47, 47, 47, 47, 47, - 24, 47, 47, 47, 47, 22, 22, 47, 47, 47, - 37, 35, 37, 37, 47, 47, 34, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 18, 19, 47, - - 47, 25, 47, 23, 23, 47, 47, 47, 38, 36, - 38, 38, 47, 47, 47, 47, 47, 47, 40, 40, - 41, 40, 40, 42, 47, 44, 44, 45, 45, 46, - 45, 45, 45, 14, 15, 14, 14, 7, 14, 14, - 14, 6, 14, 14, 14, 14, 0, 16, 0, 0, - 0, 0, 0, 0, 0, 0, 24, 24, 0, 0, - 0, 0, 0, 22, 22, 0, 0, 0, 0, 0, - 0, 37, 37, 37, 16, 0, 34, 34, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 25, - - 25, 0, 23, 23, 0, 0, 0, 0, 0, 0, - 38, 38, 38, 17, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, - 40, 39, 44, 44, 45, 4, 14, 14, 14, 14, - 5, 14, 14, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, - 43, 43, 0, 0, 0, 0, 43, 43, 0, 22, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 34, 0, 0, 26, 0, 0, 0, 0, - 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 25, 23, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 27, 0, 0, 0, 0, 0, 27, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 44, 45, 14, 9, 14, 14, 14, 14, - 14, 0, 20, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 43, 43, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 26, 0, 26, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 27, 0, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 45, 14, 2, - 8, 14, 14, 12, 21, 0, 0, 32, 0, 0, - 0, 0, 0, 32, 0, 0, 0, 0, 32, 0, - 0, 0, 32, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 43, 43, 43, 43, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 26, 0, 0, 26, 0, 0, - - 28, 0, 0, 0, 0, 0, 28, 0, 0, 0, - 0, 28, 0, 0, 0, 28, 0, 0, 0, 0, - 0, 28, 0, 0, 0, 0, 0, 33, 0, 0, - 0, 0, 0, 33, 0, 0, 0, 0, 33, 0, - 0, 0, 33, 0, 0, 0, 0, 0, 33, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 27, 0, 0, 27, 0, 0, 29, 0, 0, 0, - 0, 0, 29, 0, 0, 0, 0, 29, 0, 0, - - 0, 29, 0, 0, 0, 0, 0, 29, 0, 0, - 0, 45, 14, 14, 14, 14, 32, 0, 32, 0, - 32, 0, 32, 0, 32, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 28, 0, 28, - 0, 28, 0, 28, 0, 28, 0, 33, 0, 33, - 0, 33, 0, 33, 0, 33, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, - 29, 0, 29, 0, 29, 0, 29, 0, 45, 14, - - 10, 14, 14, 0, 32, 0, 0, 32, 0, 0, - 32, 0, 32, 0, 0, 32, 0, 0, 30, 0, - 0, 0, 0, 0, 30, 0, 0, 0, 0, 30, - 0, 0, 30, 0, 0, 0, 0, 0, 30, 0, - 0, 0, 0, 0, 30, 0, 0, 0, 30, 0, - 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, - 0, 0, 30, 0, 0, 0, 0, 28, 0, 0, - 28, 0, 0, 28, 0, 28, 0, 0, 28, 0, - 33, 0, 0, 33, 0, 0, 33, 0, 33, 0, - 0, 33, 0, 0, 31, 0, 0, 0, 0, 0, - - 31, 0, 0, 0, 0, 31, 0, 0, 31, 0, - 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, - 31, 0, 0, 0, 31, 0, 0, 0, 0, 0, - 31, 0, 0, 0, 0, 0, 0, 0, 31, 0, - 0, 0, 0, 29, 0, 0, 29, 0, 0, 29, - 0, 29, 0, 0, 29, 45, 14, 11, 14, 30, - 0, 30, 0, 30, 0, 30, 0, 30, 0, 30, - 0, 30, 0, 30, 0, 30, 0, 31, 0, 31, - 0, 31, 0, 31, 0, 31, 0, 31, 0, 31, - 0, 31, 0, 31, 0, 45, 14, 14, 0, 30, - - 0, 0, 30, 0, 0, 30, 0, 30, 0, 0, - 30, 0, 0, 30, 0, 30, 0, 0, 30, 0, - 0, 30, 0, 31, 0, 0, 31, 0, 0, 31, - 0, 31, 0, 0, 31, 0, 0, 31, 0, 31, - 0, 0, 31, 0, 0, 31, 45, 14, 14, 45, - 3, 14, 45, 13, 45, 45, 45, 45, 1, 1, - 45, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0 - } ; - -static yyconst flex_int32_t yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 5, 6, 7, 8, 6, 6, 6, 1, 6, - 6, 6, 9, 2, 10, 11, 6, 12, 13, 14, - 13, 13, 13, 13, 13, 15, 13, 6, 6, 6, - 6, 6, 6, 6, 16, 17, 17, 18, 19, 20, - 6, 6, 21, 6, 6, 22, 23, 24, 25, 26, - 6, 27, 28, 29, 30, 31, 6, 32, 6, 6, - 33, 34, 35, 6, 6, 6, 17, 17, 17, 36, - - 37, 38, 6, 6, 39, 6, 6, 40, 6, 41, - 42, 43, 6, 6, 44, 45, 46, 47, 6, 48, - 6, 6, 1, 6, 1, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6 - } ; - -static yyconst flex_int32_t yy_meta[49] = - { 0, - 1, 2, 3, 2, 2, 4, 5, 6, 1, 4, - 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 8, 1, 8, 7, 7, 7, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4 - } ; - -static yyconst flex_int16_t yy_base[1120] = - { 0, - 0, 7, 15, 0, 62, 90, 118, 0, 61, 74, - 89, 102, 130, 136, 142, 148, 162, 169, 174, 181, - 187, 193, 199, 205, 211, 237, 263, 289, 315, 341, - 367, 393, 427, 461, 487, 513, 539, 565, 226, 233, - 261, 278, 328, 354, 1038, 8632, 251, 0, 231, 0, - 1019, 0, 1006, 992, 985, 981, 983, 974, 972, 968, - 21, 946, 967, 954, 944, 66, 93, 599, 123, 166, - 278, 293, 635, 77, 304, 377, 319, 346, 332, 682, - 0, 8632, 391, 941, 372, 358, 404, 425, 398, 718, - 431, 437, 754, 442, 458, 790, 940, 8632, 8632, 463, - - 471, 476, 491, 497, 502, 524, 518, 826, 0, 8632, - 554, 929, 529, 551, 862, 556, 569, 898, 0, 586, - 8632, 6, 947, 8632, 607, 612, 616, 591, 935, 0, - 933, 932, 234, 0, 0, 914, 900, 0, 892, 883, - 877, 0, 886, 867, 855, 847, 857, 8632, 848, 620, - 0, 640, 934, 948, 649, 656, 661, 690, 698, 0, - 726, 962, 740, 702, 0, 737, 0, 763, 976, 990, - 770, 0, 806, 813, 0, 774, 835, 843, 873, 810, - 0, 878, 1004, 1018, 906, 882, 0, 911, 1032, 1046, - 918, 1050, 0, 1055, 1069, 1083, 1090, 8632, 1094, 1099, - - 1107, 1115, 1119, 0, 1125, 0, 1134, 1148, 1162, 1169, - 0, 1183, 1190, 0, 1187, 1224, 1192, 1260, 1274, 1199, - 1207, 1288, 1233, 1324, 1338, 1240, 0, 1304, 89, 280, - 306, 8632, 1244, 0, 271, 0, 852, 847, 839, 830, - 0, 811, 794, 792, 791, 797, 1302, 1306, 1352, 1388, - 1402, 0, 0, 1360, 1416, 1364, 1452, 1368, 1372, 1413, - 1426, 1417, 1473, 1487, 0, 0, 195, 0, 1440, 0, - 1457, 1437, 1501, 1537, 1551, 0, 0, 1509, 1565, 1513, - 1601, 1517, 1521, 1563, 1567, 1574, 1615, 0, 0, 0, - 1582, 442, 1586, 1629, 1634, 1638, 1652, 1688, 0, 0, - - 0, 1660, 1675, 1672, 1711, 1693, 1715, 1729, 1765, 0, - 0, 0, 1737, 1752, 1749, 1788, 1769, 1773, 0, 1793, - 1797, 1811, 1847, 0, 0, 0, 1819, 1834, 1831, 1870, - 1852, 1874, 1879, 1915, 0, 0, 0, 1887, 536, 1891, - 1929, 1896, 1900, 1943, 1979, 0, 0, 0, 1951, 1966, - 1963, 2002, 0, 160, 785, 0, 782, 787, 755, 755, - 760, 728, 8632, 1984, 2016, 2030, 2037, 2051, 2079, 2115, - 2129, 2059, 0, 2133, 2064, 2170, 2184, 2071, 2198, 2226, - 2262, 2276, 2290, 2087, 2095, 2326, 2362, 2376, 2412, 2426, - 2145, 2440, 2476, 2490, 2504, 2518, 2532, 2568, 2582, 2152, - - 2596, 2632, 2646, 2660, 2674, 2688, 2724, 2738, 2206, 2752, - 2788, 2802, 2816, 2830, 2210, 2218, 2844, 2880, 2894, 2930, - 2944, 2239, 2958, 2994, 3008, 3022, 3036, 119, 694, 0, - 0, 376, 652, 0, 8632, 2100, 2243, 2305, 3050, 3064, - 0, 0, 2247, 578, 2298, 3078, 3092, 3106, 3120, 3156, - 2335, 2339, 3170, 3206, 0, 0, 0, 2343, 586, 2347, - 2384, 3185, 0, 3222, 289, 560, 2389, 2393, 3269, 3305, - 3319, 0, 0, 2397, 2867, 2448, 3333, 3347, 3361, 3375, - 3411, 2453, 2457, 3425, 3461, 0, 0, 0, 2461, 3143, - 2540, 2544, 3475, 2548, 2552, 3511, 3525, 662, 2605, 2609, - - 3530, 3566, 3580, 0, 0, 2613, 663, 2617, 3594, 3608, - 3622, 3636, 3672, 2697, 2701, 3686, 3722, 0, 0, 0, - 2705, 669, 2709, 2760, 3701, 2765, 2769, 3728, 3764, 3778, - 0, 0, 2773, 709, 2852, 3792, 3806, 3820, 3834, 3870, - 2865, 2902, 3884, 3920, 0, 0, 0, 2906, 716, 2910, - 2914, 3899, 2967, 2971, 3935, 3971, 3985, 0, 0, 2975, - 3398, 2979, 3999, 4013, 4027, 4041, 4077, 3129, 3140, 4091, - 4127, 0, 0, 0, 3178, 3448, 3277, 3281, 4141, 3285, - 3289, 4177, 4191, 735, 3384, 3395, 4196, 4232, 4246, 0, - 0, 3433, 744, 3445, 4260, 4274, 4288, 4302, 4338, 3484, - - 3488, 4352, 4388, 0, 0, 0, 3492, 807, 3496, 3538, - 4367, 416, 653, 601, 560, 549, 3644, 3545, 4403, 4439, - 4453, 4489, 4503, 3652, 4539, 4575, 4589, 4625, 4639, 3694, - 4653, 4689, 4703, 4717, 4731, 4745, 4781, 4795, 4809, 4823, - 4837, 4873, 3736, 4887, 4923, 4937, 4951, 3842, 3743, 4965, - 5001, 5015, 5051, 5065, 3850, 5101, 5137, 3943, 3892, 5151, - 5187, 5201, 5237, 5251, 3951, 5287, 5323, 5337, 5373, 5387, - 4049, 5401, 5437, 5451, 5465, 5479, 5493, 5529, 5543, 5557, - 5571, 5585, 5621, 4056, 5635, 5671, 5685, 5699, 4099, 4107, - 5713, 5749, 5763, 5799, 5813, 4149, 5849, 5885, 413, 530, - - 0, 502, 501, 3549, 3656, 5899, 5913, 814, 5927, 5941, - 4325, 3747, 5955, 5969, 5983, 816, 3855, 3955, 4518, 5997, - 6011, 0, 0, 4060, 823, 4111, 6025, 6039, 6053, 6067, - 4154, 4158, 6103, 6139, 6153, 0, 0, 4162, 824, 4204, - 4208, 5080, 6167, 6181, 6195, 6231, 4213, 4217, 6245, 6281, - 0, 0, 0, 4310, 936, 4322, 4360, 5266, 4411, 6295, - 6309, 6323, 6337, 4415, 4419, 5828, 4423, 4461, 6373, 6387, - 1098, 6401, 6415, 4476, 4473, 6429, 6443, 6457, 1104, 4511, - 4547, 6471, 6485, 1149, 6499, 6513, 4562, 4559, 6527, 6541, - 6555, 1152, 4598, 4602, 6076, 6569, 6583, 0, 0, 4606, - - 1196, 4610, 6597, 6611, 6625, 6639, 4662, 4666, 6675, 6711, - 6725, 0, 0, 4670, 1205, 4674, 4753, 6648, 6739, 6753, - 6767, 6803, 4758, 4762, 6817, 6853, 0, 0, 0, 4766, - 1232, 4845, 4849, 6832, 4853, 6868, 6882, 6896, 6910, 4857, - 4895, 6919, 4899, 4903, 6955, 6969, 1261, 6983, 6997, 5038, - 4907, 7011, 7025, 7039, 1285, 246, 482, 0, 428, 5345, - 4973, 7053, 7089, 7103, 7139, 7153, 4980, 7189, 7225, 7239, - 7275, 7289, 5023, 7325, 7361, 7375, 7411, 5409, 5035, 5501, - 5073, 4985, 5109, 5114, 5121, 5593, 5159, 5164, 5171, 5210, - 5217, 5643, 5259, 5222, 5295, 633, 404, 385, 5299, 5303, - - 449, 471, 1701, 483, 509, 7425, 5307, 7461, 607, 647, - 1860, 656, 668, 7475, 5353, 7511, 682, 715, 1930, 751, - 761, 7525, 5357, 5417, 5421, 5509, 6084, 5513, 5601, 7168, - 5605, 7561, 5651, 5655, 6111, 5721, 5725, 7304, 5729, 5733, - 5771, 5775, 6203, 5779, 5783, 7434, 315, 395, 354, 263, - 0, 327, 601, 0, 726, 782, 1476, 1490, 5829, 5867, - 1604, 5872, 5877, 6127, 6221, 6261, 6268, 6355, 6273, 6360, - 6365, 6666, 6693, 6700, 6785, 8632, 7576, 7584, 7592, 7600, - 7608, 7616, 7621, 7625, 7632, 7640, 7648, 7655, 7663, 7671, - 7679, 7687, 7694, 328, 7701, 7709, 7717, 7725, 304, 7733, - - 7741, 7749, 7757, 7765, 7773, 238, 7781, 7786, 7793, 7801, - 7808, 168, 7815, 111, 7823, 7831, 83, 7839, 7847, 7855, - 7863, 7871, 7879, 7887, 7895, 7903, 7911, 7919, 7927, 7935, - 7943, 7951, 7959, 7967, 7972, 7979, 7987, 7995, 0, 8003, - 8011, 8019, 8027, 8035, 8043, 8051, 8059, 8067, 8075, 8083, - 8091, 8099, 8107, 8115, 8123, 8131, 8139, 8144, 8151, 8159, - 8167, 8175, 8183, 8191, 8199, 8207, 8215, 8223, 8231, 8239, - 8247, 8255, 8263, 8271, 8279, 8287, 8295, 8303, 8311, 8319, - 8327, 8335, 8343, 8348, 8355, 8363, 8371, 8379, 8387, 8395, - 8403, 8411, 8419, 8427, 8435, 8443, 8451, 8459, 8467, 8475, - - 8483, 8491, 8499, 8507, 8515, 8523, 8531, 8539, 8547, 8552, - 8559, 8567, 8575, 8583, 8591, 8599, 8607, 8615, 8623 - } ; - -static yyconst flex_int16_t yy_def[1120] = - { 0, - 977, 977, 976, 3, 977, 977, 977, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 978, 978, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 979, 979, 7, 7, 7, 7, 980, 980, - 980, 980, 7, 7, 976, 976, 976, 981, 982, 983, - 982, 984, 983, 983, 983, 983, 983, 983, 983, 983, - 983, 983, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 73, 976, 976, 976, 976, 976, 976, - 985, 976, 986, 985, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - - 976, 976, 976, 976, 976, 976, 976, 976, 987, 976, - 988, 987, 976, 976, 976, 976, 976, 976, 989, 989, - 976, 990, 989, 976, 976, 976, 976, 976, 982, 981, - 982, 982, 982, 983, 984, 983, 983, 983, 983, 983, - 983, 983, 983, 983, 983, 983, 976, 976, 976, 976, - 68, 68, 976, 991, 976, 976, 976, 976, 976, 74, - 74, 992, 993, 976, 994, 976, 80, 80, 976, 995, - 976, 985, 986, 986, 985, 976, 976, 976, 976, 976, - 90, 90, 976, 996, 976, 976, 93, 93, 976, 997, - 976, 976, 96, 96, 976, 998, 976, 976, 976, 976, - - 976, 976, 976, 999, 976, 108, 108, 976, 1000, 976, - 987, 1001, 1001, 987, 976, 976, 216, 976, 1002, 976, - 976, 976, 222, 976, 1003, 976, 1004, 1004, 1005, 1005, - 1005, 976, 976, 1006, 1007, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 976, 976, 976, 976, 976, 1009, - 1009, 251, 251, 251, 251, 976, 976, 976, 976, 976, - 976, 976, 1010, 1010, 264, 264, 264, 264, 1011, 1012, - 976, 976, 976, 1013, 1013, 275, 275, 275, 275, 976, - 976, 976, 976, 976, 976, 976, 996, 287, 287, 287, - 287, 287, 976, 976, 976, 976, 976, 997, 298, 298, - - 298, 298, 298, 976, 976, 976, 976, 976, 998, 309, - 309, 309, 309, 309, 976, 976, 976, 976, 1014, 976, - 976, 976, 1000, 323, 323, 323, 323, 323, 976, 976, - 976, 976, 976, 1002, 334, 334, 334, 334, 334, 976, - 976, 976, 976, 976, 1003, 345, 345, 345, 345, 345, - 976, 976, 1006, 1007, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 976, 976, 249, 976, 1015, 976, 251, 368, 976, - 1016, 251, 1017, 264, 273, 976, 1018, 976, 275, 379, - 976, 1019, 379, 976, 976, 1020, 1020, 976, 976, 1021, - 976, 1022, 1022, 976, 1023, 1022, 976, 976, 1024, 976, - - 1025, 1025, 976, 1026, 1025, 976, 976, 1027, 976, 1028, - 1028, 976, 1029, 1028, 976, 976, 1030, 1030, 976, 976, - 1031, 976, 1032, 1032, 976, 1033, 1032, 1034, 1035, 1035, - 1035, 1035, 1035, 1035, 976, 976, 976, 976, 1036, 1036, - 440, 440, 440, 440, 976, 976, 1037, 1037, 448, 1038, - 976, 976, 976, 1038, 454, 454, 454, 454, 454, 448, - 448, 449, 1039, 976, 464, 464, 976, 976, 976, 1040, - 1040, 471, 471, 471, 471, 976, 976, 1041, 1041, 479, - 1042, 976, 976, 976, 1042, 485, 485, 485, 485, 485, - 479, 479, 479, 976, 976, 1043, 1043, 497, 976, 976, - - 976, 1044, 1044, 503, 503, 503, 503, 976, 976, 1045, - 1045, 511, 1046, 976, 976, 976, 1046, 517, 517, 517, - 517, 517, 511, 511, 512, 976, 976, 976, 1047, 1047, - 530, 530, 530, 530, 976, 976, 1048, 1048, 538, 1049, - 976, 976, 976, 1049, 544, 544, 544, 544, 544, 538, - 538, 539, 976, 976, 976, 1050, 1050, 557, 557, 557, - 557, 976, 976, 1051, 1051, 565, 1052, 976, 976, 976, - 1052, 571, 571, 571, 571, 571, 565, 565, 565, 976, - 976, 1053, 1053, 583, 976, 976, 976, 1054, 1054, 589, - 589, 589, 589, 976, 976, 1055, 1055, 597, 1056, 976, - - 976, 976, 1056, 603, 603, 603, 603, 603, 597, 597, - 598, 1057, 1058, 1058, 1058, 1058, 976, 976, 1059, 1059, - 1060, 1060, 976, 976, 1061, 1061, 976, 976, 1062, 976, - 1063, 1063, 976, 1064, 1063, 1065, 1065, 976, 1066, 1065, - 976, 1064, 976, 1067, 1067, 1066, 1067, 976, 976, 1068, - 1068, 1069, 1069, 976, 976, 1070, 1070, 976, 976, 1071, - 1071, 1072, 1072, 976, 976, 1073, 1073, 976, 976, 1074, - 976, 1075, 1075, 976, 1076, 1075, 1077, 1077, 976, 1078, - 1077, 976, 1076, 976, 1079, 1079, 1078, 1079, 976, 976, - 1080, 1080, 1081, 1081, 976, 976, 1082, 1082, 1083, 1084, - - 1084, 1084, 1084, 976, 976, 1085, 1085, 707, 1086, 1086, - 710, 976, 976, 1087, 1087, 715, 976, 976, 976, 1088, - 1088, 721, 721, 721, 721, 976, 976, 1089, 1089, 729, - 976, 976, 976, 1090, 1090, 735, 735, 735, 735, 729, - 729, 730, 1091, 1091, 744, 1092, 976, 976, 976, 1092, - 750, 750, 750, 750, 750, 744, 744, 745, 976, 976, - 1093, 1093, 762, 762, 762, 763, 976, 976, 1094, 1094, - 770, 1095, 1095, 773, 976, 976, 1096, 1096, 778, 976, - 976, 1097, 1097, 783, 1098, 1098, 786, 976, 976, 1099, - 1099, 791, 976, 976, 976, 1100, 1100, 797, 797, 797, - - 797, 976, 976, 1101, 1101, 805, 976, 976, 976, 1102, - 1102, 811, 811, 811, 811, 805, 805, 806, 1103, 1103, - 820, 1104, 976, 976, 976, 1104, 826, 826, 826, 826, - 826, 820, 820, 821, 976, 976, 1105, 1105, 838, 838, - 838, 839, 976, 976, 1106, 1106, 846, 1107, 1107, 849, - 976, 976, 1108, 1108, 854, 1109, 1110, 1110, 1110, 976, - 976, 1111, 1111, 1112, 1112, 976, 976, 1113, 1113, 1114, - 1114, 976, 976, 1115, 1115, 1116, 1116, 976, 976, 797, - 797, 806, 805, 809, 976, 811, 811, 821, 820, 825, - 976, 826, 826, 839, 838, 1109, 1110, 1110, 976, 976, - - 863, 863, 863, 865, 865, 865, 976, 976, 869, 869, - 869, 871, 871, 871, 976, 976, 875, 875, 875, 877, - 877, 877, 976, 976, 797, 797, 797, 805, 805, 806, - 976, 976, 811, 811, 811, 820, 820, 821, 976, 836, - 826, 826, 826, 838, 838, 839, 1109, 1110, 1110, 1109, - 1110, 1110, 1109, 1110, 1109, 1109, 1117, 1117, 976, 1117, - 1117, 976, 976, 1118, 1117, 976, 1117, 1119, 1118, 1118, - 1118, 1119, 1119, 1119, 1119, 0, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976 - } ; - -static yyconst flex_int16_t yy_nxt[8681] = - { 0, - 976, 47, 48, 47, 47, 976, 463, 49, 47, 48, - 47, 47, 131, 231, 49, 46, 47, 48, 47, 47, - 50, 46, 51, 46, 46, 46, 52, 52, 52, 52, - 50, 50, 53, 54, 50, 55, 50, 50, 56, 50, - 57, 58, 50, 59, 60, 50, 50, 46, 46, 46, - 50, 61, 62, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 47, 48, 47, 47, 144, 145, 51, - 69, 70, 71, 71, 71, 71, 150, 151, 151, 151, - 151, 63, 64, 69, 70, 71, 71, 71, 71, 463, - 65, 47, 48, 47, 47, 131, 231, 51, 72, 46, - - 73, 74, 74, 74, 152, 152, 152, 152, 976, 63, - 64, 72, 46, 73, 74, 74, 74, 319, 65, 47, - 48, 47, 47, 612, 976, 51, 132, 66, 67, 68, - 68, 68, 68, 156, 157, 157, 157, 157, 64, 75, - 46, 76, 77, 77, 77, 75, 46, 76, 77, 77, - 77, 78, 79, 80, 80, 80, 80, 78, 79, 80, - 80, 80, 80, 47, 48, 47, 47, 132, 82, 83, - 47, 48, 47, 47, 270, 82, 83, 158, 158, 158, - 158, 428, 84, 85, 86, 87, 87, 87, 87, 84, - 85, 86, 87, 87, 87, 87, 88, 89, 90, 90, - - 90, 90, 88, 89, 90, 90, 90, 90, 91, 92, - 93, 93, 93, 93, 91, 92, 93, 93, 93, 93, - 94, 95, 96, 96, 96, 96, 374, 120, 48, 120, - 120, 97, 121, 122, 120, 48, 120, 120, 132, 121, - 122, 132, 374, 98, 353, 99, 94, 95, 96, 96, - 96, 96, 128, 132, 128, 128, 896, 97, 129, 123, - 235, 133, 120, 48, 120, 120, 123, 124, 122, 98, - 132, 99, 100, 101, 102, 102, 102, 102, 132, 120, - 48, 120, 120, 97, 124, 122, 131, 231, 156, 157, - 157, 157, 157, 354, 123, 98, 159, 99, 100, 101, - - 102, 102, 102, 102, 160, 160, 160, 160, 953, 97, - 319, 123, 131, 231, 159, 164, 164, 164, 164, 950, - 263, 98, 132, 99, 103, 46, 104, 105, 105, 105, - 164, 164, 164, 164, 270, 97, 263, 125, 46, 126, - 127, 127, 127, 168, 168, 168, 168, 98, 46, 99, - 103, 46, 104, 105, 105, 105, 166, 167, 167, 167, - 167, 97, 954, 125, 46, 126, 127, 127, 127, 178, - 178, 178, 178, 98, 46, 99, 106, 107, 108, 108, - 108, 108, 176, 177, 177, 177, 177, 97, 164, 164, - 164, 164, 131, 952, 131, 131, 614, 131, 174, 98, - - 615, 99, 106, 107, 108, 108, 108, 108, 165, 182, - 182, 182, 182, 97, 176, 177, 177, 177, 177, 951, - 132, 949, 179, 132, 165, 98, 856, 99, 47, 48, - 47, 47, 948, 110, 111, 180, 181, 181, 181, 181, - 179, 186, 187, 187, 187, 187, 699, 112, 188, 188, - 188, 188, 192, 193, 193, 193, 193, 720, 723, 98, - 387, 99, 47, 48, 47, 47, 898, 110, 111, 194, - 194, 194, 194, 199, 200, 200, 200, 200, 387, 720, - 723, 112, 201, 201, 201, 201, 199, 200, 200, 200, - 200, 470, 473, 98, 202, 99, 113, 114, 115, 115, - - 115, 115, 203, 203, 203, 203, 897, 97, 203, 203, - 203, 203, 202, 203, 203, 203, 203, 470, 473, 98, - 859, 99, 113, 114, 115, 115, 115, 115, 204, 207, - 207, 207, 207, 97, 205, 206, 206, 206, 206, 215, - 216, 216, 216, 216, 204, 98, 858, 99, 116, 117, - 118, 118, 118, 118, 418, 131, 857, 131, 131, 97, - 131, 213, 217, 217, 217, 217, 221, 222, 222, 222, - 222, 98, 418, 99, 116, 117, 118, 118, 118, 118, - 223, 223, 223, 223, 703, 97, 131, 228, 131, 228, - 228, 263, 128, 229, 128, 128, 620, 98, 129, 99, - - 153, 153, 153, 153, 626, 702, 154, 263, 132, 150, - 151, 151, 151, 151, 620, 734, 737, 155, 233, 233, - 233, 233, 626, 233, 233, 233, 233, 233, 233, 233, - 233, 152, 152, 152, 152, 155, 161, 161, 161, 161, - 132, 701, 162, 234, 947, 955, 160, 160, 160, 160, - 976, 152, 152, 152, 152, 734, 737, 256, 256, 234, - 257, 257, 257, 257, 274, 277, 163, 158, 158, 158, - 158, 156, 157, 157, 157, 157, 274, 277, 700, 159, - 387, 651, 163, 169, 169, 169, 169, 657, 616, 170, - 750, 753, 166, 167, 167, 167, 167, 159, 387, 651, - - 171, 158, 158, 158, 158, 657, 258, 258, 159, 259, - 259, 259, 259, 164, 164, 164, 164, 613, 171, 183, - 183, 183, 183, 750, 753, 184, 159, 661, 180, 181, - 181, 181, 181, 132, 667, 260, 185, 261, 262, 262, - 262, 161, 161, 161, 161, 661, 435, 162, 168, 168, - 168, 168, 667, 418, 185, 189, 189, 189, 189, 485, - 488, 190, 692, 956, 186, 187, 187, 187, 187, 485, - 488, 418, 191, 976, 168, 168, 168, 168, 280, 280, - 692, 281, 281, 281, 281, 178, 178, 178, 178, 132, - 191, 195, 195, 195, 195, 434, 957, 196, 433, 432, - - 192, 193, 193, 193, 193, 431, 430, 131, 197, 131, - 131, 429, 131, 174, 131, 363, 131, 131, 362, 131, - 174, 182, 182, 182, 182, 698, 197, 208, 208, 208, - 208, 361, 620, 209, 626, 360, 205, 206, 206, 206, - 206, 863, 869, 698, 210, 176, 177, 177, 177, 177, - 620, 359, 626, 179, 178, 178, 178, 178, 358, 863, - 869, 179, 210, 218, 218, 218, 218, 357, 356, 219, - 355, 179, 215, 216, 216, 216, 216, 246, 245, 179, - 220, 282, 282, 244, 283, 283, 283, 283, 976, 182, - 182, 182, 182, 188, 188, 188, 188, 243, 220, 224, - - 224, 224, 224, 242, 241, 225, 240, 239, 221, 222, - 222, 222, 222, 238, 293, 293, 226, 294, 294, 294, - 294, 976, 188, 188, 188, 188, 304, 304, 237, 305, - 305, 305, 305, 236, 226, 153, 153, 153, 153, 132, - 132, 154, 132, 247, 248, 249, 249, 249, 249, 251, - 153, 251, 251, 232, 875, 252, 214, 253, 254, 255, - 255, 255, 255, 264, 161, 264, 264, 198, 175, 265, - 149, 266, 875, 267, 268, 268, 268, 169, 169, 169, - 169, 148, 147, 170, 146, 271, 272, 273, 273, 273, - 273, 275, 169, 275, 275, 143, 142, 276, 141, 277, - - 278, 279, 279, 279, 279, 183, 183, 183, 183, 140, - 139, 184, 138, 284, 285, 286, 286, 286, 286, 288, - 183, 288, 288, 137, 136, 289, 132, 290, 291, 292, - 292, 292, 292, 189, 189, 189, 189, 976, 976, 190, - 976, 295, 296, 297, 297, 297, 297, 299, 189, 299, - 299, 976, 976, 300, 976, 301, 302, 303, 303, 303, - 303, 194, 194, 194, 194, 976, 194, 194, 194, 194, - 195, 195, 195, 195, 976, 976, 196, 976, 306, 307, - 308, 308, 308, 308, 310, 195, 310, 310, 976, 976, - 311, 976, 312, 313, 314, 314, 314, 314, 315, 315, - - 976, 316, 316, 316, 316, 201, 201, 201, 201, 199, - 200, 200, 200, 200, 976, 976, 651, 202, 201, 201, - 201, 201, 657, 317, 317, 202, 318, 318, 318, 318, - 203, 203, 203, 203, 651, 202, 207, 207, 207, 207, - 657, 976, 976, 202, 976, 207, 207, 207, 207, 208, - 208, 208, 208, 976, 976, 209, 976, 320, 321, 322, - 322, 322, 322, 324, 208, 324, 324, 661, 976, 325, - 667, 326, 327, 328, 328, 328, 328, 329, 329, 976, - 330, 330, 330, 330, 131, 661, 131, 131, 667, 131, - 213, 131, 976, 131, 131, 976, 131, 213, 217, 217, - - 217, 217, 976, 217, 217, 217, 217, 340, 340, 976, - 341, 341, 341, 341, 881, 131, 976, 131, 223, 223, - 223, 223, 131, 887, 131, 218, 218, 218, 218, 976, - 976, 219, 881, 976, 215, 216, 216, 216, 216, 976, - 976, 887, 220, 976, 223, 223, 223, 223, 351, 351, - 893, 352, 352, 352, 352, 233, 233, 233, 233, 976, - 220, 218, 218, 218, 218, 976, 976, 219, 893, 331, - 332, 333, 333, 333, 333, 335, 218, 335, 335, 692, - 976, 336, 976, 337, 338, 339, 339, 339, 339, 224, - 224, 224, 224, 976, 976, 225, 976, 692, 221, 222, - - 222, 222, 222, 698, 976, 228, 226, 228, 228, 976, - 976, 229, 248, 249, 249, 249, 249, 364, 364, 364, - 364, 698, 976, 976, 226, 224, 224, 224, 224, 976, - 976, 225, 976, 342, 343, 344, 344, 344, 344, 346, - 224, 346, 346, 976, 976, 347, 976, 348, 349, 350, - 350, 350, 350, 365, 365, 365, 365, 976, 976, 366, - 976, 976, 248, 249, 249, 249, 249, 976, 976, 976, - 367, 368, 368, 368, 368, 257, 257, 257, 257, 259, - 259, 259, 259, 259, 259, 259, 259, 976, 367, 251, - 153, 251, 251, 976, 976, 252, 976, 253, 254, 255, - - 255, 255, 255, 251, 153, 251, 251, 976, 976, 252, - 976, 253, 254, 255, 255, 255, 255, 369, 370, 369, - 369, 976, 976, 371, 262, 262, 262, 262, 262, 262, - 262, 262, 976, 976, 372, 976, 976, 262, 262, 262, - 262, 161, 161, 161, 161, 976, 976, 162, 375, 375, - 375, 375, 372, 153, 153, 153, 153, 373, 976, 154, - 976, 976, 976, 257, 257, 257, 257, 272, 273, 273, - 273, 273, 976, 373, 264, 161, 264, 264, 959, 960, - 265, 976, 266, 961, 267, 268, 268, 268, 264, 161, - 264, 264, 959, 960, 265, 976, 266, 961, 267, 268, - - 268, 268, 376, 376, 376, 376, 976, 976, 377, 976, - 976, 272, 273, 273, 273, 273, 976, 976, 976, 378, - 379, 379, 379, 379, 281, 281, 281, 281, 283, 283, - 283, 283, 283, 283, 283, 283, 976, 378, 275, 169, - 275, 275, 976, 976, 276, 976, 277, 278, 279, 279, - 279, 279, 275, 169, 275, 275, 976, 976, 276, 976, - 277, 278, 279, 279, 279, 279, 380, 381, 380, 380, - 976, 976, 382, 285, 286, 286, 286, 286, 384, 384, - 384, 384, 976, 383, 285, 286, 286, 286, 286, 976, - 976, 976, 385, 386, 386, 386, 386, 294, 294, 294, - - 294, 383, 169, 169, 169, 169, 959, 960, 170, 976, - 385, 961, 281, 281, 281, 281, 288, 183, 288, 288, - 976, 976, 289, 976, 290, 291, 292, 292, 292, 292, - 183, 183, 183, 183, 976, 976, 184, 976, 976, 976, - 294, 294, 294, 294, 296, 297, 297, 297, 297, 388, - 388, 388, 388, 389, 389, 389, 389, 976, 976, 390, - 976, 976, 296, 297, 297, 297, 297, 976, 976, 976, - 391, 392, 392, 392, 392, 976, 393, 394, 393, 393, - 976, 976, 395, 305, 305, 305, 305, 976, 391, 299, - 189, 299, 299, 396, 976, 300, 976, 301, 302, 303, - - 303, 303, 303, 307, 308, 308, 308, 308, 976, 720, - 723, 396, 189, 189, 189, 189, 976, 976, 190, 863, - 976, 976, 305, 305, 305, 305, 397, 397, 397, 397, - 398, 398, 398, 398, 976, 976, 399, 863, 976, 307, - 308, 308, 308, 308, 976, 976, 976, 400, 401, 401, - 401, 401, 976, 402, 403, 402, 402, 976, 976, 404, - 316, 316, 316, 316, 976, 400, 310, 195, 310, 310, - 405, 976, 311, 976, 312, 313, 314, 314, 314, 314, - 318, 318, 318, 318, 318, 318, 318, 318, 405, 195, - 195, 195, 195, 976, 976, 196, 976, 976, 976, 316, - - 316, 316, 316, 321, 322, 322, 322, 322, 406, 406, - 406, 406, 407, 407, 407, 407, 976, 976, 408, 976, - 976, 321, 322, 322, 322, 322, 976, 976, 976, 409, - 410, 410, 410, 410, 976, 411, 412, 411, 411, 976, - 976, 413, 330, 330, 330, 330, 976, 409, 324, 208, - 324, 324, 414, 976, 325, 976, 326, 327, 328, 328, - 328, 328, 332, 333, 333, 333, 333, 976, 734, 737, - 414, 208, 208, 208, 208, 976, 976, 209, 869, 976, - 976, 330, 330, 330, 330, 415, 415, 415, 415, 332, - 333, 333, 333, 333, 976, 976, 869, 416, 417, 417, - - 417, 417, 341, 341, 341, 341, 343, 344, 344, 344, - 344, 419, 419, 419, 419, 416, 335, 218, 335, 335, - 976, 976, 336, 976, 337, 338, 339, 339, 339, 339, - 218, 218, 218, 218, 976, 976, 219, 976, 750, 753, - 341, 341, 341, 341, 420, 420, 420, 420, 875, 976, - 421, 976, 976, 343, 344, 344, 344, 344, 976, 976, - 976, 422, 423, 423, 423, 423, 875, 424, 425, 424, - 424, 976, 976, 426, 352, 352, 352, 352, 976, 422, - 346, 224, 346, 346, 427, 976, 347, 976, 348, 349, - 350, 350, 350, 350, 976, 364, 364, 364, 364, 976, - - 976, 976, 427, 224, 224, 224, 224, 976, 976, 225, - 976, 976, 976, 352, 352, 352, 352, 365, 365, 365, - 365, 976, 976, 366, 976, 436, 437, 438, 438, 438, - 438, 440, 365, 440, 440, 976, 976, 441, 976, 442, - 443, 444, 444, 444, 444, 445, 445, 976, 446, 446, - 446, 446, 369, 370, 369, 369, 976, 976, 371, 976, - 976, 976, 368, 368, 368, 368, 976, 460, 461, 372, - 462, 462, 462, 462, 976, 375, 375, 375, 375, 476, - 476, 976, 477, 477, 477, 477, 976, 372, 447, 448, - 449, 449, 449, 449, 976, 976, 976, 250, 384, 384, - - 384, 384, 976, 494, 494, 385, 495, 495, 495, 495, - 437, 438, 438, 438, 438, 250, 370, 370, 370, 370, - 976, 976, 450, 385, 451, 452, 453, 453, 453, 453, - 455, 370, 455, 455, 976, 976, 456, 976, 457, 458, - 459, 459, 459, 459, 464, 465, 465, 465, 466, 466, - 466, 466, 466, 508, 508, 976, 509, 509, 509, 509, - 535, 535, 976, 536, 536, 536, 536, 976, 466, 466, - 466, 376, 376, 376, 376, 976, 976, 377, 976, 467, - 468, 469, 469, 469, 469, 471, 376, 471, 471, 976, - 976, 472, 976, 473, 474, 475, 475, 475, 475, 380, - - 381, 380, 380, 976, 976, 382, 976, 976, 976, 379, - 379, 379, 379, 976, 562, 562, 383, 563, 563, 563, - 563, 415, 415, 415, 415, 976, 580, 580, 416, 581, - 581, 581, 581, 976, 383, 478, 479, 480, 480, 480, - 480, 976, 976, 976, 274, 976, 416, 594, 594, 976, - 595, 595, 595, 595, 617, 617, 617, 617, 619, 619, - 619, 619, 274, 381, 381, 381, 381, 976, 976, 481, - 976, 482, 483, 484, 484, 484, 484, 486, 381, 486, - 486, 976, 976, 487, 976, 488, 489, 490, 490, 490, - 490, 275, 169, 275, 275, 976, 976, 276, 491, 492, - - 976, 493, 493, 493, 493, 976, 976, 976, 274, 446, - 446, 446, 446, 976, 976, 437, 438, 438, 438, 438, - 976, 976, 976, 618, 976, 976, 274, 288, 183, 288, - 288, 976, 976, 289, 976, 290, 291, 386, 386, 386, - 386, 618, 976, 976, 387, 452, 453, 453, 453, 453, - 623, 623, 623, 623, 625, 625, 625, 625, 462, 462, - 462, 462, 387, 288, 183, 288, 288, 976, 976, 289, - 496, 497, 291, 498, 498, 498, 498, 389, 389, 389, - 389, 976, 976, 390, 976, 976, 976, 388, 388, 388, - 388, 976, 976, 976, 391, 462, 462, 462, 462, 468, - - 469, 469, 469, 469, 627, 627, 627, 627, 631, 631, - 631, 631, 391, 389, 389, 389, 389, 976, 976, 390, - 976, 499, 500, 501, 501, 501, 501, 503, 389, 503, - 503, 976, 976, 504, 976, 505, 506, 507, 507, 507, - 507, 393, 394, 393, 393, 976, 976, 395, 976, 301, - 302, 392, 392, 392, 392, 976, 976, 976, 396, 477, - 477, 477, 477, 483, 484, 484, 484, 484, 641, 641, - 641, 641, 644, 644, 644, 644, 396, 393, 394, 393, - 393, 976, 976, 395, 976, 510, 511, 512, 512, 512, - 512, 394, 394, 394, 394, 976, 976, 513, 976, 514, - - 515, 516, 516, 516, 516, 518, 394, 518, 518, 976, - 976, 519, 976, 520, 521, 522, 522, 522, 522, 299, - 189, 299, 299, 976, 976, 300, 523, 524, 302, 525, - 525, 525, 525, 398, 398, 398, 398, 976, 976, 399, - 976, 976, 976, 397, 397, 397, 397, 976, 976, 976, - 400, 493, 493, 493, 493, 493, 493, 493, 493, 495, - 495, 495, 495, 495, 495, 495, 495, 976, 400, 398, - 398, 398, 398, 976, 976, 399, 976, 526, 527, 528, - 528, 528, 528, 530, 398, 530, 530, 976, 976, 531, - 976, 532, 533, 534, 534, 534, 534, 402, 403, 402, - - 402, 976, 976, 404, 976, 312, 313, 401, 401, 401, - 401, 976, 976, 976, 405, 500, 501, 501, 501, 501, - 648, 648, 648, 648, 650, 650, 650, 650, 509, 509, - 509, 509, 405, 402, 403, 402, 402, 976, 976, 404, - 976, 537, 538, 539, 539, 539, 539, 403, 403, 403, - 403, 976, 976, 540, 976, 541, 542, 543, 543, 543, - 543, 545, 403, 545, 545, 976, 976, 546, 976, 547, - 548, 549, 549, 549, 549, 310, 195, 310, 310, 976, - 976, 311, 550, 551, 313, 552, 552, 552, 552, 407, - 407, 407, 407, 976, 976, 408, 976, 976, 976, 406, - - 406, 406, 406, 976, 976, 976, 409, 515, 516, 516, - 516, 516, 654, 654, 654, 654, 656, 656, 656, 656, - 525, 525, 525, 525, 409, 407, 407, 407, 407, 976, - 976, 408, 976, 553, 554, 555, 555, 555, 555, 557, - 407, 557, 557, 976, 976, 558, 976, 559, 560, 561, - 561, 561, 561, 411, 412, 411, 411, 976, 976, 413, - 976, 326, 327, 410, 410, 410, 410, 976, 976, 976, - 414, 525, 525, 525, 525, 527, 528, 528, 528, 528, - 658, 658, 658, 658, 660, 660, 660, 660, 414, 411, - 412, 411, 411, 976, 976, 413, 976, 564, 565, 566, - - 566, 566, 566, 412, 412, 412, 412, 976, 976, 567, - 976, 568, 569, 570, 570, 570, 570, 572, 412, 572, - 572, 976, 976, 573, 976, 574, 575, 576, 576, 576, - 576, 324, 208, 324, 324, 976, 976, 325, 577, 578, - 327, 579, 579, 579, 579, 335, 218, 335, 335, 976, - 976, 336, 976, 337, 338, 417, 417, 417, 417, 976, - 976, 976, 418, 536, 536, 536, 536, 976, 632, 633, - 632, 632, 976, 976, 634, 542, 543, 543, 543, 543, - 418, 335, 218, 335, 335, 635, 976, 336, 582, 583, - 338, 584, 584, 584, 584, 420, 420, 420, 420, 976, - - 976, 421, 976, 635, 976, 419, 419, 419, 419, 976, - 976, 976, 422, 664, 664, 664, 664, 666, 666, 666, - 666, 552, 552, 552, 552, 552, 552, 552, 552, 976, - 422, 420, 420, 420, 420, 976, 976, 421, 976, 585, - 586, 587, 587, 587, 587, 589, 420, 589, 589, 976, - 976, 590, 976, 591, 592, 593, 593, 593, 593, 424, - 425, 424, 424, 976, 976, 426, 976, 348, 349, 423, - 423, 423, 423, 976, 976, 976, 427, 554, 555, 555, - 555, 555, 668, 668, 668, 668, 672, 672, 672, 672, - 563, 563, 563, 563, 427, 424, 425, 424, 424, 976, - - 976, 426, 976, 596, 597, 598, 598, 598, 598, 425, - 425, 425, 425, 976, 976, 599, 976, 600, 601, 602, - 602, 602, 602, 604, 425, 604, 604, 976, 976, 605, - 976, 606, 607, 608, 608, 608, 608, 346, 224, 346, - 346, 976, 976, 347, 609, 610, 349, 611, 611, 611, - 611, 440, 365, 440, 440, 976, 976, 441, 976, 442, - 443, 444, 444, 444, 444, 440, 365, 440, 440, 976, - 976, 441, 976, 442, 443, 444, 444, 444, 444, 365, - 365, 365, 365, 976, 976, 366, 976, 976, 976, 446, - 446, 446, 446, 251, 153, 251, 251, 976, 976, 252, - - 976, 253, 448, 449, 449, 449, 449, 251, 153, 251, - 251, 976, 976, 252, 976, 253, 254, 621, 621, 621, - 621, 369, 370, 369, 369, 976, 976, 371, 976, 976, - 448, 449, 449, 449, 449, 976, 976, 976, 622, 569, - 570, 570, 570, 570, 645, 638, 645, 645, 976, 976, - 646, 682, 682, 682, 682, 976, 622, 455, 370, 455, - 455, 647, 976, 456, 976, 457, 458, 459, 459, 459, - 459, 365, 365, 365, 365, 976, 976, 366, 976, 647, - 452, 453, 453, 453, 453, 976, 976, 976, 624, 685, - 685, 685, 685, 976, 976, 254, 462, 462, 462, 462, - - 976, 976, 976, 372, 976, 976, 624, 455, 370, 455, - 455, 976, 976, 456, 976, 457, 458, 459, 459, 459, - 459, 372, 263, 264, 161, 264, 264, 263, 263, 265, - 263, 266, 263, 464, 465, 465, 465, 466, 466, 466, - 466, 466, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 374, 263, 263, 263, 466, 466, 466, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 374, - 628, 628, 628, 628, 976, 976, 629, 976, 976, 468, - 469, 469, 469, 469, 976, 976, 976, 630, 579, 579, - 579, 579, 579, 579, 579, 579, 581, 581, 581, 581, - - 581, 581, 581, 581, 976, 630, 471, 376, 471, 471, - 976, 976, 472, 976, 473, 474, 475, 475, 475, 475, - 471, 376, 471, 471, 976, 976, 472, 976, 473, 474, - 475, 475, 475, 475, 376, 376, 376, 376, 976, 976, - 377, 976, 976, 976, 477, 477, 477, 477, 275, 169, - 275, 275, 976, 976, 276, 976, 277, 479, 480, 480, - 480, 480, 275, 169, 275, 275, 976, 976, 276, 976, - 277, 278, 636, 636, 636, 636, 637, 638, 637, 637, - 976, 976, 639, 976, 976, 479, 480, 480, 480, 480, - 976, 976, 976, 640, 586, 587, 587, 587, 587, 673, - - 674, 673, 673, 976, 976, 675, 689, 689, 689, 689, - 976, 640, 486, 381, 486, 486, 676, 976, 487, 976, - 488, 489, 490, 490, 490, 490, 633, 633, 633, 633, - 976, 976, 642, 976, 676, 483, 484, 484, 484, 484, - 976, 976, 976, 643, 691, 691, 691, 691, 976, 686, - 679, 686, 686, 976, 976, 687, 595, 595, 595, 595, - 976, 643, 486, 381, 486, 486, 688, 976, 487, 976, - 488, 489, 490, 490, 490, 490, 380, 381, 380, 380, - 976, 976, 382, 976, 688, 976, 493, 493, 493, 493, - 976, 976, 976, 383, 601, 602, 602, 602, 602, 695, - - 695, 695, 695, 697, 697, 697, 697, 611, 611, 611, - 611, 383, 288, 183, 288, 288, 976, 976, 289, 976, - 290, 291, 498, 498, 498, 498, 288, 183, 288, 288, - 976, 976, 289, 976, 290, 291, 498, 498, 498, 498, - 500, 501, 501, 501, 501, 976, 976, 976, 649, 611, - 611, 611, 611, 704, 704, 976, 705, 705, 705, 705, - 705, 705, 705, 705, 976, 976, 649, 503, 389, 503, - 503, 976, 976, 504, 976, 505, 506, 507, 507, 507, - 507, 503, 389, 503, 503, 976, 976, 504, 976, 505, - 506, 507, 507, 507, 507, 389, 389, 389, 389, 976, - - 976, 390, 976, 976, 976, 509, 509, 509, 509, 299, - 189, 299, 299, 976, 976, 300, 976, 301, 511, 512, - 512, 512, 512, 299, 189, 299, 299, 976, 976, 300, - 976, 301, 302, 652, 652, 652, 652, 393, 394, 393, - 393, 976, 976, 395, 976, 976, 511, 512, 512, 512, - 512, 976, 976, 976, 653, 617, 617, 617, 617, 976, - 712, 712, 618, 713, 713, 713, 713, 705, 705, 705, - 705, 976, 653, 518, 394, 518, 518, 976, 976, 519, - 618, 520, 521, 522, 522, 522, 522, 389, 389, 389, - 389, 976, 976, 390, 976, 976, 515, 516, 516, 516, - - 516, 976, 726, 726, 655, 727, 727, 727, 727, 976, - 976, 302, 525, 525, 525, 525, 976, 976, 976, 396, - 976, 976, 655, 518, 394, 518, 518, 976, 976, 519, - 976, 520, 521, 522, 522, 522, 522, 396, 527, 528, - 528, 528, 528, 976, 759, 759, 659, 760, 760, 760, - 760, 767, 767, 976, 768, 768, 768, 768, 713, 713, - 713, 713, 976, 976, 659, 530, 398, 530, 530, 976, - 976, 531, 976, 532, 533, 534, 534, 534, 534, 530, - 398, 530, 530, 976, 976, 531, 976, 532, 533, 534, - 534, 534, 534, 398, 398, 398, 398, 976, 976, 399, - - 976, 976, 976, 536, 536, 536, 536, 310, 195, 310, - 310, 976, 976, 311, 976, 312, 538, 539, 539, 539, - 539, 310, 195, 310, 310, 976, 976, 311, 976, 312, - 313, 662, 662, 662, 662, 402, 403, 402, 402, 976, - 976, 404, 976, 976, 538, 539, 539, 539, 539, 976, - 976, 976, 663, 648, 648, 648, 648, 976, 775, 775, - 649, 776, 776, 776, 776, 718, 719, 719, 719, 719, - 663, 545, 403, 545, 545, 976, 976, 546, 649, 547, - 548, 549, 549, 549, 549, 398, 398, 398, 398, 976, - 976, 399, 976, 976, 542, 543, 543, 543, 543, 976, - - 780, 780, 665, 781, 781, 781, 781, 976, 976, 313, - 552, 552, 552, 552, 976, 976, 976, 405, 976, 976, - 665, 545, 403, 545, 545, 976, 976, 546, 976, 547, - 548, 549, 549, 549, 549, 405, 669, 669, 669, 669, - 976, 976, 670, 976, 976, 554, 555, 555, 555, 555, - 976, 976, 976, 671, 658, 658, 658, 658, 976, 788, - 788, 659, 789, 789, 789, 789, 860, 860, 860, 860, - 976, 671, 557, 407, 557, 557, 976, 976, 558, 659, - 559, 560, 561, 561, 561, 561, 557, 407, 557, 557, - 976, 976, 558, 976, 559, 560, 561, 561, 561, 561, - - 407, 407, 407, 407, 976, 976, 408, 976, 976, 976, - 563, 563, 563, 563, 324, 208, 324, 324, 976, 976, - 325, 976, 326, 565, 566, 566, 566, 566, 324, 208, - 324, 324, 976, 976, 325, 976, 326, 327, 677, 677, - 677, 677, 678, 679, 678, 678, 976, 976, 680, 976, - 976, 565, 566, 566, 566, 566, 976, 802, 802, 681, - 803, 803, 803, 803, 835, 835, 976, 836, 836, 836, - 836, 862, 862, 862, 862, 976, 976, 681, 572, 412, - 572, 572, 976, 976, 573, 976, 574, 575, 576, 576, - 576, 576, 674, 674, 674, 674, 976, 976, 683, 976, - - 976, 569, 570, 570, 570, 570, 976, 976, 976, 684, - 689, 689, 689, 689, 976, 843, 843, 690, 844, 844, - 844, 844, 727, 727, 727, 727, 976, 684, 572, 412, - 572, 572, 976, 976, 573, 690, 574, 575, 576, 576, - 576, 576, 411, 412, 411, 411, 976, 976, 413, 976, - 976, 976, 579, 579, 579, 579, 976, 851, 851, 414, - 852, 852, 852, 852, 732, 733, 733, 733, 733, 866, - 866, 866, 866, 868, 868, 868, 868, 414, 335, 218, - 335, 335, 976, 976, 336, 976, 337, 338, 584, 584, - 584, 584, 335, 218, 335, 335, 976, 976, 336, 976, - - 337, 338, 584, 584, 584, 584, 586, 587, 587, 587, - 587, 976, 976, 976, 690, 742, 742, 742, 742, 742, - 742, 742, 742, 748, 749, 749, 749, 749, 872, 872, - 872, 872, 690, 589, 420, 589, 589, 976, 976, 590, - 976, 591, 592, 593, 593, 593, 593, 589, 420, 589, - 589, 976, 976, 590, 976, 591, 592, 593, 593, 593, - 593, 420, 420, 420, 420, 976, 976, 421, 976, 976, - 976, 595, 595, 595, 595, 346, 224, 346, 346, 976, - 976, 347, 976, 348, 597, 598, 598, 598, 598, 346, - 224, 346, 346, 976, 976, 347, 976, 348, 349, 693, - - 693, 693, 693, 424, 425, 424, 424, 976, 976, 426, - 976, 976, 597, 598, 598, 598, 598, 976, 976, 976, - 694, 874, 874, 874, 874, 976, 369, 370, 369, 369, - 976, 976, 371, 758, 758, 758, 758, 976, 694, 604, - 425, 604, 604, 372, 976, 605, 976, 606, 607, 608, - 608, 608, 608, 420, 420, 420, 420, 976, 976, 421, - 976, 372, 601, 602, 602, 602, 602, 976, 976, 976, - 696, 758, 758, 758, 758, 976, 976, 349, 611, 611, - 611, 611, 976, 976, 976, 427, 976, 976, 696, 604, - 425, 604, 604, 976, 976, 605, 976, 606, 607, 608, - - 608, 608, 608, 427, 440, 365, 440, 440, 976, 976, - 441, 976, 442, 443, 619, 619, 619, 619, 976, 976, - 976, 620, 760, 760, 760, 760, 766, 766, 766, 766, - 766, 766, 766, 766, 768, 768, 768, 768, 976, 620, - 440, 365, 440, 440, 976, 976, 441, 706, 707, 443, - 708, 708, 708, 708, 369, 370, 369, 369, 976, 976, - 371, 976, 253, 254, 621, 621, 621, 621, 976, 976, - 976, 622, 768, 768, 768, 768, 976, 393, 394, 393, - 393, 976, 976, 395, 776, 776, 776, 776, 976, 622, - 251, 153, 251, 251, 396, 976, 252, 709, 710, 254, - - 711, 711, 711, 711, 365, 365, 365, 365, 976, 976, - 366, 976, 396, 976, 623, 623, 623, 623, 976, 976, - 976, 624, 781, 781, 781, 781, 976, 976, 718, 719, - 719, 719, 719, 976, 976, 976, 861, 976, 976, 624, - 455, 370, 455, 455, 976, 976, 456, 976, 457, 458, - 625, 625, 625, 625, 861, 976, 976, 626, 781, 781, - 781, 781, 976, 402, 403, 402, 402, 976, 976, 404, - 789, 789, 789, 789, 976, 626, 455, 370, 455, 455, - 405, 976, 456, 714, 715, 458, 716, 716, 716, 716, - 628, 628, 628, 628, 976, 976, 629, 976, 405, 976, - - 627, 627, 627, 627, 976, 976, 976, 630, 794, 795, - 795, 795, 795, 878, 878, 878, 878, 880, 880, 880, - 880, 803, 803, 803, 803, 630, 628, 628, 628, 628, - 976, 976, 629, 976, 717, 718, 719, 719, 719, 719, - 721, 628, 721, 721, 976, 976, 722, 976, 723, 724, - 725, 725, 725, 725, 632, 633, 632, 632, 976, 976, - 634, 976, 473, 474, 631, 631, 631, 631, 976, 976, - 976, 635, 808, 809, 809, 809, 809, 884, 884, 884, - 884, 886, 886, 886, 886, 818, 818, 818, 818, 635, - 632, 633, 632, 632, 976, 976, 634, 976, 728, 729, - - 730, 730, 730, 730, 633, 633, 633, 633, 976, 976, - 642, 976, 731, 732, 733, 733, 733, 733, 735, 633, - 735, 735, 976, 976, 736, 976, 737, 738, 739, 739, - 739, 739, 471, 376, 471, 471, 976, 976, 472, 740, - 741, 474, 742, 742, 742, 742, 637, 638, 637, 637, - 976, 976, 639, 976, 277, 278, 636, 636, 636, 636, - 976, 976, 976, 640, 818, 818, 818, 818, 824, 825, - 825, 825, 825, 890, 890, 890, 890, 892, 892, 892, - 892, 640, 637, 638, 637, 637, 976, 976, 639, 976, - 743, 744, 745, 745, 745, 745, 638, 638, 638, 638, - - 976, 976, 746, 976, 747, 748, 749, 749, 749, 749, - 751, 638, 751, 751, 976, 976, 752, 976, 753, 754, - 755, 755, 755, 755, 275, 169, 275, 275, 976, 976, - 276, 756, 757, 278, 758, 758, 758, 758, 633, 633, - 633, 633, 976, 976, 642, 976, 976, 976, 641, 641, - 641, 641, 976, 976, 976, 643, 834, 834, 834, 834, - 834, 834, 834, 834, 836, 836, 836, 836, 842, 842, - 842, 842, 976, 643, 735, 633, 735, 735, 976, 976, - 736, 976, 737, 738, 739, 739, 739, 739, 645, 638, - 645, 645, 976, 976, 646, 976, 488, 489, 644, 644, - - 644, 644, 976, 976, 976, 647, 842, 842, 842, 842, - 844, 844, 844, 844, 844, 844, 844, 844, 852, 852, - 852, 852, 976, 647, 645, 638, 645, 645, 976, 976, - 646, 976, 761, 762, 763, 763, 763, 763, 751, 638, - 751, 751, 976, 976, 752, 976, 753, 754, 755, 755, - 755, 755, 486, 381, 486, 486, 976, 976, 487, 764, - 765, 489, 766, 766, 766, 766, 503, 389, 503, 503, - 976, 976, 504, 976, 505, 506, 650, 650, 650, 650, - 976, 899, 899, 651, 900, 900, 900, 900, 907, 907, - 976, 908, 908, 908, 908, 560, 882, 882, 882, 882, - - 976, 651, 503, 389, 503, 503, 976, 976, 504, 769, - 770, 506, 771, 771, 771, 771, 393, 394, 393, 393, - 976, 976, 395, 976, 301, 302, 652, 652, 652, 652, - 976, 915, 915, 653, 916, 916, 916, 916, 976, 424, - 425, 424, 424, 923, 923, 426, 924, 924, 924, 924, - 976, 653, 299, 189, 299, 299, 427, 976, 300, 772, - 773, 302, 774, 774, 774, 774, 389, 389, 389, 389, - 976, 976, 390, 976, 427, 976, 654, 654, 654, 654, - 976, 925, 926, 655, 927, 927, 927, 927, 976, 976, - 474, 742, 742, 742, 742, 976, 976, 976, 635, 976, - - 976, 655, 518, 394, 518, 518, 976, 976, 519, 976, - 520, 521, 656, 656, 656, 656, 635, 928, 929, 657, - 930, 930, 930, 930, 976, 884, 884, 884, 884, 931, - 931, 976, 932, 932, 932, 932, 976, 657, 518, 394, - 518, 518, 976, 976, 519, 777, 778, 521, 779, 779, - 779, 779, 530, 398, 530, 530, 976, 976, 531, 976, - 532, 533, 660, 660, 660, 660, 976, 933, 934, 661, - 935, 935, 935, 935, 327, 888, 888, 888, 888, 936, - 937, 976, 938, 938, 938, 938, 976, 661, 530, 398, - 530, 530, 976, 976, 531, 782, 783, 533, 784, 784, - - 784, 784, 402, 403, 402, 402, 976, 976, 404, 976, - 312, 313, 662, 662, 662, 662, 976, 976, 976, 663, - 976, 890, 890, 890, 890, 939, 939, 976, 940, 940, - 940, 940, 575, 894, 894, 894, 894, 663, 310, 195, - 310, 310, 976, 976, 311, 785, 786, 313, 787, 787, - 787, 787, 398, 398, 398, 398, 976, 976, 399, 976, - 976, 976, 664, 664, 664, 664, 976, 941, 942, 665, - 943, 943, 943, 943, 976, 976, 278, 758, 758, 758, - 758, 976, 976, 976, 383, 976, 976, 665, 545, 403, - 545, 545, 976, 976, 546, 976, 547, 548, 666, 666, - - 666, 666, 383, 944, 945, 667, 946, 946, 946, 946, - 900, 900, 900, 900, 900, 900, 900, 900, 908, 908, - 908, 908, 976, 667, 545, 403, 545, 545, 976, 976, - 546, 790, 791, 548, 792, 792, 792, 792, 669, 669, - 669, 669, 976, 976, 670, 976, 976, 976, 668, 668, - 668, 668, 976, 976, 976, 671, 860, 860, 860, 860, - 976, 976, 976, 861, 916, 916, 916, 916, 924, 924, - 924, 924, 976, 671, 669, 669, 669, 669, 976, 976, - 670, 861, 793, 794, 795, 795, 795, 795, 797, 669, - 797, 797, 976, 976, 798, 976, 799, 800, 801, 801, - - 801, 801, 673, 674, 673, 673, 976, 976, 675, 976, - 559, 560, 672, 672, 672, 672, 976, 976, 976, 676, - 878, 878, 878, 878, 976, 976, 976, 879, 924, 924, - 924, 924, 927, 927, 927, 927, 976, 676, 673, 674, - 673, 673, 976, 976, 675, 879, 804, 805, 806, 806, - 806, 806, 674, 674, 674, 674, 976, 976, 683, 976, - 807, 808, 809, 809, 809, 809, 811, 674, 811, 811, - 976, 976, 812, 976, 813, 814, 815, 815, 815, 815, - 557, 407, 557, 557, 976, 976, 558, 816, 817, 560, - 818, 818, 818, 818, 678, 679, 678, 678, 976, 976, - - 680, 976, 326, 327, 677, 677, 677, 677, 976, 976, - 976, 681, 880, 880, 880, 880, 976, 976, 976, 881, - 927, 927, 927, 927, 930, 930, 930, 930, 976, 681, - 678, 679, 678, 678, 976, 976, 680, 881, 819, 820, - 821, 821, 821, 821, 679, 679, 679, 679, 976, 976, - 822, 976, 823, 824, 825, 825, 825, 825, 827, 679, - 827, 827, 976, 976, 828, 976, 829, 830, 831, 831, - 831, 831, 324, 208, 324, 324, 976, 976, 325, 832, - 833, 327, 834, 834, 834, 834, 674, 674, 674, 674, - 976, 976, 683, 976, 976, 976, 682, 682, 682, 682, - - 976, 976, 976, 684, 886, 886, 886, 886, 976, 976, - 976, 887, 930, 930, 930, 930, 932, 932, 932, 932, - 976, 684, 811, 674, 811, 811, 976, 976, 812, 887, - 813, 814, 815, 815, 815, 815, 686, 679, 686, 686, - 976, 976, 687, 976, 574, 575, 685, 685, 685, 685, - 976, 976, 976, 688, 892, 892, 892, 892, 976, 976, - 976, 893, 935, 935, 935, 935, 935, 935, 935, 935, - 976, 688, 686, 679, 686, 686, 976, 976, 687, 893, - 837, 838, 839, 839, 839, 839, 827, 679, 827, 827, - 976, 976, 828, 976, 829, 830, 831, 831, 831, 831, - - 572, 412, 572, 572, 976, 976, 573, 840, 841, 575, - 842, 842, 842, 842, 589, 420, 589, 589, 976, 976, - 590, 976, 591, 592, 691, 691, 691, 691, 976, 976, - 976, 692, 938, 938, 938, 938, 938, 938, 938, 938, - 940, 940, 940, 940, 940, 940, 940, 940, 976, 692, - 589, 420, 589, 589, 976, 976, 590, 845, 846, 592, - 847, 847, 847, 847, 424, 425, 424, 424, 976, 976, - 426, 976, 348, 349, 693, 693, 693, 693, 976, 976, - 976, 694, 943, 943, 943, 943, 943, 943, 943, 943, - 946, 946, 946, 946, 946, 946, 946, 946, 976, 694, - - 346, 224, 346, 346, 976, 976, 347, 848, 849, 349, - 850, 850, 850, 850, 420, 420, 420, 420, 976, 976, - 421, 976, 976, 976, 695, 695, 695, 695, 976, 976, - 962, 696, 963, 962, 976, 976, 964, 976, 489, 766, - 766, 766, 766, 976, 976, 976, 647, 976, 976, 696, - 604, 425, 604, 604, 976, 976, 605, 976, 606, 607, - 697, 697, 697, 697, 647, 976, 976, 698, 965, 966, - 967, 965, 976, 962, 968, 962, 962, 976, 962, 964, - 962, 962, 976, 976, 964, 698, 604, 425, 604, 604, - 976, 976, 605, 853, 854, 607, 855, 855, 855, 855, - - 440, 365, 440, 440, 976, 976, 441, 976, 442, 443, - 708, 708, 708, 708, 440, 365, 440, 440, 976, 976, - 441, 976, 442, 443, 708, 708, 708, 708, 251, 153, - 251, 251, 976, 976, 252, 976, 253, 254, 711, 711, - 711, 711, 251, 153, 251, 251, 976, 976, 252, 976, - 253, 254, 711, 711, 711, 711, 365, 365, 365, 365, - 976, 976, 366, 976, 976, 976, 713, 713, 713, 713, - 455, 370, 455, 455, 976, 976, 456, 976, 457, 458, - 716, 716, 716, 716, 455, 370, 455, 455, 976, 976, - 456, 976, 457, 458, 716, 716, 716, 716, 721, 628, - - 721, 721, 976, 976, 722, 976, 723, 724, 725, 725, - 725, 725, 721, 628, 721, 721, 976, 976, 722, 976, - 723, 724, 725, 725, 725, 725, 628, 628, 628, 628, - 976, 976, 629, 976, 976, 976, 727, 727, 727, 727, - 471, 376, 471, 471, 976, 976, 472, 976, 473, 729, - 730, 730, 730, 730, 471, 376, 471, 471, 976, 976, - 472, 976, 473, 474, 864, 864, 864, 864, 632, 633, - 632, 632, 976, 976, 634, 976, 976, 729, 730, 730, - 730, 730, 976, 976, 976, 865, 794, 795, 795, 795, - 795, 976, 976, 976, 879, 927, 927, 927, 927, 976, - - 976, 976, 881, 865, 628, 628, 628, 628, 976, 976, - 629, 976, 879, 732, 733, 733, 733, 733, 976, 976, - 881, 867, 935, 935, 935, 935, 976, 976, 970, 887, - 970, 970, 976, 976, 971, 976, 976, 976, 976, 867, - 735, 633, 735, 735, 976, 976, 736, 887, 737, 738, - 739, 739, 739, 739, 735, 633, 735, 735, 976, 976, - 736, 976, 737, 738, 739, 739, 739, 739, 275, 169, - 275, 275, 976, 976, 276, 976, 277, 744, 745, 745, - 745, 745, 275, 169, 275, 275, 976, 976, 276, 976, - 277, 278, 870, 870, 870, 870, 637, 638, 637, 637, - - 976, 976, 639, 976, 976, 744, 745, 745, 745, 745, - 976, 976, 976, 871, 943, 943, 943, 943, 976, 976, - 976, 893, 965, 959, 967, 965, 976, 976, 968, 976, - 976, 871, 751, 638, 751, 751, 976, 976, 752, 893, - 753, 754, 755, 755, 755, 755, 633, 633, 633, 633, - 976, 976, 642, 976, 976, 748, 749, 749, 749, 749, - 976, 976, 962, 873, 963, 962, 976, 976, 964, 965, - 966, 967, 965, 976, 970, 968, 970, 970, 976, 976, - 971, 873, 751, 638, 751, 751, 976, 976, 752, 976, - 753, 754, 755, 755, 755, 755, 633, 633, 633, 633, - - 976, 976, 642, 976, 976, 976, 760, 760, 760, 760, - 486, 381, 486, 486, 976, 976, 487, 976, 488, 762, - 763, 763, 763, 763, 486, 381, 486, 486, 976, 976, - 487, 976, 488, 489, 876, 876, 876, 876, 645, 638, - 645, 645, 976, 976, 646, 976, 976, 762, 763, 763, - 763, 763, 976, 976, 976, 877, 973, 959, 974, 973, - 976, 970, 975, 970, 970, 976, 970, 971, 970, 970, - 976, 976, 971, 877, 503, 389, 503, 503, 976, 976, - 504, 976, 505, 506, 771, 771, 771, 771, 503, 389, - 503, 503, 976, 976, 504, 976, 505, 506, 771, 771, - - 771, 771, 299, 189, 299, 299, 976, 976, 300, 976, - 301, 302, 774, 774, 774, 774, 299, 189, 299, 299, - 976, 976, 300, 976, 301, 302, 774, 774, 774, 774, - 389, 389, 389, 389, 976, 976, 390, 976, 976, 976, - 776, 776, 776, 776, 518, 394, 518, 518, 976, 976, - 519, 976, 520, 521, 779, 779, 779, 779, 518, 394, - 518, 518, 976, 976, 519, 976, 520, 521, 779, 779, - 779, 779, 530, 398, 530, 530, 976, 976, 531, 976, - 532, 533, 784, 784, 784, 784, 530, 398, 530, 530, - 976, 976, 531, 976, 532, 533, 784, 784, 784, 784, - - 310, 195, 310, 310, 976, 976, 311, 976, 312, 313, - 787, 787, 787, 787, 310, 195, 310, 310, 976, 976, - 311, 976, 312, 313, 787, 787, 787, 787, 398, 398, - 398, 398, 976, 976, 399, 976, 976, 976, 789, 789, - 789, 789, 545, 403, 545, 545, 976, 976, 546, 976, - 547, 548, 792, 792, 792, 792, 545, 403, 545, 545, - 976, 976, 546, 976, 547, 548, 792, 792, 792, 792, - 797, 669, 797, 797, 976, 976, 798, 976, 799, 800, - 801, 801, 801, 801, 797, 669, 797, 797, 976, 976, - 798, 976, 799, 800, 801, 801, 801, 801, 669, 669, - - 669, 669, 976, 976, 670, 976, 976, 976, 803, 803, - 803, 803, 557, 407, 557, 557, 976, 976, 558, 976, - 559, 805, 806, 806, 806, 806, 557, 407, 557, 557, - 976, 976, 558, 976, 559, 560, 882, 882, 882, 882, - 673, 674, 673, 673, 976, 976, 675, 976, 976, 805, - 806, 806, 806, 806, 976, 976, 976, 883, 560, 818, - 818, 818, 818, 976, 976, 976, 676, 973, 959, 974, - 973, 976, 976, 975, 976, 883, 669, 669, 669, 669, - 976, 976, 670, 976, 676, 808, 809, 809, 809, 809, - 976, 976, 976, 885, 973, 959, 974, 973, 976, 976, - - 975, 973, 966, 974, 973, 976, 976, 975, 976, 976, - 976, 885, 811, 674, 811, 811, 976, 976, 812, 976, - 813, 814, 815, 815, 815, 815, 811, 674, 811, 811, - 976, 976, 812, 976, 813, 814, 815, 815, 815, 815, - 324, 208, 324, 324, 976, 976, 325, 976, 326, 820, - 821, 821, 821, 821, 324, 208, 324, 324, 976, 976, - 325, 976, 326, 327, 888, 888, 888, 888, 678, 679, - 678, 678, 976, 976, 680, 976, 976, 820, 821, 821, - 821, 821, 976, 976, 976, 889, 973, 959, 974, 973, - 976, 976, 975, 976, 976, 976, 976, 976, 976, 976, - - 976, 976, 976, 889, 827, 679, 827, 827, 976, 976, - 828, 976, 829, 830, 831, 831, 831, 831, 674, 674, - 674, 674, 976, 976, 683, 976, 976, 824, 825, 825, - 825, 825, 976, 976, 976, 891, 976, 976, 976, 976, - 976, 976, 327, 834, 834, 834, 834, 976, 976, 976, - 414, 976, 976, 891, 827, 679, 827, 827, 976, 976, - 828, 976, 829, 830, 831, 831, 831, 831, 414, 674, - 674, 674, 674, 976, 976, 683, 976, 976, 976, 836, - 836, 836, 836, 572, 412, 572, 572, 976, 976, 573, - 976, 574, 838, 839, 839, 839, 839, 572, 412, 572, - - 572, 976, 976, 573, 976, 574, 575, 894, 894, 894, - 894, 686, 679, 686, 686, 976, 976, 687, 976, 976, - 838, 839, 839, 839, 839, 976, 976, 976, 895, 575, - 842, 842, 842, 842, 976, 976, 976, 688, 976, 976, - 976, 976, 976, 976, 976, 976, 895, 976, 976, 976, - 976, 976, 976, 976, 976, 688, 589, 420, 589, 589, - 976, 976, 590, 976, 591, 592, 847, 847, 847, 847, - 589, 420, 589, 589, 976, 976, 590, 976, 591, 592, - 847, 847, 847, 847, 346, 224, 346, 346, 976, 976, - 347, 976, 348, 349, 850, 850, 850, 850, 346, 224, - - 346, 346, 976, 976, 347, 976, 348, 349, 850, 850, - 850, 850, 420, 420, 420, 420, 976, 976, 421, 976, - 976, 976, 852, 852, 852, 852, 604, 425, 604, 604, - 976, 976, 605, 976, 606, 607, 855, 855, 855, 855, - 604, 425, 604, 604, 976, 976, 605, 976, 606, 607, - 855, 855, 855, 855, 721, 628, 721, 721, 976, 976, - 722, 976, 723, 724, 862, 862, 862, 862, 976, 976, - 976, 863, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 863, - 721, 628, 721, 721, 976, 976, 722, 901, 902, 724, - - 903, 903, 903, 903, 632, 633, 632, 632, 976, 976, - 634, 976, 473, 474, 864, 864, 864, 864, 976, 976, - 976, 865, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 865, - 471, 376, 471, 471, 976, 976, 472, 904, 905, 474, - 906, 906, 906, 906, 628, 628, 628, 628, 976, 976, - 629, 976, 976, 976, 866, 866, 866, 866, 976, 976, - 976, 867, 976, 976, 976, 976, 976, 976, 560, 930, - 930, 930, 930, 976, 976, 976, 676, 976, 976, 867, - 735, 633, 735, 735, 976, 976, 736, 976, 737, 738, - - 868, 868, 868, 868, 676, 976, 976, 869, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 869, 735, 633, 735, 735, - 976, 976, 736, 909, 910, 738, 911, 911, 911, 911, - 637, 638, 637, 637, 976, 976, 639, 976, 277, 278, - 870, 870, 870, 870, 976, 976, 976, 871, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 871, 275, 169, 275, 275, - 976, 976, 276, 912, 913, 278, 914, 914, 914, 914, - 633, 633, 633, 633, 976, 976, 642, 976, 976, 976, - - 872, 872, 872, 872, 976, 976, 976, 873, 976, 976, - 976, 976, 976, 976, 327, 938, 938, 938, 938, 976, - 976, 976, 414, 976, 976, 873, 751, 638, 751, 751, - 976, 976, 752, 976, 753, 754, 874, 874, 874, 874, - 414, 976, 976, 875, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 875, 751, 638, 751, 751, 976, 976, 752, 917, - 918, 754, 919, 919, 919, 919, 645, 638, 645, 645, - 976, 976, 646, 976, 488, 489, 876, 876, 876, 876, - 976, 976, 976, 877, 976, 976, 976, 976, 976, 976, - - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 877, 486, 381, 486, 486, 976, 976, 487, 920, - 921, 489, 922, 922, 922, 922, 632, 633, 632, 632, - 976, 976, 634, 470, 473, 976, 976, 976, 976, 976, - 976, 976, 976, 635, 575, 946, 946, 946, 946, 976, - 976, 976, 688, 976, 976, 976, 976, 976, 976, 976, - 976, 635, 628, 628, 628, 628, 976, 976, 629, 976, - 688, 976, 908, 908, 908, 908, 637, 638, 637, 637, - 976, 976, 639, 274, 277, 976, 976, 976, 976, 976, - 976, 976, 976, 383, 976, 976, 976, 976, 976, 976, - - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 383, 633, 633, 633, 633, 976, 976, 642, 976, - 976, 976, 916, 916, 916, 916, 645, 638, 645, 645, - 976, 976, 646, 485, 488, 976, 976, 976, 976, 976, - 976, 976, 976, 647, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 647, 669, 669, 669, 669, 976, 976, 670, 976, - 976, 976, 932, 932, 932, 932, 46, 46, 46, 46, - 46, 46, 46, 46, 81, 81, 81, 81, 81, 81, - 81, 81, 109, 109, 109, 109, 109, 109, 109, 109, - - 119, 119, 119, 119, 119, 119, 119, 119, 130, 130, - 976, 130, 130, 130, 130, 130, 131, 131, 976, 131, - 131, 131, 131, 131, 134, 976, 976, 134, 135, 976, - 976, 135, 172, 976, 976, 172, 976, 172, 172, 172, - 173, 173, 976, 173, 173, 173, 173, 173, 211, 976, - 976, 211, 976, 211, 211, 212, 212, 976, 212, 212, - 212, 212, 212, 227, 227, 976, 227, 976, 227, 227, - 227, 230, 230, 976, 230, 230, 230, 230, 230, 250, - 250, 250, 250, 250, 250, 250, 250, 263, 263, 263, - 263, 263, 263, 263, 263, 269, 269, 976, 976, 269, - - 269, 274, 274, 274, 274, 274, 274, 274, 274, 287, - 287, 287, 287, 287, 287, 287, 287, 298, 298, 298, - 298, 298, 298, 298, 298, 309, 309, 309, 309, 309, - 309, 309, 309, 323, 323, 323, 323, 323, 323, 323, - 323, 212, 212, 976, 212, 212, 212, 212, 212, 334, - 334, 334, 334, 334, 334, 334, 334, 345, 345, 345, - 345, 345, 345, 345, 345, 227, 227, 976, 227, 976, - 227, 227, 227, 230, 230, 976, 230, 230, 230, 230, - 230, 131, 131, 976, 131, 131, 131, 131, 131, 134, - 976, 976, 134, 250, 250, 250, 250, 250, 250, 250, - - 250, 263, 263, 263, 263, 263, 263, 263, 263, 269, - 269, 976, 976, 269, 269, 274, 274, 274, 274, 274, - 274, 274, 274, 439, 439, 439, 439, 439, 439, 439, - 439, 454, 454, 454, 454, 454, 454, 454, 454, 470, - 470, 470, 470, 470, 470, 470, 470, 485, 485, 485, - 485, 485, 485, 485, 485, 287, 287, 287, 287, 287, - 287, 287, 287, 502, 502, 502, 502, 502, 502, 502, - 502, 298, 298, 298, 298, 298, 298, 298, 298, 517, - 517, 517, 517, 517, 517, 517, 517, 529, 529, 529, - 529, 529, 529, 529, 529, 309, 309, 309, 309, 309, - - 309, 309, 309, 544, 544, 544, 544, 544, 544, 544, - 544, 556, 556, 556, 556, 556, 556, 556, 556, 323, - 323, 323, 323, 323, 323, 323, 323, 571, 571, 571, - 571, 571, 571, 571, 571, 334, 334, 334, 334, 334, - 334, 334, 334, 588, 588, 588, 588, 588, 588, 588, - 588, 345, 345, 345, 345, 345, 345, 345, 345, 603, - 603, 603, 603, 603, 603, 603, 603, 131, 131, 976, - 131, 131, 131, 131, 131, 134, 976, 976, 134, 439, - 439, 439, 439, 439, 439, 439, 439, 250, 250, 250, - 250, 250, 250, 250, 250, 454, 454, 454, 454, 454, - - 454, 454, 454, 470, 470, 470, 470, 470, 470, 470, - 470, 274, 274, 274, 274, 274, 274, 274, 274, 485, - 485, 485, 485, 485, 485, 485, 485, 287, 287, 287, - 287, 287, 287, 287, 287, 502, 502, 502, 502, 502, - 502, 502, 502, 298, 298, 298, 298, 298, 298, 298, - 298, 517, 517, 517, 517, 517, 517, 517, 517, 529, - 529, 529, 529, 529, 529, 529, 529, 309, 309, 309, - 309, 309, 309, 309, 309, 544, 544, 544, 544, 544, - 544, 544, 544, 556, 556, 556, 556, 556, 556, 556, - 556, 323, 323, 323, 323, 323, 323, 323, 323, 571, - - 571, 571, 571, 571, 571, 571, 571, 334, 334, 334, - 334, 334, 334, 334, 334, 588, 588, 588, 588, 588, - 588, 588, 588, 345, 345, 345, 345, 345, 345, 345, - 345, 603, 603, 603, 603, 603, 603, 603, 603, 131, - 131, 976, 131, 131, 131, 131, 131, 134, 976, 976, - 134, 439, 439, 439, 439, 439, 439, 439, 439, 250, - 250, 250, 250, 250, 250, 250, 250, 454, 454, 454, - 454, 454, 454, 454, 454, 720, 720, 720, 720, 720, - 720, 720, 720, 470, 470, 470, 470, 470, 470, 470, - 470, 734, 734, 734, 734, 734, 734, 734, 734, 274, - - 274, 274, 274, 274, 274, 274, 274, 750, 750, 750, - 750, 750, 750, 750, 750, 485, 485, 485, 485, 485, - 485, 485, 485, 502, 502, 502, 502, 502, 502, 502, - 502, 298, 298, 298, 298, 298, 298, 298, 298, 517, - 517, 517, 517, 517, 517, 517, 517, 529, 529, 529, - 529, 529, 529, 529, 529, 309, 309, 309, 309, 309, - 309, 309, 309, 544, 544, 544, 544, 544, 544, 544, - 544, 796, 796, 796, 796, 796, 796, 796, 796, 556, - 556, 556, 556, 556, 556, 556, 556, 810, 810, 810, - 810, 810, 810, 810, 810, 323, 323, 323, 323, 323, - - 323, 323, 323, 826, 826, 826, 826, 826, 826, 826, - 826, 571, 571, 571, 571, 571, 571, 571, 571, 588, - 588, 588, 588, 588, 588, 588, 588, 345, 345, 345, - 345, 345, 345, 345, 345, 603, 603, 603, 603, 603, - 603, 603, 603, 131, 131, 976, 131, 131, 131, 131, - 131, 134, 976, 976, 134, 439, 439, 439, 439, 439, - 439, 439, 439, 250, 250, 250, 250, 250, 250, 250, - 250, 454, 454, 454, 454, 454, 454, 454, 454, 720, - 720, 720, 720, 720, 720, 720, 720, 470, 470, 470, - 470, 470, 470, 470, 470, 734, 734, 734, 734, 734, - - 734, 734, 734, 274, 274, 274, 274, 274, 274, 274, - 274, 750, 750, 750, 750, 750, 750, 750, 750, 485, - 485, 485, 485, 485, 485, 485, 485, 502, 502, 502, - 502, 502, 502, 502, 502, 298, 298, 298, 298, 298, - 298, 298, 298, 517, 517, 517, 517, 517, 517, 517, - 517, 529, 529, 529, 529, 529, 529, 529, 529, 309, - 309, 309, 309, 309, 309, 309, 309, 544, 544, 544, - 544, 544, 544, 544, 544, 796, 796, 796, 796, 796, - 796, 796, 796, 556, 556, 556, 556, 556, 556, 556, - 556, 810, 810, 810, 810, 810, 810, 810, 810, 323, - - 323, 323, 323, 323, 323, 323, 323, 826, 826, 826, - 826, 826, 826, 826, 826, 571, 571, 571, 571, 571, - 571, 571, 571, 588, 588, 588, 588, 588, 588, 588, - 588, 345, 345, 345, 345, 345, 345, 345, 345, 603, - 603, 603, 603, 603, 603, 603, 603, 131, 131, 976, - 131, 131, 131, 131, 131, 134, 976, 976, 134, 720, - 720, 720, 720, 720, 720, 720, 720, 470, 470, 470, - 470, 470, 470, 470, 470, 734, 734, 734, 734, 734, - 734, 734, 734, 274, 274, 274, 274, 274, 274, 274, - 274, 750, 750, 750, 750, 750, 750, 750, 750, 485, - - 485, 485, 485, 485, 485, 485, 485, 958, 958, 958, - 958, 958, 958, 958, 958, 969, 969, 976, 969, 969, - 969, 969, 969, 972, 972, 972, 972, 972, 972, 972, - 972, 45, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976 - } ; - -static yyconst flex_int16_t yy_chk[8681] = - { 0, - 0, 1, 1, 1, 1, 0, 1039, 1, 2, 2, - 2, 2, 122, 122, 2, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 5, 5, 5, 5, 61, 61, 5, - 9, 9, 9, 9, 9, 9, 66, 66, 66, 66, - 66, 5, 5, 10, 10, 10, 10, 10, 10, 1017, - 5, 6, 6, 6, 6, 229, 229, 6, 11, 11, - - 11, 11, 11, 11, 67, 67, 67, 67, 74, 6, - 6, 12, 12, 12, 12, 12, 12, 1014, 6, 7, - 7, 7, 7, 428, 74, 7, 428, 7, 7, 7, - 7, 7, 7, 69, 69, 69, 69, 69, 7, 13, - 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, - 14, 15, 15, 15, 15, 15, 15, 16, 16, 16, - 16, 16, 16, 17, 17, 17, 17, 354, 17, 17, - 18, 18, 18, 18, 1012, 18, 18, 70, 70, 70, - 70, 354, 17, 19, 19, 19, 19, 19, 19, 18, - 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, - - 21, 21, 22, 22, 22, 22, 22, 22, 23, 23, - 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, - 25, 25, 25, 25, 25, 25, 267, 39, 39, 39, - 39, 25, 39, 39, 40, 40, 40, 40, 49, 40, - 40, 133, 267, 25, 1006, 25, 26, 26, 26, 26, - 26, 26, 47, 856, 47, 47, 856, 26, 47, 39, - 133, 49, 41, 41, 41, 41, 40, 41, 41, 26, - 950, 26, 27, 27, 27, 27, 27, 27, 235, 42, - 42, 42, 42, 27, 42, 42, 230, 230, 71, 71, - 71, 71, 71, 235, 41, 27, 71, 27, 28, 28, - - 28, 28, 28, 28, 72, 72, 72, 72, 950, 28, - 999, 42, 231, 231, 71, 75, 75, 75, 75, 947, - 465, 28, 947, 28, 29, 29, 29, 29, 29, 29, - 77, 77, 77, 77, 994, 29, 465, 43, 43, 43, - 43, 43, 43, 79, 79, 79, 79, 29, 43, 29, - 30, 30, 30, 30, 30, 30, 78, 78, 78, 78, - 78, 30, 952, 44, 44, 44, 44, 44, 44, 86, - 86, 86, 86, 30, 44, 30, 31, 31, 31, 31, - 31, 31, 85, 85, 85, 85, 85, 31, 76, 76, - 76, 76, 83, 949, 83, 83, 432, 83, 83, 31, - - 432, 31, 32, 32, 32, 32, 32, 32, 76, 89, - 89, 89, 89, 32, 87, 87, 87, 87, 87, 948, - 699, 898, 87, 612, 76, 32, 699, 32, 33, 33, - 33, 33, 897, 33, 33, 88, 88, 88, 88, 88, - 87, 91, 91, 91, 91, 91, 612, 33, 92, 92, - 92, 92, 94, 94, 94, 94, 94, 901, 901, 33, - 292, 33, 34, 34, 34, 34, 859, 34, 34, 95, - 95, 95, 95, 100, 100, 100, 100, 100, 292, 902, - 902, 34, 101, 101, 101, 101, 102, 102, 102, 102, - 102, 904, 904, 34, 102, 34, 35, 35, 35, 35, - - 35, 35, 103, 103, 103, 103, 857, 35, 104, 104, - 104, 104, 102, 105, 105, 105, 105, 905, 905, 35, - 703, 35, 36, 36, 36, 36, 36, 36, 104, 107, - 107, 107, 107, 36, 106, 106, 106, 106, 106, 113, - 113, 113, 113, 113, 104, 36, 702, 36, 37, 37, - 37, 37, 37, 37, 339, 111, 700, 111, 111, 37, - 111, 111, 114, 114, 114, 114, 116, 116, 116, 116, - 116, 37, 339, 37, 38, 38, 38, 38, 38, 38, - 117, 117, 117, 117, 616, 38, 111, 120, 111, 120, - 120, 466, 128, 120, 128, 128, 444, 38, 128, 38, - - 68, 68, 68, 68, 459, 615, 68, 466, 953, 68, - 68, 68, 68, 68, 444, 909, 909, 68, 125, 125, - 125, 125, 459, 126, 126, 126, 126, 127, 127, 127, - 127, 150, 150, 150, 150, 68, 73, 73, 73, 73, - 896, 614, 73, 126, 896, 953, 73, 73, 73, 73, - 152, 152, 152, 152, 152, 910, 910, 155, 155, 126, - 155, 155, 155, 155, 912, 912, 73, 156, 156, 156, - 156, 157, 157, 157, 157, 157, 913, 913, 613, 157, - 498, 507, 73, 80, 80, 80, 80, 522, 433, 80, - 917, 917, 80, 80, 80, 80, 80, 157, 498, 507, - - 80, 158, 158, 158, 158, 522, 159, 159, 158, 159, - 159, 159, 159, 164, 164, 164, 164, 429, 80, 90, - 90, 90, 90, 918, 918, 90, 158, 534, 90, 90, - 90, 90, 90, 955, 549, 161, 90, 161, 161, 161, - 161, 163, 163, 163, 163, 534, 362, 163, 166, 166, - 166, 166, 549, 584, 90, 93, 93, 93, 93, 920, - 920, 93, 593, 955, 93, 93, 93, 93, 93, 921, - 921, 584, 93, 168, 168, 168, 168, 168, 171, 171, - 593, 171, 171, 171, 171, 176, 176, 176, 176, 956, - 93, 96, 96, 96, 96, 361, 956, 96, 360, 359, - - 96, 96, 96, 96, 96, 358, 357, 173, 96, 173, - 173, 355, 173, 173, 174, 246, 174, 174, 245, 174, - 174, 180, 180, 180, 180, 608, 96, 108, 108, 108, - 108, 244, 708, 108, 716, 243, 108, 108, 108, 108, - 108, 725, 739, 608, 108, 177, 177, 177, 177, 177, - 708, 242, 716, 177, 178, 178, 178, 178, 240, 725, - 739, 178, 108, 115, 115, 115, 115, 239, 238, 115, - 237, 177, 115, 115, 115, 115, 115, 149, 147, 178, - 115, 179, 179, 146, 179, 179, 179, 179, 182, 182, - 182, 182, 182, 186, 186, 186, 186, 145, 115, 118, - - 118, 118, 118, 144, 143, 118, 141, 140, 118, 118, - 118, 118, 118, 139, 185, 185, 118, 185, 185, 185, - 185, 188, 188, 188, 188, 188, 191, 191, 137, 191, - 191, 191, 191, 136, 118, 153, 153, 153, 153, 132, - 131, 153, 129, 153, 153, 153, 153, 153, 153, 154, - 154, 154, 154, 123, 755, 154, 112, 154, 154, 154, - 154, 154, 154, 162, 162, 162, 162, 97, 84, 162, - 65, 162, 755, 162, 162, 162, 162, 169, 169, 169, - 169, 64, 63, 169, 62, 169, 169, 169, 169, 169, - 169, 170, 170, 170, 170, 60, 59, 170, 58, 170, - - 170, 170, 170, 170, 170, 183, 183, 183, 183, 57, - 56, 183, 55, 183, 183, 183, 183, 183, 183, 184, - 184, 184, 184, 54, 53, 184, 51, 184, 184, 184, - 184, 184, 184, 189, 189, 189, 189, 45, 0, 189, - 0, 189, 189, 189, 189, 189, 189, 190, 190, 190, - 190, 0, 0, 190, 0, 190, 190, 190, 190, 190, - 190, 192, 192, 192, 192, 194, 194, 194, 194, 194, - 195, 195, 195, 195, 0, 0, 195, 0, 195, 195, - 195, 195, 195, 195, 196, 196, 196, 196, 0, 0, - 196, 0, 196, 196, 196, 196, 196, 196, 197, 197, - - 0, 197, 197, 197, 197, 199, 199, 199, 199, 200, - 200, 200, 200, 200, 0, 0, 771, 200, 201, 201, - 201, 201, 779, 202, 202, 201, 202, 202, 202, 202, - 203, 203, 203, 203, 771, 200, 205, 205, 205, 205, - 779, 0, 0, 201, 207, 207, 207, 207, 207, 208, - 208, 208, 208, 0, 0, 208, 0, 208, 208, 208, - 208, 208, 208, 209, 209, 209, 209, 784, 0, 209, - 792, 209, 209, 209, 209, 209, 209, 210, 210, 0, - 210, 210, 210, 210, 212, 784, 212, 212, 792, 212, - 212, 213, 0, 213, 213, 0, 213, 213, 215, 215, - - 215, 215, 217, 217, 217, 217, 217, 220, 220, 0, - 220, 220, 220, 220, 801, 212, 0, 212, 221, 221, - 221, 221, 213, 815, 213, 216, 216, 216, 216, 0, - 0, 216, 801, 0, 216, 216, 216, 216, 216, 0, - 0, 815, 216, 223, 223, 223, 223, 223, 226, 226, - 831, 226, 226, 226, 226, 233, 233, 233, 233, 0, - 216, 218, 218, 218, 218, 0, 0, 218, 831, 218, - 218, 218, 218, 218, 218, 219, 219, 219, 219, 847, - 0, 219, 0, 219, 219, 219, 219, 219, 219, 222, - 222, 222, 222, 0, 0, 222, 0, 847, 222, 222, - - 222, 222, 222, 855, 0, 228, 222, 228, 228, 0, - 0, 228, 247, 247, 247, 247, 247, 248, 248, 248, - 248, 855, 0, 0, 222, 224, 224, 224, 224, 0, - 0, 224, 0, 224, 224, 224, 224, 224, 224, 225, - 225, 225, 225, 0, 0, 225, 0, 225, 225, 225, - 225, 225, 225, 249, 249, 249, 249, 0, 0, 249, - 0, 0, 249, 249, 249, 249, 249, 0, 0, 0, - 249, 254, 254, 254, 254, 256, 256, 256, 256, 258, - 258, 258, 258, 259, 259, 259, 259, 0, 249, 250, - 250, 250, 250, 0, 0, 250, 0, 250, 250, 250, - - 250, 250, 250, 251, 251, 251, 251, 0, 0, 251, - 0, 251, 251, 251, 251, 251, 251, 255, 255, 255, - 255, 0, 0, 255, 260, 260, 260, 260, 262, 262, - 262, 262, 0, 0, 255, 0, 0, 261, 261, 261, - 261, 269, 269, 269, 269, 0, 0, 269, 272, 272, - 272, 272, 255, 257, 257, 257, 257, 261, 0, 257, - 0, 0, 0, 257, 257, 257, 257, 271, 271, 271, - 271, 271, 0, 261, 263, 263, 263, 263, 957, 957, - 263, 0, 263, 957, 263, 263, 263, 263, 264, 264, - 264, 264, 958, 958, 264, 0, 264, 958, 264, 264, - - 264, 264, 273, 273, 273, 273, 0, 0, 273, 0, - 0, 273, 273, 273, 273, 273, 0, 0, 0, 273, - 278, 278, 278, 278, 280, 280, 280, 280, 282, 282, - 282, 282, 283, 283, 283, 283, 0, 273, 274, 274, - 274, 274, 0, 0, 274, 0, 274, 274, 274, 274, - 274, 274, 275, 275, 275, 275, 0, 0, 275, 0, - 275, 275, 275, 275, 275, 275, 279, 279, 279, 279, - 0, 0, 279, 284, 284, 284, 284, 284, 285, 285, - 285, 285, 0, 279, 286, 286, 286, 286, 286, 0, - 0, 0, 286, 291, 291, 291, 291, 293, 293, 293, - - 293, 279, 281, 281, 281, 281, 961, 961, 281, 0, - 286, 961, 281, 281, 281, 281, 287, 287, 287, 287, - 0, 0, 287, 0, 287, 287, 287, 287, 287, 287, - 294, 294, 294, 294, 0, 0, 294, 0, 0, 0, - 294, 294, 294, 294, 295, 295, 295, 295, 295, 296, - 296, 296, 296, 297, 297, 297, 297, 0, 0, 297, - 0, 0, 297, 297, 297, 297, 297, 0, 0, 0, - 297, 302, 302, 302, 302, 0, 303, 303, 303, 303, - 0, 0, 303, 304, 304, 304, 304, 0, 297, 298, - 298, 298, 298, 303, 0, 298, 0, 298, 298, 298, - - 298, 298, 298, 306, 306, 306, 306, 306, 0, 903, - 903, 303, 305, 305, 305, 305, 0, 0, 305, 903, - 0, 0, 305, 305, 305, 305, 307, 307, 307, 307, - 308, 308, 308, 308, 0, 0, 308, 903, 0, 308, - 308, 308, 308, 308, 0, 0, 0, 308, 313, 313, - 313, 313, 0, 314, 314, 314, 314, 0, 0, 314, - 315, 315, 315, 315, 0, 308, 309, 309, 309, 309, - 314, 0, 309, 0, 309, 309, 309, 309, 309, 309, - 317, 317, 317, 317, 318, 318, 318, 318, 314, 316, - 316, 316, 316, 0, 0, 316, 0, 0, 0, 316, - - 316, 316, 316, 320, 320, 320, 320, 320, 321, 321, - 321, 321, 322, 322, 322, 322, 0, 0, 322, 0, - 0, 322, 322, 322, 322, 322, 0, 0, 0, 322, - 327, 327, 327, 327, 0, 328, 328, 328, 328, 0, - 0, 328, 329, 329, 329, 329, 0, 322, 323, 323, - 323, 323, 328, 0, 323, 0, 323, 323, 323, 323, - 323, 323, 331, 331, 331, 331, 331, 0, 911, 911, - 328, 330, 330, 330, 330, 0, 0, 330, 911, 0, - 0, 330, 330, 330, 330, 332, 332, 332, 332, 333, - 333, 333, 333, 333, 0, 0, 911, 333, 338, 338, - - 338, 338, 340, 340, 340, 340, 342, 342, 342, 342, - 342, 343, 343, 343, 343, 333, 334, 334, 334, 334, - 0, 0, 334, 0, 334, 334, 334, 334, 334, 334, - 341, 341, 341, 341, 0, 0, 341, 0, 919, 919, - 341, 341, 341, 341, 344, 344, 344, 344, 919, 0, - 344, 0, 0, 344, 344, 344, 344, 344, 0, 0, - 0, 344, 349, 349, 349, 349, 919, 350, 350, 350, - 350, 0, 0, 350, 351, 351, 351, 351, 0, 344, - 345, 345, 345, 345, 350, 0, 345, 0, 345, 345, - 345, 345, 345, 345, 364, 364, 364, 364, 364, 0, - - 0, 0, 350, 352, 352, 352, 352, 0, 0, 352, - 0, 0, 0, 352, 352, 352, 352, 365, 365, 365, - 365, 0, 0, 365, 0, 365, 365, 365, 365, 365, - 365, 366, 366, 366, 366, 0, 0, 366, 0, 366, - 366, 366, 366, 366, 366, 367, 367, 0, 367, 367, - 367, 367, 368, 368, 368, 368, 0, 0, 368, 0, - 0, 0, 368, 368, 368, 368, 0, 372, 372, 368, - 372, 372, 372, 372, 375, 375, 375, 375, 375, 378, - 378, 0, 378, 378, 378, 378, 0, 368, 369, 369, - 369, 369, 369, 369, 0, 0, 0, 369, 384, 384, - - 384, 384, 0, 385, 385, 384, 385, 385, 385, 385, - 436, 436, 436, 436, 436, 369, 370, 370, 370, 370, - 0, 0, 370, 384, 370, 370, 370, 370, 370, 370, - 371, 371, 371, 371, 0, 0, 371, 0, 371, 371, - 371, 371, 371, 371, 374, 374, 374, 374, 374, 374, - 374, 374, 374, 391, 391, 0, 391, 391, 391, 391, - 400, 400, 0, 400, 400, 400, 400, 0, 374, 374, - 374, 376, 376, 376, 376, 0, 0, 376, 0, 376, - 376, 376, 376, 376, 376, 377, 377, 377, 377, 0, - 0, 377, 0, 377, 377, 377, 377, 377, 377, 379, - - 379, 379, 379, 0, 0, 379, 0, 0, 0, 379, - 379, 379, 379, 0, 409, 409, 379, 409, 409, 409, - 409, 415, 415, 415, 415, 0, 416, 416, 415, 416, - 416, 416, 416, 0, 379, 380, 380, 380, 380, 380, - 380, 0, 0, 0, 380, 0, 415, 422, 422, 0, - 422, 422, 422, 422, 437, 437, 437, 437, 443, 443, - 443, 443, 380, 381, 381, 381, 381, 0, 0, 381, - 0, 381, 381, 381, 381, 381, 381, 382, 382, 382, - 382, 0, 0, 382, 0, 382, 382, 382, 382, 382, - 382, 383, 383, 383, 383, 0, 0, 383, 383, 383, - - 0, 383, 383, 383, 383, 0, 0, 0, 383, 445, - 445, 445, 445, 0, 0, 438, 438, 438, 438, 438, - 0, 0, 0, 438, 0, 0, 383, 386, 386, 386, - 386, 0, 0, 386, 0, 386, 386, 386, 386, 386, - 386, 438, 0, 0, 386, 451, 451, 451, 451, 451, - 452, 452, 452, 452, 458, 458, 458, 458, 460, 460, - 460, 460, 386, 387, 387, 387, 387, 0, 0, 387, - 387, 387, 387, 387, 387, 387, 387, 388, 388, 388, - 388, 0, 0, 388, 0, 0, 0, 388, 388, 388, - 388, 0, 0, 0, 388, 461, 461, 461, 461, 467, - - 467, 467, 467, 467, 468, 468, 468, 468, 474, 474, - 474, 474, 388, 389, 389, 389, 389, 0, 0, 389, - 0, 389, 389, 389, 389, 389, 389, 390, 390, 390, - 390, 0, 0, 390, 0, 390, 390, 390, 390, 390, - 390, 392, 392, 392, 392, 0, 0, 392, 0, 392, - 392, 392, 392, 392, 392, 0, 0, 0, 392, 476, - 476, 476, 476, 482, 482, 482, 482, 482, 483, 483, - 483, 483, 489, 489, 489, 489, 392, 393, 393, 393, - 393, 0, 0, 393, 0, 393, 393, 393, 393, 393, - 393, 394, 394, 394, 394, 0, 0, 394, 0, 394, - - 394, 394, 394, 394, 394, 395, 395, 395, 395, 0, - 0, 395, 0, 395, 395, 395, 395, 395, 395, 396, - 396, 396, 396, 0, 0, 396, 396, 396, 396, 396, - 396, 396, 396, 397, 397, 397, 397, 0, 0, 397, - 0, 0, 0, 397, 397, 397, 397, 0, 0, 0, - 397, 491, 491, 491, 491, 492, 492, 492, 492, 494, - 494, 494, 494, 495, 495, 495, 495, 0, 397, 398, - 398, 398, 398, 0, 0, 398, 0, 398, 398, 398, - 398, 398, 398, 399, 399, 399, 399, 0, 0, 399, - 0, 399, 399, 399, 399, 399, 399, 401, 401, 401, - - 401, 0, 0, 401, 0, 401, 401, 401, 401, 401, - 401, 0, 0, 0, 401, 499, 499, 499, 499, 499, - 500, 500, 500, 500, 506, 506, 506, 506, 508, 508, - 508, 508, 401, 402, 402, 402, 402, 0, 0, 402, - 0, 402, 402, 402, 402, 402, 402, 403, 403, 403, - 403, 0, 0, 403, 0, 403, 403, 403, 403, 403, - 403, 404, 404, 404, 404, 0, 0, 404, 0, 404, - 404, 404, 404, 404, 404, 405, 405, 405, 405, 0, - 0, 405, 405, 405, 405, 405, 405, 405, 405, 406, - 406, 406, 406, 0, 0, 406, 0, 0, 0, 406, - - 406, 406, 406, 0, 0, 0, 406, 514, 514, 514, - 514, 514, 515, 515, 515, 515, 521, 521, 521, 521, - 523, 523, 523, 523, 406, 407, 407, 407, 407, 0, - 0, 407, 0, 407, 407, 407, 407, 407, 407, 408, - 408, 408, 408, 0, 0, 408, 0, 408, 408, 408, - 408, 408, 408, 410, 410, 410, 410, 0, 0, 410, - 0, 410, 410, 410, 410, 410, 410, 0, 0, 0, - 410, 524, 524, 524, 524, 526, 526, 526, 526, 526, - 527, 527, 527, 527, 533, 533, 533, 533, 410, 411, - 411, 411, 411, 0, 0, 411, 0, 411, 411, 411, - - 411, 411, 411, 412, 412, 412, 412, 0, 0, 412, - 0, 412, 412, 412, 412, 412, 412, 413, 413, 413, - 413, 0, 0, 413, 0, 413, 413, 413, 413, 413, - 413, 414, 414, 414, 414, 0, 0, 414, 414, 414, - 414, 414, 414, 414, 414, 417, 417, 417, 417, 0, - 0, 417, 0, 417, 417, 417, 417, 417, 417, 0, - 0, 0, 417, 535, 535, 535, 535, 0, 475, 475, - 475, 475, 0, 0, 475, 541, 541, 541, 541, 541, - 417, 418, 418, 418, 418, 475, 0, 418, 418, 418, - 418, 418, 418, 418, 418, 419, 419, 419, 419, 0, - - 0, 419, 0, 475, 0, 419, 419, 419, 419, 0, - 0, 0, 419, 542, 542, 542, 542, 548, 548, 548, - 548, 550, 550, 550, 550, 551, 551, 551, 551, 0, - 419, 420, 420, 420, 420, 0, 0, 420, 0, 420, - 420, 420, 420, 420, 420, 421, 421, 421, 421, 0, - 0, 421, 0, 421, 421, 421, 421, 421, 421, 423, - 423, 423, 423, 0, 0, 423, 0, 423, 423, 423, - 423, 423, 423, 0, 0, 0, 423, 553, 553, 553, - 553, 553, 554, 554, 554, 554, 560, 560, 560, 560, - 562, 562, 562, 562, 423, 424, 424, 424, 424, 0, - - 0, 424, 0, 424, 424, 424, 424, 424, 424, 425, - 425, 425, 425, 0, 0, 425, 0, 425, 425, 425, - 425, 425, 425, 426, 426, 426, 426, 0, 0, 426, - 0, 426, 426, 426, 426, 426, 426, 427, 427, 427, - 427, 0, 0, 427, 427, 427, 427, 427, 427, 427, - 427, 439, 439, 439, 439, 0, 0, 439, 0, 439, - 439, 439, 439, 439, 439, 440, 440, 440, 440, 0, - 0, 440, 0, 440, 440, 440, 440, 440, 440, 446, - 446, 446, 446, 0, 0, 446, 0, 0, 0, 446, - 446, 446, 446, 447, 447, 447, 447, 0, 0, 447, - - 0, 447, 447, 447, 447, 447, 447, 448, 448, 448, - 448, 0, 0, 448, 0, 448, 448, 448, 448, 448, - 448, 449, 449, 449, 449, 0, 0, 449, 0, 0, - 449, 449, 449, 449, 449, 0, 0, 0, 449, 568, - 568, 568, 568, 568, 490, 490, 490, 490, 0, 0, - 490, 569, 569, 569, 569, 0, 449, 450, 450, 450, - 450, 490, 0, 450, 0, 450, 450, 450, 450, 450, - 450, 453, 453, 453, 453, 0, 0, 453, 0, 490, - 453, 453, 453, 453, 453, 0, 0, 0, 453, 575, - 575, 575, 575, 0, 0, 462, 462, 462, 462, 462, - - 0, 0, 0, 462, 0, 0, 453, 454, 454, 454, - 454, 0, 0, 454, 0, 454, 454, 454, 454, 454, - 454, 462, 464, 464, 464, 464, 464, 464, 464, 464, - 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, - 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, - 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, - 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, - 469, 469, 469, 469, 0, 0, 469, 0, 0, 469, - 469, 469, 469, 469, 0, 0, 0, 469, 577, 577, - 577, 577, 578, 578, 578, 578, 580, 580, 580, 580, - - 581, 581, 581, 581, 0, 469, 470, 470, 470, 470, - 0, 0, 470, 0, 470, 470, 470, 470, 470, 470, - 471, 471, 471, 471, 0, 0, 471, 0, 471, 471, - 471, 471, 471, 471, 477, 477, 477, 477, 0, 0, - 477, 0, 0, 0, 477, 477, 477, 477, 478, 478, - 478, 478, 0, 0, 478, 0, 478, 478, 478, 478, - 478, 478, 479, 479, 479, 479, 0, 0, 479, 0, - 479, 479, 479, 479, 479, 479, 480, 480, 480, 480, - 0, 0, 480, 0, 0, 480, 480, 480, 480, 480, - 0, 0, 0, 480, 585, 585, 585, 585, 585, 561, - - 561, 561, 561, 0, 0, 561, 586, 586, 586, 586, - 0, 480, 481, 481, 481, 481, 561, 0, 481, 0, - 481, 481, 481, 481, 481, 481, 484, 484, 484, 484, - 0, 0, 484, 0, 561, 484, 484, 484, 484, 484, - 0, 0, 0, 484, 592, 592, 592, 592, 0, 576, - 576, 576, 576, 0, 0, 576, 594, 594, 594, 594, - 0, 484, 485, 485, 485, 485, 576, 0, 485, 0, - 485, 485, 485, 485, 485, 485, 493, 493, 493, 493, - 0, 0, 493, 0, 576, 0, 493, 493, 493, 493, - 0, 0, 0, 493, 600, 600, 600, 600, 600, 601, - - 601, 601, 601, 607, 607, 607, 607, 609, 609, 609, - 609, 493, 496, 496, 496, 496, 0, 0, 496, 0, - 496, 496, 496, 496, 496, 496, 497, 497, 497, 497, - 0, 0, 497, 0, 497, 497, 497, 497, 497, 497, - 501, 501, 501, 501, 501, 0, 0, 0, 501, 610, - 610, 610, 610, 618, 618, 0, 618, 618, 618, 618, - 704, 704, 704, 704, 0, 0, 501, 502, 502, 502, - 502, 0, 0, 502, 0, 502, 502, 502, 502, 502, - 502, 503, 503, 503, 503, 0, 0, 503, 0, 503, - 503, 503, 503, 503, 503, 509, 509, 509, 509, 0, - - 0, 509, 0, 0, 0, 509, 509, 509, 509, 510, - 510, 510, 510, 0, 0, 510, 0, 510, 510, 510, - 510, 510, 510, 511, 511, 511, 511, 0, 0, 511, - 0, 511, 511, 511, 511, 511, 511, 512, 512, 512, - 512, 0, 0, 512, 0, 0, 512, 512, 512, 512, - 512, 0, 0, 0, 512, 617, 617, 617, 617, 0, - 624, 624, 617, 624, 624, 624, 624, 705, 705, 705, - 705, 0, 512, 513, 513, 513, 513, 0, 0, 513, - 617, 513, 513, 513, 513, 513, 513, 516, 516, 516, - 516, 0, 0, 516, 0, 0, 516, 516, 516, 516, - - 516, 0, 630, 630, 516, 630, 630, 630, 630, 0, - 0, 525, 525, 525, 525, 525, 0, 0, 0, 525, - 0, 0, 516, 517, 517, 517, 517, 0, 0, 517, - 0, 517, 517, 517, 517, 517, 517, 525, 528, 528, - 528, 528, 528, 0, 643, 643, 528, 643, 643, 643, - 643, 649, 649, 0, 649, 649, 649, 649, 712, 712, - 712, 712, 0, 0, 528, 529, 529, 529, 529, 0, - 0, 529, 0, 529, 529, 529, 529, 529, 529, 530, - 530, 530, 530, 0, 0, 530, 0, 530, 530, 530, - 530, 530, 530, 536, 536, 536, 536, 0, 0, 536, - - 0, 0, 0, 536, 536, 536, 536, 537, 537, 537, - 537, 0, 0, 537, 0, 537, 537, 537, 537, 537, - 537, 538, 538, 538, 538, 0, 0, 538, 0, 538, - 538, 538, 538, 538, 538, 539, 539, 539, 539, 0, - 0, 539, 0, 0, 539, 539, 539, 539, 539, 0, - 0, 0, 539, 648, 648, 648, 648, 0, 655, 655, - 648, 655, 655, 655, 655, 717, 717, 717, 717, 717, - 539, 540, 540, 540, 540, 0, 0, 540, 648, 540, - 540, 540, 540, 540, 540, 543, 543, 543, 543, 0, - 0, 543, 0, 0, 543, 543, 543, 543, 543, 0, - - 659, 659, 543, 659, 659, 659, 659, 0, 0, 552, - 552, 552, 552, 552, 0, 0, 0, 552, 0, 0, - 543, 544, 544, 544, 544, 0, 0, 544, 0, 544, - 544, 544, 544, 544, 544, 552, 555, 555, 555, 555, - 0, 0, 555, 0, 0, 555, 555, 555, 555, 555, - 0, 0, 0, 555, 658, 658, 658, 658, 0, 665, - 665, 658, 665, 665, 665, 665, 718, 718, 718, 718, - 0, 555, 556, 556, 556, 556, 0, 0, 556, 658, - 556, 556, 556, 556, 556, 556, 557, 557, 557, 557, - 0, 0, 557, 0, 557, 557, 557, 557, 557, 557, - - 563, 563, 563, 563, 0, 0, 563, 0, 0, 0, - 563, 563, 563, 563, 564, 564, 564, 564, 0, 0, - 564, 0, 564, 564, 564, 564, 564, 564, 565, 565, - 565, 565, 0, 0, 565, 0, 565, 565, 565, 565, - 565, 565, 566, 566, 566, 566, 0, 0, 566, 0, - 0, 566, 566, 566, 566, 566, 0, 671, 671, 566, - 671, 671, 671, 671, 684, 684, 0, 684, 684, 684, - 684, 724, 724, 724, 724, 0, 0, 566, 567, 567, - 567, 567, 0, 0, 567, 0, 567, 567, 567, 567, - 567, 567, 570, 570, 570, 570, 0, 0, 570, 0, - - 0, 570, 570, 570, 570, 570, 0, 0, 0, 570, - 689, 689, 689, 689, 0, 690, 690, 689, 690, 690, - 690, 690, 726, 726, 726, 726, 0, 570, 571, 571, - 571, 571, 0, 0, 571, 689, 571, 571, 571, 571, - 571, 571, 579, 579, 579, 579, 0, 0, 579, 0, - 0, 0, 579, 579, 579, 579, 0, 696, 696, 579, - 696, 696, 696, 696, 731, 731, 731, 731, 731, 732, - 732, 732, 732, 738, 738, 738, 738, 579, 582, 582, - 582, 582, 0, 0, 582, 0, 582, 582, 582, 582, - 582, 582, 583, 583, 583, 583, 0, 0, 583, 0, - - 583, 583, 583, 583, 583, 583, 587, 587, 587, 587, - 587, 0, 0, 0, 587, 740, 740, 740, 740, 741, - 741, 741, 741, 747, 747, 747, 747, 747, 748, 748, - 748, 748, 587, 588, 588, 588, 588, 0, 0, 588, - 0, 588, 588, 588, 588, 588, 588, 589, 589, 589, - 589, 0, 0, 589, 0, 589, 589, 589, 589, 589, - 589, 595, 595, 595, 595, 0, 0, 595, 0, 0, - 0, 595, 595, 595, 595, 596, 596, 596, 596, 0, - 0, 596, 0, 596, 596, 596, 596, 596, 596, 597, - 597, 597, 597, 0, 0, 597, 0, 597, 597, 597, - - 597, 597, 597, 598, 598, 598, 598, 0, 0, 598, - 0, 0, 598, 598, 598, 598, 598, 0, 0, 0, - 598, 754, 754, 754, 754, 0, 711, 711, 711, 711, - 0, 0, 711, 756, 756, 756, 756, 0, 598, 599, - 599, 599, 599, 711, 0, 599, 0, 599, 599, 599, - 599, 599, 599, 602, 602, 602, 602, 0, 0, 602, - 0, 711, 602, 602, 602, 602, 602, 0, 0, 0, - 602, 757, 757, 757, 757, 0, 0, 611, 611, 611, - 611, 611, 0, 0, 0, 611, 0, 0, 602, 603, - 603, 603, 603, 0, 0, 603, 0, 603, 603, 603, - - 603, 603, 603, 611, 619, 619, 619, 619, 0, 0, - 619, 0, 619, 619, 619, 619, 619, 619, 0, 0, - 0, 619, 759, 759, 759, 759, 764, 764, 764, 764, - 765, 765, 765, 765, 767, 767, 767, 767, 0, 619, - 620, 620, 620, 620, 0, 0, 620, 620, 620, 620, - 620, 620, 620, 620, 621, 621, 621, 621, 0, 0, - 621, 0, 621, 621, 621, 621, 621, 621, 0, 0, - 0, 621, 768, 768, 768, 768, 0, 774, 774, 774, - 774, 0, 0, 774, 775, 775, 775, 775, 0, 621, - 622, 622, 622, 622, 774, 0, 622, 622, 622, 622, - - 622, 622, 622, 622, 623, 623, 623, 623, 0, 0, - 623, 0, 774, 0, 623, 623, 623, 623, 0, 0, - 0, 623, 780, 780, 780, 780, 0, 0, 719, 719, - 719, 719, 719, 0, 0, 0, 719, 0, 0, 623, - 625, 625, 625, 625, 0, 0, 625, 0, 625, 625, - 625, 625, 625, 625, 719, 0, 0, 625, 781, 781, - 781, 781, 0, 787, 787, 787, 787, 0, 0, 787, - 788, 788, 788, 788, 0, 625, 626, 626, 626, 626, - 787, 0, 626, 626, 626, 626, 626, 626, 626, 626, - 627, 627, 627, 627, 0, 0, 627, 0, 787, 0, - - 627, 627, 627, 627, 0, 0, 0, 627, 793, 793, - 793, 793, 793, 794, 794, 794, 794, 800, 800, 800, - 800, 802, 802, 802, 802, 627, 628, 628, 628, 628, - 0, 0, 628, 0, 628, 628, 628, 628, 628, 628, - 629, 629, 629, 629, 0, 0, 629, 0, 629, 629, - 629, 629, 629, 629, 631, 631, 631, 631, 0, 0, - 631, 0, 631, 631, 631, 631, 631, 631, 0, 0, - 0, 631, 807, 807, 807, 807, 807, 808, 808, 808, - 808, 814, 814, 814, 814, 816, 816, 816, 816, 631, - 632, 632, 632, 632, 0, 0, 632, 0, 632, 632, - - 632, 632, 632, 632, 633, 633, 633, 633, 0, 0, - 633, 0, 633, 633, 633, 633, 633, 633, 634, 634, - 634, 634, 0, 0, 634, 0, 634, 634, 634, 634, - 634, 634, 635, 635, 635, 635, 0, 0, 635, 635, - 635, 635, 635, 635, 635, 635, 636, 636, 636, 636, - 0, 0, 636, 0, 636, 636, 636, 636, 636, 636, - 0, 0, 0, 636, 817, 817, 817, 817, 823, 823, - 823, 823, 823, 824, 824, 824, 824, 830, 830, 830, - 830, 636, 637, 637, 637, 637, 0, 0, 637, 0, - 637, 637, 637, 637, 637, 637, 638, 638, 638, 638, - - 0, 0, 638, 0, 638, 638, 638, 638, 638, 638, - 639, 639, 639, 639, 0, 0, 639, 0, 639, 639, - 639, 639, 639, 639, 640, 640, 640, 640, 0, 0, - 640, 640, 640, 640, 640, 640, 640, 640, 641, 641, - 641, 641, 0, 0, 641, 0, 0, 0, 641, 641, - 641, 641, 0, 0, 0, 641, 832, 832, 832, 832, - 833, 833, 833, 833, 835, 835, 835, 835, 840, 840, - 840, 840, 0, 641, 642, 642, 642, 642, 0, 0, - 642, 0, 642, 642, 642, 642, 642, 642, 644, 644, - 644, 644, 0, 0, 644, 0, 644, 644, 644, 644, - - 644, 644, 0, 0, 0, 644, 841, 841, 841, 841, - 843, 843, 843, 843, 844, 844, 844, 844, 851, 851, - 851, 851, 0, 644, 645, 645, 645, 645, 0, 0, - 645, 0, 645, 645, 645, 645, 645, 645, 646, 646, - 646, 646, 0, 0, 646, 0, 646, 646, 646, 646, - 646, 646, 647, 647, 647, 647, 0, 0, 647, 647, - 647, 647, 647, 647, 647, 647, 650, 650, 650, 650, - 0, 0, 650, 0, 650, 650, 650, 650, 650, 650, - 0, 861, 861, 650, 861, 861, 861, 861, 867, 867, - 0, 867, 867, 867, 867, 882, 882, 882, 882, 882, - - 0, 650, 651, 651, 651, 651, 0, 0, 651, 651, - 651, 651, 651, 651, 651, 651, 652, 652, 652, 652, - 0, 0, 652, 0, 652, 652, 652, 652, 652, 652, - 0, 873, 873, 652, 873, 873, 873, 873, 0, 850, - 850, 850, 850, 879, 879, 850, 879, 879, 879, 879, - 0, 652, 653, 653, 653, 653, 850, 0, 653, 653, - 653, 653, 653, 653, 653, 653, 654, 654, 654, 654, - 0, 0, 654, 0, 850, 0, 654, 654, 654, 654, - 0, 881, 881, 654, 881, 881, 881, 881, 0, 0, - 742, 742, 742, 742, 742, 0, 0, 0, 742, 0, - - 0, 654, 656, 656, 656, 656, 0, 0, 656, 0, - 656, 656, 656, 656, 656, 656, 742, 883, 883, 656, - 883, 883, 883, 883, 884, 884, 884, 884, 884, 885, - 885, 0, 885, 885, 885, 885, 0, 656, 657, 657, - 657, 657, 0, 0, 657, 657, 657, 657, 657, 657, - 657, 657, 660, 660, 660, 660, 0, 0, 660, 0, - 660, 660, 660, 660, 660, 660, 0, 887, 887, 660, - 887, 887, 887, 887, 888, 888, 888, 888, 888, 889, - 889, 0, 889, 889, 889, 889, 0, 660, 661, 661, - 661, 661, 0, 0, 661, 661, 661, 661, 661, 661, - - 661, 661, 662, 662, 662, 662, 0, 0, 662, 0, - 662, 662, 662, 662, 662, 662, 0, 0, 0, 662, - 890, 890, 890, 890, 890, 891, 891, 0, 891, 891, - 891, 891, 894, 894, 894, 894, 894, 662, 663, 663, - 663, 663, 0, 0, 663, 663, 663, 663, 663, 663, - 663, 663, 664, 664, 664, 664, 0, 0, 664, 0, - 0, 0, 664, 664, 664, 664, 0, 893, 893, 664, - 893, 893, 893, 893, 0, 0, 758, 758, 758, 758, - 758, 0, 0, 0, 758, 0, 0, 664, 666, 666, - 666, 666, 0, 0, 666, 0, 666, 666, 666, 666, - - 666, 666, 758, 895, 895, 666, 895, 895, 895, 895, - 899, 899, 899, 899, 900, 900, 900, 900, 907, 907, - 907, 907, 0, 666, 667, 667, 667, 667, 0, 0, - 667, 667, 667, 667, 667, 667, 667, 667, 668, 668, - 668, 668, 0, 0, 668, 0, 0, 0, 668, 668, - 668, 668, 0, 0, 0, 668, 860, 860, 860, 860, - 0, 0, 0, 860, 915, 915, 915, 915, 923, 923, - 923, 923, 0, 668, 669, 669, 669, 669, 0, 0, - 669, 860, 669, 669, 669, 669, 669, 669, 670, 670, - 670, 670, 0, 0, 670, 0, 670, 670, 670, 670, - - 670, 670, 672, 672, 672, 672, 0, 0, 672, 0, - 672, 672, 672, 672, 672, 672, 0, 0, 0, 672, - 878, 878, 878, 878, 0, 0, 0, 878, 924, 924, - 924, 924, 925, 925, 925, 925, 0, 672, 673, 673, - 673, 673, 0, 0, 673, 878, 673, 673, 673, 673, - 673, 673, 674, 674, 674, 674, 0, 0, 674, 0, - 674, 674, 674, 674, 674, 674, 675, 675, 675, 675, - 0, 0, 675, 0, 675, 675, 675, 675, 675, 675, - 676, 676, 676, 676, 0, 0, 676, 676, 676, 676, - 676, 676, 676, 676, 677, 677, 677, 677, 0, 0, - - 677, 0, 677, 677, 677, 677, 677, 677, 0, 0, - 0, 677, 880, 880, 880, 880, 0, 0, 0, 880, - 926, 926, 926, 926, 928, 928, 928, 928, 0, 677, - 678, 678, 678, 678, 0, 0, 678, 880, 678, 678, - 678, 678, 678, 678, 679, 679, 679, 679, 0, 0, - 679, 0, 679, 679, 679, 679, 679, 679, 680, 680, - 680, 680, 0, 0, 680, 0, 680, 680, 680, 680, - 680, 680, 681, 681, 681, 681, 0, 0, 681, 681, - 681, 681, 681, 681, 681, 681, 682, 682, 682, 682, - 0, 0, 682, 0, 0, 0, 682, 682, 682, 682, - - 0, 0, 0, 682, 886, 886, 886, 886, 0, 0, - 0, 886, 929, 929, 929, 929, 931, 931, 931, 931, - 0, 682, 683, 683, 683, 683, 0, 0, 683, 886, - 683, 683, 683, 683, 683, 683, 685, 685, 685, 685, - 0, 0, 685, 0, 685, 685, 685, 685, 685, 685, - 0, 0, 0, 685, 892, 892, 892, 892, 0, 0, - 0, 892, 933, 933, 933, 933, 934, 934, 934, 934, - 0, 685, 686, 686, 686, 686, 0, 0, 686, 892, - 686, 686, 686, 686, 686, 686, 687, 687, 687, 687, - 0, 0, 687, 0, 687, 687, 687, 687, 687, 687, - - 688, 688, 688, 688, 0, 0, 688, 688, 688, 688, - 688, 688, 688, 688, 691, 691, 691, 691, 0, 0, - 691, 0, 691, 691, 691, 691, 691, 691, 0, 0, - 0, 691, 936, 936, 936, 936, 937, 937, 937, 937, - 939, 939, 939, 939, 940, 940, 940, 940, 0, 691, - 692, 692, 692, 692, 0, 0, 692, 692, 692, 692, - 692, 692, 692, 692, 693, 693, 693, 693, 0, 0, - 693, 0, 693, 693, 693, 693, 693, 693, 0, 0, - 0, 693, 941, 941, 941, 941, 942, 942, 942, 942, - 944, 944, 944, 944, 945, 945, 945, 945, 0, 693, - - 694, 694, 694, 694, 0, 0, 694, 694, 694, 694, - 694, 694, 694, 694, 695, 695, 695, 695, 0, 0, - 695, 0, 0, 0, 695, 695, 695, 695, 0, 0, - 959, 695, 959, 959, 0, 0, 959, 0, 766, 766, - 766, 766, 766, 0, 0, 0, 766, 0, 0, 695, - 697, 697, 697, 697, 0, 0, 697, 0, 697, 697, - 697, 697, 697, 697, 766, 0, 0, 697, 960, 960, - 960, 960, 0, 962, 960, 962, 962, 0, 963, 962, - 963, 963, 0, 0, 963, 697, 698, 698, 698, 698, - 0, 0, 698, 698, 698, 698, 698, 698, 698, 698, - - 706, 706, 706, 706, 0, 0, 706, 0, 706, 706, - 706, 706, 706, 706, 707, 707, 707, 707, 0, 0, - 707, 0, 707, 707, 707, 707, 707, 707, 709, 709, - 709, 709, 0, 0, 709, 0, 709, 709, 709, 709, - 709, 709, 710, 710, 710, 710, 0, 0, 710, 0, - 710, 710, 710, 710, 710, 710, 713, 713, 713, 713, - 0, 0, 713, 0, 0, 0, 713, 713, 713, 713, - 714, 714, 714, 714, 0, 0, 714, 0, 714, 714, - 714, 714, 714, 714, 715, 715, 715, 715, 0, 0, - 715, 0, 715, 715, 715, 715, 715, 715, 720, 720, - - 720, 720, 0, 0, 720, 0, 720, 720, 720, 720, - 720, 720, 721, 721, 721, 721, 0, 0, 721, 0, - 721, 721, 721, 721, 721, 721, 727, 727, 727, 727, - 0, 0, 727, 0, 0, 0, 727, 727, 727, 727, - 728, 728, 728, 728, 0, 0, 728, 0, 728, 728, - 728, 728, 728, 728, 729, 729, 729, 729, 0, 0, - 729, 0, 729, 729, 729, 729, 729, 729, 730, 730, - 730, 730, 0, 0, 730, 0, 0, 730, 730, 730, - 730, 730, 0, 0, 0, 730, 795, 795, 795, 795, - 795, 0, 0, 0, 795, 927, 927, 927, 927, 0, - - 0, 0, 927, 730, 733, 733, 733, 733, 0, 0, - 733, 0, 795, 733, 733, 733, 733, 733, 0, 0, - 927, 733, 935, 935, 935, 935, 0, 0, 964, 935, - 964, 964, 0, 0, 964, 0, 0, 0, 0, 733, - 734, 734, 734, 734, 0, 0, 734, 935, 734, 734, - 734, 734, 734, 734, 735, 735, 735, 735, 0, 0, - 735, 0, 735, 735, 735, 735, 735, 735, 743, 743, - 743, 743, 0, 0, 743, 0, 743, 743, 743, 743, - 743, 743, 744, 744, 744, 744, 0, 0, 744, 0, - 744, 744, 744, 744, 744, 744, 745, 745, 745, 745, - - 0, 0, 745, 0, 0, 745, 745, 745, 745, 745, - 0, 0, 0, 745, 943, 943, 943, 943, 0, 0, - 0, 943, 965, 965, 965, 965, 0, 0, 965, 0, - 0, 745, 746, 746, 746, 746, 0, 0, 746, 943, - 746, 746, 746, 746, 746, 746, 749, 749, 749, 749, - 0, 0, 749, 0, 0, 749, 749, 749, 749, 749, - 0, 0, 966, 749, 966, 966, 0, 0, 966, 967, - 967, 967, 967, 0, 969, 967, 969, 969, 0, 0, - 969, 749, 750, 750, 750, 750, 0, 0, 750, 0, - 750, 750, 750, 750, 750, 750, 760, 760, 760, 760, - - 0, 0, 760, 0, 0, 0, 760, 760, 760, 760, - 761, 761, 761, 761, 0, 0, 761, 0, 761, 761, - 761, 761, 761, 761, 762, 762, 762, 762, 0, 0, - 762, 0, 762, 762, 762, 762, 762, 762, 763, 763, - 763, 763, 0, 0, 763, 0, 0, 763, 763, 763, - 763, 763, 0, 0, 0, 763, 968, 968, 968, 968, - 0, 970, 968, 970, 970, 0, 971, 970, 971, 971, - 0, 0, 971, 763, 769, 769, 769, 769, 0, 0, - 769, 0, 769, 769, 769, 769, 769, 769, 770, 770, - 770, 770, 0, 0, 770, 0, 770, 770, 770, 770, - - 770, 770, 772, 772, 772, 772, 0, 0, 772, 0, - 772, 772, 772, 772, 772, 772, 773, 773, 773, 773, - 0, 0, 773, 0, 773, 773, 773, 773, 773, 773, - 776, 776, 776, 776, 0, 0, 776, 0, 0, 0, - 776, 776, 776, 776, 777, 777, 777, 777, 0, 0, - 777, 0, 777, 777, 777, 777, 777, 777, 778, 778, - 778, 778, 0, 0, 778, 0, 778, 778, 778, 778, - 778, 778, 782, 782, 782, 782, 0, 0, 782, 0, - 782, 782, 782, 782, 782, 782, 783, 783, 783, 783, - 0, 0, 783, 0, 783, 783, 783, 783, 783, 783, - - 785, 785, 785, 785, 0, 0, 785, 0, 785, 785, - 785, 785, 785, 785, 786, 786, 786, 786, 0, 0, - 786, 0, 786, 786, 786, 786, 786, 786, 789, 789, - 789, 789, 0, 0, 789, 0, 0, 0, 789, 789, - 789, 789, 790, 790, 790, 790, 0, 0, 790, 0, - 790, 790, 790, 790, 790, 790, 791, 791, 791, 791, - 0, 0, 791, 0, 791, 791, 791, 791, 791, 791, - 796, 796, 796, 796, 0, 0, 796, 0, 796, 796, - 796, 796, 796, 796, 797, 797, 797, 797, 0, 0, - 797, 0, 797, 797, 797, 797, 797, 797, 803, 803, - - 803, 803, 0, 0, 803, 0, 0, 0, 803, 803, - 803, 803, 804, 804, 804, 804, 0, 0, 804, 0, - 804, 804, 804, 804, 804, 804, 805, 805, 805, 805, - 0, 0, 805, 0, 805, 805, 805, 805, 805, 805, - 806, 806, 806, 806, 0, 0, 806, 0, 0, 806, - 806, 806, 806, 806, 0, 0, 0, 806, 818, 818, - 818, 818, 818, 0, 0, 0, 818, 972, 972, 972, - 972, 0, 0, 972, 0, 806, 809, 809, 809, 809, - 0, 0, 809, 0, 818, 809, 809, 809, 809, 809, - 0, 0, 0, 809, 973, 973, 973, 973, 0, 0, - - 973, 974, 974, 974, 974, 0, 0, 974, 0, 0, - 0, 809, 810, 810, 810, 810, 0, 0, 810, 0, - 810, 810, 810, 810, 810, 810, 811, 811, 811, 811, - 0, 0, 811, 0, 811, 811, 811, 811, 811, 811, - 819, 819, 819, 819, 0, 0, 819, 0, 819, 819, - 819, 819, 819, 819, 820, 820, 820, 820, 0, 0, - 820, 0, 820, 820, 820, 820, 820, 820, 821, 821, - 821, 821, 0, 0, 821, 0, 0, 821, 821, 821, - 821, 821, 0, 0, 0, 821, 975, 975, 975, 975, - 0, 0, 975, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 821, 822, 822, 822, 822, 0, 0, - 822, 0, 822, 822, 822, 822, 822, 822, 825, 825, - 825, 825, 0, 0, 825, 0, 0, 825, 825, 825, - 825, 825, 0, 0, 0, 825, 0, 0, 0, 0, - 0, 0, 834, 834, 834, 834, 834, 0, 0, 0, - 834, 0, 0, 825, 826, 826, 826, 826, 0, 0, - 826, 0, 826, 826, 826, 826, 826, 826, 834, 836, - 836, 836, 836, 0, 0, 836, 0, 0, 0, 836, - 836, 836, 836, 837, 837, 837, 837, 0, 0, 837, - 0, 837, 837, 837, 837, 837, 837, 838, 838, 838, - - 838, 0, 0, 838, 0, 838, 838, 838, 838, 838, - 838, 839, 839, 839, 839, 0, 0, 839, 0, 0, - 839, 839, 839, 839, 839, 0, 0, 0, 839, 842, - 842, 842, 842, 842, 0, 0, 0, 842, 0, 0, - 0, 0, 0, 0, 0, 0, 839, 0, 0, 0, - 0, 0, 0, 0, 0, 842, 845, 845, 845, 845, - 0, 0, 845, 0, 845, 845, 845, 845, 845, 845, - 846, 846, 846, 846, 0, 0, 846, 0, 846, 846, - 846, 846, 846, 846, 848, 848, 848, 848, 0, 0, - 848, 0, 848, 848, 848, 848, 848, 848, 849, 849, - - 849, 849, 0, 0, 849, 0, 849, 849, 849, 849, - 849, 849, 852, 852, 852, 852, 0, 0, 852, 0, - 0, 0, 852, 852, 852, 852, 853, 853, 853, 853, - 0, 0, 853, 0, 853, 853, 853, 853, 853, 853, - 854, 854, 854, 854, 0, 0, 854, 0, 854, 854, - 854, 854, 854, 854, 862, 862, 862, 862, 0, 0, - 862, 0, 862, 862, 862, 862, 862, 862, 0, 0, - 0, 862, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 862, - 863, 863, 863, 863, 0, 0, 863, 863, 863, 863, - - 863, 863, 863, 863, 864, 864, 864, 864, 0, 0, - 864, 0, 864, 864, 864, 864, 864, 864, 0, 0, - 0, 864, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 864, - 865, 865, 865, 865, 0, 0, 865, 865, 865, 865, - 865, 865, 865, 865, 866, 866, 866, 866, 0, 0, - 866, 0, 0, 0, 866, 866, 866, 866, 0, 0, - 0, 866, 0, 0, 0, 0, 0, 0, 930, 930, - 930, 930, 930, 0, 0, 0, 930, 0, 0, 866, - 868, 868, 868, 868, 0, 0, 868, 0, 868, 868, - - 868, 868, 868, 868, 930, 0, 0, 868, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 868, 869, 869, 869, 869, - 0, 0, 869, 869, 869, 869, 869, 869, 869, 869, - 870, 870, 870, 870, 0, 0, 870, 0, 870, 870, - 870, 870, 870, 870, 0, 0, 0, 870, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 870, 871, 871, 871, 871, - 0, 0, 871, 871, 871, 871, 871, 871, 871, 871, - 872, 872, 872, 872, 0, 0, 872, 0, 0, 0, - - 872, 872, 872, 872, 0, 0, 0, 872, 0, 0, - 0, 0, 0, 0, 938, 938, 938, 938, 938, 0, - 0, 0, 938, 0, 0, 872, 874, 874, 874, 874, - 0, 0, 874, 0, 874, 874, 874, 874, 874, 874, - 938, 0, 0, 874, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 874, 875, 875, 875, 875, 0, 0, 875, 875, - 875, 875, 875, 875, 875, 875, 876, 876, 876, 876, - 0, 0, 876, 0, 876, 876, 876, 876, 876, 876, - 0, 0, 0, 876, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 876, 877, 877, 877, 877, 0, 0, 877, 877, - 877, 877, 877, 877, 877, 877, 906, 906, 906, 906, - 0, 0, 906, 906, 906, 0, 0, 0, 0, 0, - 0, 0, 0, 906, 946, 946, 946, 946, 946, 0, - 0, 0, 946, 0, 0, 0, 0, 0, 0, 0, - 0, 906, 908, 908, 908, 908, 0, 0, 908, 0, - 946, 0, 908, 908, 908, 908, 914, 914, 914, 914, - 0, 0, 914, 914, 914, 0, 0, 0, 0, 0, - 0, 0, 0, 914, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 914, 916, 916, 916, 916, 0, 0, 916, 0, - 0, 0, 916, 916, 916, 916, 922, 922, 922, 922, - 0, 0, 922, 922, 922, 0, 0, 0, 0, 0, - 0, 0, 0, 922, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 922, 932, 932, 932, 932, 0, 0, 932, 0, - 0, 0, 932, 932, 932, 932, 977, 977, 977, 977, - 977, 977, 977, 977, 978, 978, 978, 978, 978, 978, - 978, 978, 979, 979, 979, 979, 979, 979, 979, 979, - - 980, 980, 980, 980, 980, 980, 980, 980, 981, 981, - 0, 981, 981, 981, 981, 981, 982, 982, 0, 982, - 982, 982, 982, 982, 983, 0, 0, 983, 984, 0, - 0, 984, 985, 0, 0, 985, 0, 985, 985, 985, - 986, 986, 0, 986, 986, 986, 986, 986, 987, 0, - 0, 987, 0, 987, 987, 988, 988, 0, 988, 988, - 988, 988, 988, 989, 989, 0, 989, 0, 989, 989, - 989, 990, 990, 0, 990, 990, 990, 990, 990, 991, - 991, 991, 991, 991, 991, 991, 991, 992, 992, 992, - 992, 992, 992, 992, 992, 993, 993, 0, 0, 993, - - 993, 995, 995, 995, 995, 995, 995, 995, 995, 996, - 996, 996, 996, 996, 996, 996, 996, 997, 997, 997, - 997, 997, 997, 997, 997, 998, 998, 998, 998, 998, - 998, 998, 998, 1000, 1000, 1000, 1000, 1000, 1000, 1000, - 1000, 1001, 1001, 0, 1001, 1001, 1001, 1001, 1001, 1002, - 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1003, 1003, 1003, - 1003, 1003, 1003, 1003, 1003, 1004, 1004, 0, 1004, 0, - 1004, 1004, 1004, 1005, 1005, 0, 1005, 1005, 1005, 1005, - 1005, 1007, 1007, 0, 1007, 1007, 1007, 1007, 1007, 1008, - 0, 0, 1008, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - - 1009, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1011, - 1011, 0, 0, 1011, 1011, 1013, 1013, 1013, 1013, 1013, - 1013, 1013, 1013, 1015, 1015, 1015, 1015, 1015, 1015, 1015, - 1015, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1018, - 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1019, 1019, 1019, - 1019, 1019, 1019, 1019, 1019, 1020, 1020, 1020, 1020, 1020, - 1020, 1020, 1020, 1021, 1021, 1021, 1021, 1021, 1021, 1021, - 1021, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1023, - 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1024, 1024, 1024, - 1024, 1024, 1024, 1024, 1024, 1025, 1025, 1025, 1025, 1025, - - 1025, 1025, 1025, 1026, 1026, 1026, 1026, 1026, 1026, 1026, - 1026, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1028, - 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1029, 1029, 1029, - 1029, 1029, 1029, 1029, 1029, 1030, 1030, 1030, 1030, 1030, - 1030, 1030, 1030, 1031, 1031, 1031, 1031, 1031, 1031, 1031, - 1031, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1033, - 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1034, 1034, 0, - 1034, 1034, 1034, 1034, 1034, 1035, 0, 0, 1035, 1036, - 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1037, 1037, 1037, - 1037, 1037, 1037, 1037, 1037, 1038, 1038, 1038, 1038, 1038, - - 1038, 1038, 1038, 1040, 1040, 1040, 1040, 1040, 1040, 1040, - 1040, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1042, - 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1043, 1043, 1043, - 1043, 1043, 1043, 1043, 1043, 1044, 1044, 1044, 1044, 1044, - 1044, 1044, 1044, 1045, 1045, 1045, 1045, 1045, 1045, 1045, - 1045, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1047, - 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1048, 1048, 1048, - 1048, 1048, 1048, 1048, 1048, 1049, 1049, 1049, 1049, 1049, - 1049, 1049, 1049, 1050, 1050, 1050, 1050, 1050, 1050, 1050, - 1050, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1052, - - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1053, 1053, 1053, - 1053, 1053, 1053, 1053, 1053, 1054, 1054, 1054, 1054, 1054, - 1054, 1054, 1054, 1055, 1055, 1055, 1055, 1055, 1055, 1055, - 1055, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1057, - 1057, 0, 1057, 1057, 1057, 1057, 1057, 1058, 0, 0, - 1058, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1060, - 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1061, 1061, 1061, - 1061, 1061, 1061, 1061, 1061, 1062, 1062, 1062, 1062, 1062, - 1062, 1062, 1062, 1063, 1063, 1063, 1063, 1063, 1063, 1063, - 1063, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1065, - - 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1066, 1066, 1066, - 1066, 1066, 1066, 1066, 1066, 1067, 1067, 1067, 1067, 1067, - 1067, 1067, 1067, 1068, 1068, 1068, 1068, 1068, 1068, 1068, - 1068, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1070, - 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1071, 1071, 1071, - 1071, 1071, 1071, 1071, 1071, 1072, 1072, 1072, 1072, 1072, - 1072, 1072, 1072, 1073, 1073, 1073, 1073, 1073, 1073, 1073, - 1073, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1075, - 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1076, 1076, 1076, - 1076, 1076, 1076, 1076, 1076, 1077, 1077, 1077, 1077, 1077, - - 1077, 1077, 1077, 1078, 1078, 1078, 1078, 1078, 1078, 1078, - 1078, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1080, - 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1081, 1081, 1081, - 1081, 1081, 1081, 1081, 1081, 1082, 1082, 1082, 1082, 1082, - 1082, 1082, 1082, 1083, 1083, 0, 1083, 1083, 1083, 1083, - 1083, 1084, 0, 0, 1084, 1085, 1085, 1085, 1085, 1085, - 1085, 1085, 1085, 1086, 1086, 1086, 1086, 1086, 1086, 1086, - 1086, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1089, 1089, 1089, - 1089, 1089, 1089, 1089, 1089, 1090, 1090, 1090, 1090, 1090, - - 1090, 1090, 1090, 1091, 1091, 1091, 1091, 1091, 1091, 1091, - 1091, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1093, - 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1095, 1095, 1095, 1095, 1095, - 1095, 1095, 1095, 1096, 1096, 1096, 1096, 1096, 1096, 1096, - 1096, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1098, - 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1100, 1100, 1100, 1100, 1100, - 1100, 1100, 1100, 1101, 1101, 1101, 1101, 1101, 1101, 1101, - 1101, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1103, - - 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1104, 1104, 1104, - 1104, 1104, 1104, 1104, 1104, 1105, 1105, 1105, 1105, 1105, - 1105, 1105, 1105, 1106, 1106, 1106, 1106, 1106, 1106, 1106, - 1106, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1108, - 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1109, 1109, 0, - 1109, 1109, 1109, 1109, 1109, 1110, 0, 0, 1110, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1112, 1112, 1112, - 1112, 1112, 1112, 1112, 1112, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1114, 1114, 1114, 1114, 1114, 1114, 1114, - 1114, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1116, - - 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1117, 1117, 1117, - 1117, 1117, 1117, 1117, 1117, 1118, 1118, 0, 1118, 1118, - 1118, 1118, 1118, 1119, 1119, 1119, 1119, 1119, 1119, 1119, - 1119, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 976, 976 - } ; - -static yy_state_type yy_last_accepting_state; -static char *yy_last_accepting_cpos; - -extern int vrmlyy_flex_debug; -int vrmlyy_flex_debug = 0; - -/* The intent behind this definition is that it'll catch - * any uses of REJECT which flex missed. - */ -#define REJECT reject_used_but_not_detected -#define yymore() yymore_used_but_not_detected -#define YY_MORE_ADJ 0 -#define YY_RESTORE_YY_MORE_OFFSET -char *vrmlyytext; -#line 1 "vrmlLexer.lxx" -/* -// Filename: vrmlLexer.lxx -// Created by: drose (01Oct04) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) Carnegie Mellon University. All rights reserved. -// -// All use of this software is subject to the terms of the revised BSD -// license. You should have received a copy of this license along -// with this source code in a file named "LICENSE." -// -//////////////////////////////////////////////////////////////////// -*/ -/************************************************** - * VRML 2.0 Parser - * Copyright (C) 1996 Silicon Graphics, Inc. - * - * Author(s) : Gavin Bell - * Daniel Woods (first port) - ************************************************** - */ -#line 26 "vrmlLexer.lxx" -#include "pandatoolbase.h" - -#include "vrmlNode.h" -#include "vrmlParser.h" -#include "pnotify.h" -#include "pstrtod.h" - -static int yyinput(void); // declared by flex. -extern "C" int vrmlyywrap(); - -//////////////////////////////////////////////////////////////////// -// Static variables -//////////////////////////////////////////////////////////////////// - -// We'll increment line_number as we parse the file, so -// that we can report the position of an error. -static int line_number = 0; - -// current_line holds as much of the current line as will fit. Its -// only purpose is for printing it out to report an error to the user. -static const int max_error_width = 1024; -static char current_line[max_error_width + 1]; - -static int error_count = 0; -static int warning_count = 0; - -// This is the pointer to the current input stream. -static istream *inp = NULL; - -// This is the name of the vrml file we're parsing. We keep it so we -// can print it out for error messages. -static string vrml_filename; - -extern void vrmlyyerror(const string &); - - /* The YACC parser sets this to a token to direct the lexer */ - /* in cases where just syntax isn't enough: */ -int expectToken = 0; - - /* True when parsing a multiple-valued field: */ -static int parsing_mf = 0; - - /* These are used when parsing SFImage fields: */ -static int sfImageIntsParsed = 0; -static int sfImageIntsExpected = 0; - -// This is used while scanning a quoted string. -static string quoted_string; - -// And this keeps track of the currently-parsing array. -static MFArray *mfarray; - -void -vrml_init_lexer(istream &in, const string &filename) { - inp = ∈ - vrml_filename = filename; - line_number = 0; - error_count = 0; - warning_count = 0; -} - -//////////////////////////////////////////////////////////////////// -// Internal support functions. -//////////////////////////////////////////////////////////////////// - -int -vrmlyywrap(void) { - return 1; -} - -void -vrmlyyerror(const string &msg) { - cerr << "\nError"; - if (!vrml_filename.empty()) { - cerr << " in " << vrml_filename; - } - cerr - << " at line " << line_number << ":\n" - << current_line << "\n"; - - error_count++; -} - -void -vrmlyywarning(const string &msg) { - cerr << "\nWarning"; - if (!vrml_filename.empty()) { - cerr << " in " << vrml_filename; - } - cerr - << " at line " << line_number << ":\n" - << current_line << "\n"; - - warning_count++; -} - -// Now define a function to take input from an istream instead of a -// stdio FILE pointer. This is flex-specific. -static void -input_chars(char *buffer, int &result, int max_size) { - nassertv(inp != NULL); - if (*inp) { - inp->read(buffer, max_size); - result = inp->gcount(); - if (result >= 0 && result < max_size) { - // Truncate at the end of the read. - buffer[result] = '\0'; - } - - if (line_number == 0) { - // This is a special case. If we are reading the very first bit - // from the stream, copy it into the current_line array. This - // is because the \n.* rule below, which fills current_line - // normally, doesn't catch the first line. - strncpy(current_line, vrmlyytext, max_error_width); - current_line[max_error_width] = '\0'; - line_number++; - - // Truncate it at the newline. - char *end = strchr(current_line, '\n'); - if (end != NULL) { - *end = '\0'; - } - } - - } else { - // End of file or I/O error. - result = 0; - } -} -#undef YY_INPUT -#define YY_INPUT(buffer, result, max_size) input_chars(buffer, result, max_size) - -int extract_int() { - return strtol(vrmlyytext, NULL, 0); -} - -double extract_float() { - return patof(vrmlyytext); -} - -void extract_vec(double vec[], int num_elements) { - char *p = vrmlyytext; - for (int i = 0; i < num_elements; i++) { - vec[i] = pstrtod(p, &p); - } -} - -/* Normal state: parsing nodes. The initial start state is used */ -/* only to recognize the VRML header. */ - -/* Start tokens for all of the field types, */ -/* except for MFNode and SFNode, which are almost completely handled */ -/* by the parser: */ - - - -/* Big hairy expression for floating point numbers: */ -/* Ints are decimal or hex (0x##): */ -/* Whitespace. Using this pattern can screw up currentLineNumber, */ -/* so it is only used wherever it is really convenient and it is */ -/* extremely unlikely that the user will put in a carriage return */ -/* (example: between the floats in an SFVec3f) */ -/* And the same pattern without the newline */ -/* Here's a pattern that matches a single newline character. */ -/* Legal characters to start an identifier */ -/* Legal other characters in an identifier */ -/*idRestChar ([^\x00-\x20\x22\x23\x27\x2b-\x2e\x5b-\x5d\x7b\x7d])*/ -/* Allow hyphen (0x2d) in identifiers. */ -#line 2920 "lex.yy.c" - -#define INITIAL 0 -#define NODE 1 -#define SFB 2 -#define SFC 3 -#define SFF 4 -#define SFIMG 5 -#define SFI 6 -#define SFR 7 -#define SFS 8 -#define SFT 9 -#define SFV2 10 -#define SFV3 11 -#define MFC 12 -#define MFF 13 -#define MFI 14 -#define MFR 15 -#define MFS 16 -#define MFV2 17 -#define MFV3 18 -#define IN_SFS 19 -#define IN_MFS 20 -#define IN_SFIMG 21 - -#ifndef YY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -#endif - -#ifndef YY_EXTRA_TYPE -#define YY_EXTRA_TYPE void * -#endif - -static int yy_init_globals (void ); - -/* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - -int vrmlyylex_destroy (void ); - -int vrmlyyget_debug (void ); - -void vrmlyyset_debug (int debug_flag ); - -YY_EXTRA_TYPE vrmlyyget_extra (void ); - -void vrmlyyset_extra (YY_EXTRA_TYPE user_defined ); - -FILE *vrmlyyget_in (void ); - -void vrmlyyset_in (FILE * in_str ); - -FILE *vrmlyyget_out (void ); - -void vrmlyyset_out (FILE * out_str ); - -int vrmlyyget_leng (void ); - -char *vrmlyyget_text (void ); - -int vrmlyyget_lineno (void ); - -void vrmlyyset_lineno (int line_number ); - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int vrmlyywrap (void ); -#else -extern int vrmlyywrap (void ); -#endif -#endif - - static void yyunput (int c,char *buf_ptr ); - -#ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int ); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * ); -#endif - -#ifndef YY_NO_INPUT - -#ifdef __cplusplus -static int yyinput (void ); -#else -static int input (void ); -#endif - -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Copy whatever the last rule matched to the standard output. */ -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO fwrite( vrmlyytext, vrmlyyleng, 1, vrmlyyout ) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ - { \ - int c = '*'; \ - int n; \ - for ( n = 0; n < max_size && \ - (c = getc( vrmlyyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( vrmlyyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else \ - { \ - errno=0; \ - while ( (result = fread(buf, 1, max_size, vrmlyyin))==0 && ferror(vrmlyyin)) \ - { \ - if( errno != EINTR) \ - { \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - break; \ - } \ - errno=0; \ - clearerr(vrmlyyin); \ - } \ - }\ -\ - -#endif - -/* No semi-colon after return; correct usage is to write "yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef yyterminate -#define yyterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) -#endif - -/* end tables serialization structures and prototypes */ - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL_IS_OURS 1 - -extern int vrmlyylex (void); - -#define YY_DECL int vrmlyylex (void) -#endif /* !YY_DECL */ - -/* Code executed at the beginning of each rule, after vrmlyytext and vrmlyyleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK break; -#endif - -#define YY_RULE_SETUP \ - YY_USER_ACTION - -/** The main scanner function which does all the work. - */ -YY_DECL -{ - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; - -#line 210 "vrmlLexer.lxx" - - - - /* Switch into a new start state if the parser */ - /* just told us that we've read a field name */ - /* and should expect a field value (or IS) */ - if (expectToken != 0) { - - /* - * Annoying. This big switch is necessary because - * LEX wants to assign particular numbers to start - * tokens, and YACC wants to define all the tokens - * used, too. Sigh. - */ - switch(expectToken) { - case SFBOOL: BEGIN SFB; break; - case SFCOLOR: BEGIN SFC; break; - case SFFLOAT: BEGIN SFF; break; - case SFIMAGE: BEGIN SFIMG; break; - case SFINT32: BEGIN SFI; break; - case SFROTATION: BEGIN SFR; break; - case SFSTRING: BEGIN SFS; break; - case SFTIME: BEGIN SFT; break; - case SFVEC2F: BEGIN SFV2; break; - case SFVEC3F: BEGIN SFV3; break; - case MFCOLOR: BEGIN MFC; break; - case MFFLOAT: BEGIN MFF; break; - case MFINT32: BEGIN MFI; break; - case MFROTATION: BEGIN MFR; break; - case MFSTRING: BEGIN MFS; break; - case MFVEC2F: BEGIN MFV2; break; - case MFVEC3F: BEGIN MFV3; break; - - /* SFNode and MFNode are special. Here the lexer just returns */ - /* "marker tokens" so the parser knows what type of field is */ - /* being parsed; unlike the other fields, parsing of SFNode/MFNode */ - /* field happens in the parser. */ - case MFNODE: expectToken = 0; return MFNODE; - case SFNODE: expectToken = 0; return SFNODE; - - default: vrmlyyerror("ACK: Bad expectToken"); break; - } - } - - - /* This is more complicated than they really need to be because */ - /* I was ambitious and made the whitespace-matching rule aggressive */ -#line 3171 "lex.yy.c" - - if ( !(yy_init) ) - { - (yy_init) = 1; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! (yy_start) ) - (yy_start) = 1; /* first start state */ - - if ( ! vrmlyyin ) - vrmlyyin = stdin; - - if ( ! vrmlyyout ) - vrmlyyout = stdout; - - if ( ! YY_CURRENT_BUFFER ) { - vrmlyyensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - vrmlyy_create_buffer(vrmlyyin,YY_BUF_SIZE ); - } - - vrmlyy_load_buffer_state( ); - } - - while ( 1 ) /* loops until end-of-file is reached */ - { - yy_cp = (yy_c_buf_p); - - /* Support of vrmlyytext. */ - *yy_cp = (yy_hold_char); - - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - - yy_current_state = (yy_start); -yy_match: - do - { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 977 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - ++yy_cp; - } - while ( yy_base[yy_current_state] != 8632 ); - -yy_find_action: - yy_act = yy_accept[yy_current_state]; - if ( yy_act == 0 ) - { /* have to back up */ - yy_cp = (yy_last_accepting_cpos); - yy_current_state = (yy_last_accepting_state); - yy_act = yy_accept[yy_current_state]; - } - - YY_DO_BEFORE_ACTION; - -do_action: /* This label is used only to access EOF actions. */ - - switch ( yy_act ) - { /* beginning of action switch */ - case 0: /* must back up */ - /* undo the effects of YY_DO_BEFORE_ACTION */ - *yy_cp = (yy_hold_char); - yy_cp = (yy_last_accepting_cpos); - yy_current_state = (yy_last_accepting_state); - goto yy_find_action; - -case 1: -/* rule 1 can match eol */ -YY_RULE_SETUP -#line 257 "vrmlLexer.lxx" -{ - BEGIN NODE; -} - YY_BREAK -/* The lexer is in the NODE state when parsing nodes, either */ -/* top-level nodes in the .wrl file, in a prototype implementation, */ -/* or when parsing the contents of SFNode or MFNode fields. */ -case 2: -YY_RULE_SETUP -#line 264 "vrmlLexer.lxx" -{ return PROTO; } - YY_BREAK -case 3: -YY_RULE_SETUP -#line 265 "vrmlLexer.lxx" -{ return EXTERNPROTO; } - YY_BREAK -case 4: -YY_RULE_SETUP -#line 266 "vrmlLexer.lxx" -{ return DEF; } - YY_BREAK -case 5: -YY_RULE_SETUP -#line 267 "vrmlLexer.lxx" -{ return USE; } - YY_BREAK -case 6: -YY_RULE_SETUP -#line 268 "vrmlLexer.lxx" -{ return TO; } - YY_BREAK -case 7: -YY_RULE_SETUP -#line 269 "vrmlLexer.lxx" -{ return IS; } - YY_BREAK -case 8: -YY_RULE_SETUP -#line 270 "vrmlLexer.lxx" -{ return ROUTE; } - YY_BREAK -case 9: -YY_RULE_SETUP -#line 271 "vrmlLexer.lxx" -{ return SFN_NULL; } - YY_BREAK -case 10: -YY_RULE_SETUP -#line 272 "vrmlLexer.lxx" -{ return EVENTIN; } - YY_BREAK -case 11: -YY_RULE_SETUP -#line 273 "vrmlLexer.lxx" -{ return EVENTOUT; } - YY_BREAK -case 12: -YY_RULE_SETUP -#line 274 "vrmlLexer.lxx" -{ return FIELD; } - YY_BREAK -case 13: -YY_RULE_SETUP -#line 275 "vrmlLexer.lxx" -{ return EXPOSEDFIELD; } - YY_BREAK -/* Legal identifiers: */ -case 14: -YY_RULE_SETUP -#line 278 "vrmlLexer.lxx" -{ - vrmlyylval.string = strdup(vrmlyytext); - return IDENTIFIER; -} - YY_BREAK -/* This hopefully won't bitch things too much. It's not legal for - an identifier to begin with a digit, but Form-Z writes out VRML - files that do. So we'll allow it. Hopefully the start states - will keep them sorted out. */ -case 15: -YY_RULE_SETUP -#line 286 "vrmlLexer.lxx" -{ - vrmlyylval.string = strdup(vrmlyytext); - return IDENTIFIER; -} - YY_BREAK -/* All fields may have an IS declaration: */ -case 16: -YY_RULE_SETUP -#line 292 "vrmlLexer.lxx" -{ - BEGIN NODE; - expectToken = 0; - yyless(0); -} - YY_BREAK -case 17: -YY_RULE_SETUP -#line 298 "vrmlLexer.lxx" -{ - BEGIN NODE; - expectToken = 0; - yyless(0); /* put back the IS */ -} - YY_BREAK -/* All MF field types other than MFNode are completely parsed here */ -/* in the lexer, and one token is returned to the parser. They all */ -/* share the same rules for open and closing brackets: */ -case 18: -YY_RULE_SETUP -#line 307 "vrmlLexer.lxx" -{ - if (parsing_mf) vrmlyyerror("Double ["); - parsing_mf = 1; - mfarray = new MFArray; -} - YY_BREAK -case 19: -YY_RULE_SETUP -#line 313 "vrmlLexer.lxx" -{ - if (!parsing_mf) vrmlyyerror("Unmatched ]"); - int fieldType = expectToken; - BEGIN NODE; - parsing_mf = 0; - expectToken = 0; - vrmlyylval.fv._mf = mfarray; - return fieldType; -} - YY_BREAK -case 20: -YY_RULE_SETUP -#line 323 "vrmlLexer.lxx" -{ - BEGIN NODE; - expectToken = 0; - vrmlyylval.fv._sfbool = true; - return SFBOOL; -} - YY_BREAK -case 21: -YY_RULE_SETUP -#line 330 "vrmlLexer.lxx" -{ - BEGIN NODE; - expectToken = 0; - vrmlyylval.fv._sfbool = false; - return SFBOOL; -} - YY_BREAK -case 22: -YY_RULE_SETUP -#line 337 "vrmlLexer.lxx" -{ - BEGIN NODE; - expectToken = 0; - vrmlyylval.fv._sfint32 = extract_int(); - return SFINT32; -} - YY_BREAK -case 23: -YY_RULE_SETUP -#line 344 "vrmlLexer.lxx" -{ - VrmlFieldValue v; - v._sfint32 = extract_int(); - if (parsing_mf) { - mfarray->push_back(v); - } else { - BEGIN NODE; - expectToken = 0; - vrmlyylval.fv._mf = new MFArray; - vrmlyylval.fv._mf->push_back(v); - return MFINT32; - } -} - YY_BREAK -/* All the floating-point types are pretty similar: */ -case 24: -YY_RULE_SETUP -#line 359 "vrmlLexer.lxx" -{ - BEGIN NODE; - expectToken = 0; - vrmlyylval.fv._sffloat = extract_float(); - return SFFLOAT; -} - YY_BREAK -case 25: -YY_RULE_SETUP -#line 366 "vrmlLexer.lxx" -{ - VrmlFieldValue v; - v._sffloat = extract_float(); - if (parsing_mf) { - /* Add to array... */ - mfarray->push_back(v); - } else { - /* No open bracket means a single value: */ - BEGIN NODE; - expectToken = 0; - vrmlyylval.fv._mf = new MFArray; - vrmlyylval.fv._mf->push_back(v); - return MFFLOAT; - } -} - YY_BREAK -case 26: -/* rule 26 can match eol */ -YY_RULE_SETUP -#line 382 "vrmlLexer.lxx" -{ - BEGIN NODE; - expectToken = 0; - extract_vec(vrmlyylval.fv._sfvec, 2); - return SFVEC2F; -} - YY_BREAK -case 27: -/* rule 27 can match eol */ -YY_RULE_SETUP -#line 389 "vrmlLexer.lxx" -{ - VrmlFieldValue v; - extract_vec(v._sfvec, 2); - if (parsing_mf) { - mfarray->push_back(v); - } else { - BEGIN NODE; - expectToken = 0; - vrmlyylval.fv._mf = new MFArray; - vrmlyylval.fv._mf->push_back(v); - return MFVEC2F; - } -} - YY_BREAK -case 28: -/* rule 28 can match eol */ -YY_RULE_SETUP -#line 403 "vrmlLexer.lxx" -{ - BEGIN NODE; - expectToken = 0; - extract_vec(vrmlyylval.fv._sfvec, 3); - return SFVEC3F; -} - YY_BREAK -case 29: -/* rule 29 can match eol */ -YY_RULE_SETUP -#line 410 "vrmlLexer.lxx" -{ - VrmlFieldValue v; - extract_vec(v._sfvec, 3); - if (parsing_mf) { - mfarray->push_back(v); - } else { - BEGIN NODE; - expectToken = 0; - vrmlyylval.fv._mf = new MFArray; - vrmlyylval.fv._mf->push_back(v); - return MFVEC3F; - } -} - YY_BREAK -case 30: -/* rule 30 can match eol */ -YY_RULE_SETUP -#line 424 "vrmlLexer.lxx" -{ - BEGIN NODE; - expectToken = 0; - extract_vec(vrmlyylval.fv._sfvec, 4); - return SFROTATION; -} - YY_BREAK -case 31: -/* rule 31 can match eol */ -YY_RULE_SETUP -#line 431 "vrmlLexer.lxx" -{ - VrmlFieldValue v; - extract_vec(v._sfvec, 4); - if (parsing_mf) { - mfarray->push_back(v); - } else { - BEGIN NODE; - expectToken = 0; - vrmlyylval.fv._mf = new MFArray; - vrmlyylval.fv._mf->push_back(v); - return MFROTATION; - } -} - YY_BREAK -case 32: -/* rule 32 can match eol */ -YY_RULE_SETUP -#line 445 "vrmlLexer.lxx" -{ - BEGIN NODE; - expectToken = 0; - extract_vec(vrmlyylval.fv._sfvec, 3); - return SFCOLOR; -} - YY_BREAK -case 33: -/* rule 33 can match eol */ -YY_RULE_SETUP -#line 452 "vrmlLexer.lxx" -{ - VrmlFieldValue v; - extract_vec(v._sfvec, 3); - if (parsing_mf) { - mfarray->push_back(v); - } else { - BEGIN NODE; - expectToken = 0; - vrmlyylval.fv._mf = new MFArray; - vrmlyylval.fv._mf->push_back(v); - return MFCOLOR; - } -} - YY_BREAK -case 34: -YY_RULE_SETUP -#line 466 "vrmlLexer.lxx" -{ - BEGIN NODE; - expectToken = 0; - vrmlyylval.fv._sffloat = extract_float(); - return SFTIME; -} - YY_BREAK -/* SFString/MFString */ -case 35: -YY_RULE_SETUP -#line 474 "vrmlLexer.lxx" -{ - BEGIN IN_SFS; - quoted_string = ""; -} - YY_BREAK -case 36: -YY_RULE_SETUP -#line 479 "vrmlLexer.lxx" -{ - BEGIN IN_MFS; - quoted_string = ""; -} - YY_BREAK -/* Anything besides open-quote (or whitespace) is an error: */ -case 37: -YY_RULE_SETUP -#line 485 "vrmlLexer.lxx" -{ - vrmlyyerror("String missing open-quote"); - BEGIN NODE; - expectToken = 0; - vrmlyylval.fv._sfstring = strdup(""); - return SFSTRING; -} - YY_BREAK -/* Expect open-quote, open-bracket, or whitespace: */ -case 38: -YY_RULE_SETUP -#line 494 "vrmlLexer.lxx" -{ - vrmlyyerror("String missing open-quote"); - BEGIN NODE; - expectToken = 0; - return MFSTRING; -} - YY_BREAK -/* Backslashed-quotes are OK: */ -case 39: -YY_RULE_SETUP -#line 502 "vrmlLexer.lxx" -{ - quoted_string += '"'; -} - YY_BREAK -/* Gobble up anything besides quotes and newlines. */ -/* Newlines are legal in strings, but we exclude them here so */ -/* that line number are counted correctly by the catch-all newline */ -/* rule that applies to everything. */ -case 40: -YY_RULE_SETUP -#line 510 "vrmlLexer.lxx" -{ - quoted_string += vrmlyytext; -} - YY_BREAK -/* Quote ends the string: */ -case 41: -YY_RULE_SETUP -#line 515 "vrmlLexer.lxx" -{ - BEGIN NODE; - expectToken = 0; - vrmlyylval.fv._sfstring = strdup(quoted_string.c_str()); - return SFSTRING; -} - YY_BREAK -case 42: -YY_RULE_SETUP -#line 522 "vrmlLexer.lxx" -{ - VrmlFieldValue v; - v._sfstring = strdup(quoted_string.c_str()); - if (parsing_mf) { - BEGIN MFS; - mfarray->push_back(v); - quoted_string = ""; - } else { - BEGIN NODE; - expectToken = 0; - vrmlyylval.fv._mf = new MFArray; - vrmlyylval.fv._mf->push_back(v); - return MFSTRING; - } -} - YY_BREAK -/* SFImage: width height numComponents then width*height integers: */ -case 43: -/* rule 43 can match eol */ -YY_RULE_SETUP -#line 539 "vrmlLexer.lxx" -{ int w, h; - sscanf(vrmlyytext, "%d %d", &w, &h); - sfImageIntsExpected = 1+w*h; - sfImageIntsParsed = 0; - BEGIN IN_SFIMG; - } - YY_BREAK -case 44: -YY_RULE_SETUP -#line 545 "vrmlLexer.lxx" -{ ++sfImageIntsParsed; - if (sfImageIntsParsed == sfImageIntsExpected) { - BEGIN NODE; expectToken = 0; return SFIMAGE; - } - } - YY_BREAK -/* Whitespace and catch-all rules apply to all start states: */ -case 45: -YY_RULE_SETUP -#line 552 "vrmlLexer.lxx" -; - YY_BREAK -/* A newline is also whitespace, but we'll keep track of line number */ -/* to report in errors: */ -case 46: -/* rule 46 can match eol */ -YY_RULE_SETUP -#line 556 "vrmlLexer.lxx" -{ - // Save a copy of the line so we can print it out for the benefit of - // the user in case we get an error. - strncpy(current_line, vrmlyytext+1, max_error_width); - current_line[max_error_width] = '\0'; - line_number++; - - // Return the whole line to the lexer, except the newline character, - // which we eat. - yyless(1); -} - YY_BREAK -/* This catch-all rule catches anything not covered by any of */ -/* the above: */ -case 47: -YY_RULE_SETUP -#line 570 "vrmlLexer.lxx" -{ - return vrmlyytext[0]; -} - YY_BREAK -case 48: -YY_RULE_SETUP -#line 574 "vrmlLexer.lxx" -ECHO; - YY_BREAK -#line 3741 "lex.yy.c" -case YY_STATE_EOF(INITIAL): -case YY_STATE_EOF(NODE): -case YY_STATE_EOF(SFB): -case YY_STATE_EOF(SFC): -case YY_STATE_EOF(SFF): -case YY_STATE_EOF(SFIMG): -case YY_STATE_EOF(SFI): -case YY_STATE_EOF(SFR): -case YY_STATE_EOF(SFS): -case YY_STATE_EOF(SFT): -case YY_STATE_EOF(SFV2): -case YY_STATE_EOF(SFV3): -case YY_STATE_EOF(MFC): -case YY_STATE_EOF(MFF): -case YY_STATE_EOF(MFI): -case YY_STATE_EOF(MFR): -case YY_STATE_EOF(MFS): -case YY_STATE_EOF(MFV2): -case YY_STATE_EOF(MFV3): -case YY_STATE_EOF(IN_SFS): -case YY_STATE_EOF(IN_MFS): -case YY_STATE_EOF(IN_SFIMG): - yyterminate(); - - case YY_END_OF_BUFFER: - { - /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = (yy_hold_char); - YY_RESTORE_YY_MORE_OFFSET - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed vrmlyyin at a new source and called - * vrmlyylex(). If so, then we have to assure - * consistency between YY_CURRENT_BUFFER and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - YY_CURRENT_BUFFER_LVALUE->yy_input_file = vrmlyyin; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; - } - - /* Note that here we test for yy_c_buf_p "<=" to the position - * of the first EOB in the buffer, since yy_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) - { /* This was really a NUL. */ - yy_state_type yy_next_state; - - (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( ); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * yy_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - yy_next_state = yy_try_NUL_trans( yy_current_state ); - - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - - if ( yy_next_state ) - { - /* Consume the NUL. */ - yy_cp = ++(yy_c_buf_p); - yy_current_state = yy_next_state; - goto yy_match; - } - - else - { - yy_cp = (yy_c_buf_p); - goto yy_find_action; - } - } - - else switch ( yy_get_next_buffer( ) ) - { - case EOB_ACT_END_OF_FILE: - { - (yy_did_buffer_switch_on_eof) = 0; - - if ( vrmlyywrap( ) ) - { - /* Note: because we've taken care in - * yy_get_next_buffer() to have set up - * vrmlyytext, we can now set up - * yy_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; - - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! (yy_did_buffer_switch_on_eof) ) - YY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - (yy_c_buf_p) = - (yytext_ptr) + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( ); - - yy_cp = (yy_c_buf_p); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - goto yy_match; - - case EOB_ACT_LAST_MATCH: - (yy_c_buf_p) = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; - - yy_current_state = yy_get_previous_state( ); - - yy_cp = (yy_c_buf_p); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - goto yy_find_action; - } - break; - } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ -} /* end of vrmlyylex */ - -/* yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ -static int yy_get_next_buffer (void) -{ - register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - register char *source = (yytext_ptr); - register int number_to_move, i; - int ret_val; - - if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) - { - /* We matched a single character, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } - } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; - - else - { - int num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER; - - int yy_c_buf_p_offset = - (int) ((yy_c_buf_p) - b->yy_ch_buf); - - if ( b->yy_is_our_buffer ) - { - int new_size = b->yy_buf_size * 2; - - if ( new_size <= 0 ) - b->yy_buf_size += b->yy_buf_size / 8; - else - b->yy_buf_size *= 2; - - b->yy_ch_buf = (char *) - /* Include room in for 2 EOB chars. */ - vrmlyyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); - } - else - /* Can't grow it, we don't own it. */ - b->yy_ch_buf = 0; - - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( - "fatal error - scanner input buffer overflow" ); - - (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; - - num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - - number_to_move - 1; - - } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - (yy_n_chars), (size_t) num_to_read ); - - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - if ( (yy_n_chars) == 0 ) - { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - vrmlyyrestart(vrmlyyin ); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = - YY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { - /* Extend the array by 50%, plus the number we really need. */ - yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) vrmlyyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); - if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); - } - - (yy_n_chars) += number_to_move; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; - - (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; - - return ret_val; -} - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - - static yy_state_type yy_get_previous_state (void) -{ - register yy_state_type yy_current_state; - register char *yy_cp; - - yy_current_state = (yy_start); - - for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) - { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 977 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - } - - return yy_current_state; -} - -/* yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = yy_try_NUL_trans( current_state ); - */ - static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) -{ - register int yy_is_jam; - register char *yy_cp = (yy_c_buf_p); - - register YY_CHAR yy_c = 1; - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 977 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 976); - - return yy_is_jam ? 0 : yy_current_state; -} - - static void yyunput (int c, register char * yy_bp ) -{ - register char *yy_cp; - - yy_cp = (yy_c_buf_p); - - /* undo effects of setting up vrmlyytext */ - *yy_cp = (yy_hold_char); - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - { /* need to shift things up to make room */ - /* +2 for EOB chars. */ - register int number_to_move = (yy_n_chars) + 2; - register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ - YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; - register char *source = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; - - while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - *--dest = *--source; - - yy_cp += (int) (dest - source); - yy_bp += (int) (dest - source); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - YY_FATAL_ERROR( "flex scanner push-back overflow" ); - } - - *--yy_cp = (char) c; - - (yytext_ptr) = yy_bp; - (yy_hold_char) = *yy_cp; - (yy_c_buf_p) = yy_cp; -} - -#ifndef YY_NO_INPUT -#ifdef __cplusplus - static int yyinput (void) -#else - static int input (void) -#endif - -{ - int c; - - *(yy_c_buf_p) = (yy_hold_char); - - if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) - { - /* yy_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) - /* This was really a NUL. */ - *(yy_c_buf_p) = '\0'; - - else - { /* need more input */ - int offset = (yy_c_buf_p) - (yytext_ptr); - ++(yy_c_buf_p); - - switch ( yy_get_next_buffer( ) ) - { - case EOB_ACT_LAST_MATCH: - /* This happens because yy_g_n_b() - * sees that we've accumulated a - * token and flags that we need to - * try matching the token before - * proceeding. But for input(), - * there's no matching to consider. - * So convert the EOB_ACT_LAST_MATCH - * to EOB_ACT_END_OF_FILE. - */ - - /* Reset buffer status. */ - vrmlyyrestart(vrmlyyin ); - - /*FALLTHROUGH*/ - - case EOB_ACT_END_OF_FILE: - { - if ( vrmlyywrap( ) ) - return EOF; - - if ( ! (yy_did_buffer_switch_on_eof) ) - YY_NEW_FILE; -#ifdef __cplusplus - return yyinput(); -#else - return input(); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - (yy_c_buf_p) = (yytext_ptr) + offset; - break; - } - } - } - - c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ - *(yy_c_buf_p) = '\0'; /* preserve vrmlyytext */ - (yy_hold_char) = *++(yy_c_buf_p); - - return c; -} -#endif /* ifndef YY_NO_INPUT */ - -/** Immediately switch to a different input stream. - * @param input_file A readable stream. - * - * @note This function does not reset the start condition to @c INITIAL . - */ - void vrmlyyrestart (FILE * input_file ) -{ - - if ( ! YY_CURRENT_BUFFER ){ - vrmlyyensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - vrmlyy_create_buffer(vrmlyyin,YY_BUF_SIZE ); - } - - vrmlyy_init_buffer(YY_CURRENT_BUFFER,input_file ); - vrmlyy_load_buffer_state( ); -} - -/** Switch to a different input buffer. - * @param new_buffer The new input buffer. - * - */ - void vrmlyy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) -{ - - /* TODO. We should be able to replace this entire function body - * with - * vrmlyypop_buffer_state(); - * vrmlyypush_buffer_state(new_buffer); - */ - vrmlyyensure_buffer_stack (); - if ( YY_CURRENT_BUFFER == new_buffer ) - return; - - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(yy_c_buf_p) = (yy_hold_char); - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - YY_CURRENT_BUFFER_LVALUE = new_buffer; - vrmlyy_load_buffer_state( ); - - /* We don't actually know whether we did this switch during - * EOF (vrmlyywrap()) processing, but the only time this flag - * is looked at is after vrmlyywrap() is called, so it's safe - * to go ahead and always set it. - */ - (yy_did_buffer_switch_on_eof) = 1; -} - -static void vrmlyy_load_buffer_state (void) -{ - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; - vrmlyyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; - (yy_hold_char) = *(yy_c_buf_p); -} - -/** Allocate and initialize an input buffer state. - * @param file A readable stream. - * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. - * - * @return the allocated buffer state. - */ - YY_BUFFER_STATE vrmlyy_create_buffer (FILE * file, int size ) -{ - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) vrmlyyalloc(sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in vrmlyy_create_buffer()" ); - - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->yy_ch_buf = (char *) vrmlyyalloc(b->yy_buf_size + 2 ); - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in vrmlyy_create_buffer()" ); - - b->yy_is_our_buffer = 1; - - vrmlyy_init_buffer(b,file ); - - return b; -} - -/** Destroy the buffer. - * @param b a buffer created with vrmlyy_create_buffer() - * - */ - void vrmlyy_delete_buffer (YY_BUFFER_STATE b ) -{ - - if ( ! b ) - return; - - if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ - YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; - - if ( b->yy_is_our_buffer ) - vrmlyyfree((void *) b->yy_ch_buf ); - - vrmlyyfree((void *) b ); -} - -#ifndef __cplusplus -extern int isatty (int ); -#endif /* __cplusplus */ - -/* Initializes or reinitializes a buffer. - * This function is sometimes called more than once on the same buffer, - * such as during a vrmlyyrestart() or at EOF. - */ - static void vrmlyy_init_buffer (YY_BUFFER_STATE b, FILE * file ) - -{ - int oerrno = errno; - - vrmlyy_flush_buffer(b ); - - b->yy_input_file = file; - b->yy_fill_buffer = 1; - - /* If b is the current buffer, then vrmlyy_init_buffer was _probably_ - * called from vrmlyyrestart() or through yy_get_next_buffer. - * In that case, we don't want to reset the lineno or column. - */ - if (b != YY_CURRENT_BUFFER){ - b->yy_bs_lineno = 1; - b->yy_bs_column = 0; - } - - b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; - - errno = oerrno; -} - -/** Discard all buffered characters. On the next scan, YY_INPUT will be called. - * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. - * - */ - void vrmlyy_flush_buffer (YY_BUFFER_STATE b ) -{ - if ( ! b ) - return; - - b->yy_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->yy_buf_pos = &b->yy_ch_buf[0]; - - b->yy_at_bol = 1; - b->yy_buffer_status = YY_BUFFER_NEW; - - if ( b == YY_CURRENT_BUFFER ) - vrmlyy_load_buffer_state( ); -} - -/** Pushes the new state onto the stack. The new state becomes - * the current state. This function will allocate the stack - * if necessary. - * @param new_buffer The new state. - * - */ -void vrmlyypush_buffer_state (YY_BUFFER_STATE new_buffer ) -{ - if (new_buffer == NULL) - return; - - vrmlyyensure_buffer_stack(); - - /* This block is copied from vrmlyy_switch_to_buffer. */ - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(yy_c_buf_p) = (yy_hold_char); - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - /* Only push if top exists. Otherwise, replace top. */ - if (YY_CURRENT_BUFFER) - (yy_buffer_stack_top)++; - YY_CURRENT_BUFFER_LVALUE = new_buffer; - - /* copied from vrmlyy_switch_to_buffer. */ - vrmlyy_load_buffer_state( ); - (yy_did_buffer_switch_on_eof) = 1; -} - -/** Removes and deletes the top of the stack, if present. - * The next element becomes the new top. - * - */ -void vrmlyypop_buffer_state (void) -{ - if (!YY_CURRENT_BUFFER) - return; - - vrmlyy_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - if ((yy_buffer_stack_top) > 0) - --(yy_buffer_stack_top); - - if (YY_CURRENT_BUFFER) { - vrmlyy_load_buffer_state( ); - (yy_did_buffer_switch_on_eof) = 1; - } -} - -/* Allocates the stack if it does not exist. - * Guarantees space for at least one push. - */ -static void vrmlyyensure_buffer_stack (void) -{ - int num_to_alloc; - - if (!(yy_buffer_stack)) { - - /* First allocation is just for 2 elements, since we don't know if this - * scanner will even need a stack. We use 2 instead of 1 to avoid an - * immediate realloc on the next call. - */ - num_to_alloc = 1; - (yy_buffer_stack) = (struct yy_buffer_state**)vrmlyyalloc - (num_to_alloc * sizeof(struct yy_buffer_state*) - ); - if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in vrmlyyensure_buffer_stack()" ); - - memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - - (yy_buffer_stack_max) = num_to_alloc; - (yy_buffer_stack_top) = 0; - return; - } - - if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ - - /* Increase the buffer to prepare for a possible push. */ - int grow_size = 8 /* arbitrary grow size */; - - num_to_alloc = (yy_buffer_stack_max) + grow_size; - (yy_buffer_stack) = (struct yy_buffer_state**)vrmlyyrealloc - ((yy_buffer_stack), - num_to_alloc * sizeof(struct yy_buffer_state*) - ); - if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in vrmlyyensure_buffer_stack()" ); - - /* zero only the new slots.*/ - memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); - (yy_buffer_stack_max) = num_to_alloc; - } -} - -/** Setup the input buffer state to scan directly from a user-specified character buffer. - * @param base the character buffer - * @param size the size in bytes of the character buffer - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE vrmlyy_scan_buffer (char * base, yy_size_t size ) -{ - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return 0; - - b = (YY_BUFFER_STATE) vrmlyyalloc(sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in vrmlyy_scan_buffer()" ); - - b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ - b->yy_buf_pos = b->yy_ch_buf = base; - b->yy_is_our_buffer = 0; - b->yy_input_file = 0; - b->yy_n_chars = b->yy_buf_size; - b->yy_is_interactive = 0; - b->yy_at_bol = 1; - b->yy_fill_buffer = 0; - b->yy_buffer_status = YY_BUFFER_NEW; - - vrmlyy_switch_to_buffer(b ); - - return b; -} - -/** Setup the input buffer state to scan a string. The next call to vrmlyylex() will - * scan from a @e copy of @a str. - * @param yystr a NUL-terminated string to scan - * - * @return the newly allocated buffer state object. - * @note If you want to scan bytes that may contain NUL values, then use - * vrmlyy_scan_bytes() instead. - */ -YY_BUFFER_STATE vrmlyy_scan_string (yyconst char * yystr ) -{ - - return vrmlyy_scan_bytes(yystr,strlen(yystr) ); -} - -/** Setup the input buffer state to scan the given bytes. The next call to vrmlyylex() will - * scan from a @e copy of @a bytes. - * @param bytes the byte buffer to scan - * @param len the number of bytes in the buffer pointed to by @a bytes. - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE vrmlyy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) -{ - YY_BUFFER_STATE b; - char *buf; - yy_size_t n; - int i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = _yybytes_len + 2; - buf = (char *) vrmlyyalloc(n ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in vrmlyy_scan_bytes()" ); - - for ( i = 0; i < _yybytes_len; ++i ) - buf[i] = yybytes[i]; - - buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - - b = vrmlyy_scan_buffer(buf,n ); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in vrmlyy_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->yy_is_our_buffer = 1; - - return b; -} - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -static void yy_fatal_error (yyconst char* msg ) -{ - (void) fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); -} - -/* Redefine yyless() so it works in section 3 code. */ - -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up vrmlyytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - vrmlyytext[vrmlyyleng] = (yy_hold_char); \ - (yy_c_buf_p) = vrmlyytext + yyless_macro_arg; \ - (yy_hold_char) = *(yy_c_buf_p); \ - *(yy_c_buf_p) = '\0'; \ - vrmlyyleng = yyless_macro_arg; \ - } \ - while ( 0 ) - -/* Accessor methods (get/set functions) to struct members. */ - -/** Get the current line number. - * - */ -int vrmlyyget_lineno (void) -{ - - return vrmlyylineno; -} - -/** Get the input stream. - * - */ -FILE *vrmlyyget_in (void) -{ - return vrmlyyin; -} - -/** Get the output stream. - * - */ -FILE *vrmlyyget_out (void) -{ - return vrmlyyout; -} - -/** Get the length of the current token. - * - */ -int vrmlyyget_leng (void) -{ - return vrmlyyleng; -} - -/** Get the current token. - * - */ - -char *vrmlyyget_text (void) -{ - return vrmlyytext; -} - -/** Set the current line number. - * @param line_number - * - */ -void vrmlyyset_lineno (int line_number ) -{ - - vrmlyylineno = line_number; -} - -/** Set the input stream. This does not discard the current - * input buffer. - * @param in_str A readable stream. - * - * @see vrmlyy_switch_to_buffer - */ -void vrmlyyset_in (FILE * in_str ) -{ - vrmlyyin = in_str ; -} - -void vrmlyyset_out (FILE * out_str ) -{ - vrmlyyout = out_str ; -} - -int vrmlyyget_debug (void) -{ - return vrmlyy_flex_debug; -} - -void vrmlyyset_debug (int bdebug ) -{ - vrmlyy_flex_debug = bdebug ; -} - -static int yy_init_globals (void) -{ - /* Initialization is the same as for the non-reentrant scanner. - * This function is called from vrmlyylex_destroy(), so don't allocate here. - */ - - (yy_buffer_stack) = 0; - (yy_buffer_stack_top) = 0; - (yy_buffer_stack_max) = 0; - (yy_c_buf_p) = (char *) 0; - (yy_init) = 0; - (yy_start) = 0; - -/* Defined in main.c */ -#ifdef YY_STDINIT - vrmlyyin = stdin; - vrmlyyout = stdout; -#else - vrmlyyin = (FILE *) 0; - vrmlyyout = (FILE *) 0; -#endif - - /* For future reference: Set errno on error, since we are called by - * vrmlyylex_init() - */ - return 0; -} - -/* vrmlyylex_destroy is for both reentrant and non-reentrant scanners. */ -int vrmlyylex_destroy (void) -{ - - /* Pop the buffer stack, destroying each element. */ - while(YY_CURRENT_BUFFER){ - vrmlyy_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - vrmlyypop_buffer_state(); - } - - /* Destroy the stack itself. */ - vrmlyyfree((yy_buffer_stack) ); - (yy_buffer_stack) = NULL; - - /* Reset the globals. This is important in a non-reentrant scanner so the next time - * vrmlyylex() is called, initialization will occur. */ - yy_init_globals( ); - - return 0; -} - -/* - * Internal utility routines. - */ - -#ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) -{ - register int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; -} -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * s ) -{ - register int n; - for ( n = 0; s[n]; ++n ) - ; - - return n; -} -#endif - -void *vrmlyyalloc (yy_size_t size ) -{ - return (void *) malloc( size ); -} - -void *vrmlyyrealloc (void * ptr, yy_size_t size ) -{ - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return (void *) realloc( (char *) ptr, size ); -} - -void vrmlyyfree (void * ptr ) -{ - free( (char *) ptr ); /* see vrmlyyrealloc() for (char *) cast */ -} - -#define YYTABLES_NAME "yytables" - -#line 574 "vrmlLexer.lxx" +#line 2 "lex.yy.c" + +#line 4 "lex.yy.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define yy_create_buffer vrmlyy_create_buffer +#define yy_delete_buffer vrmlyy_delete_buffer +#define yy_flex_debug vrmlyy_flex_debug +#define yy_init_buffer vrmlyy_init_buffer +#define yy_flush_buffer vrmlyy_flush_buffer +#define yy_load_buffer_state vrmlyy_load_buffer_state +#define yy_switch_to_buffer vrmlyy_switch_to_buffer +#define yyin vrmlyyin +#define yyleng vrmlyyleng +#define yylex vrmlyylex +#define yylineno vrmlyylineno +#define yyout vrmlyyout +#define yyrestart vrmlyyrestart +#define yytext vrmlyytext +#define yywrap vrmlyywrap +#define yyalloc vrmlyyalloc +#define yyrealloc vrmlyyrealloc +#define yyfree vrmlyyfree + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 35 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE vrmlyyrestart(vrmlyyin ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +extern int vrmlyyleng; + +extern FILE *vrmlyyin, *vrmlyyout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up vrmlyytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up vrmlyytext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, (yytext_ptr) ) + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via vrmlyyrestart()), so that the user can continue scanning by + * just pointing vrmlyyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when vrmlyytext is formed. */ +static char yy_hold_char; +static int yy_n_chars; /* number of characters read into yy_ch_buf */ +int vrmlyyleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = (char *) 0; +static int yy_init = 0; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow vrmlyywrap()'s to do buffer switches + * instead of setting up a fresh vrmlyyin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void vrmlyyrestart (FILE *input_file ); +void vrmlyy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE vrmlyy_create_buffer (FILE *file,int size ); +void vrmlyy_delete_buffer (YY_BUFFER_STATE b ); +void vrmlyy_flush_buffer (YY_BUFFER_STATE b ); +void vrmlyypush_buffer_state (YY_BUFFER_STATE new_buffer ); +void vrmlyypop_buffer_state (void ); + +static void vrmlyyensure_buffer_stack (void ); +static void vrmlyy_load_buffer_state (void ); +static void vrmlyy_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER vrmlyy_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE vrmlyy_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE vrmlyy_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE vrmlyy_scan_bytes (yyconst char *bytes,int len ); + +void *vrmlyyalloc (yy_size_t ); +void *vrmlyyrealloc (void *,yy_size_t ); +void vrmlyyfree (void * ); + +#define yy_new_buffer vrmlyy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + vrmlyyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + vrmlyy_create_buffer(vrmlyyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + vrmlyyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + vrmlyy_create_buffer(vrmlyyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +typedef unsigned char YY_CHAR; + +FILE *vrmlyyin = (FILE *) 0, *vrmlyyout = (FILE *) 0; + +typedef int yy_state_type; + +extern int vrmlyylineno; + +int vrmlyylineno = 1; + +extern char *vrmlyytext; +#define yytext_ptr vrmlyytext + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (yyconst char msg[] ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up vrmlyytext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + vrmlyyleng = (size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 48 +#define YY_END_OF_BUFFER 49 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[977] = + { 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 47, 45, 46, 45, 14, + 45, 15, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 47, 47, 47, 47, 47, 47, 47, 47, + 24, 47, 47, 47, 47, 22, 22, 47, 47, 47, + 37, 35, 37, 37, 47, 47, 34, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 18, 19, 47, + + 47, 25, 47, 23, 23, 47, 47, 47, 38, 36, + 38, 38, 47, 47, 47, 47, 47, 47, 40, 40, + 41, 40, 40, 42, 47, 44, 44, 45, 45, 46, + 45, 45, 45, 14, 15, 14, 14, 7, 14, 14, + 14, 6, 14, 14, 14, 14, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 24, 24, 0, 0, + 0, 0, 0, 22, 22, 0, 0, 0, 0, 0, + 0, 37, 37, 37, 16, 0, 34, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 25, + + 25, 0, 23, 23, 0, 0, 0, 0, 0, 0, + 38, 38, 38, 17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, + 40, 39, 44, 44, 45, 4, 14, 14, 14, 14, + 5, 14, 14, 14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, + 43, 43, 0, 0, 0, 0, 43, 43, 0, 22, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 34, 0, 0, 26, 0, 0, 0, 0, + 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 25, 23, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 27, 0, 0, 0, 0, 0, 27, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 44, 45, 14, 9, 14, 14, 14, 14, + 14, 0, 20, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 43, 43, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 26, 0, 26, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 27, 0, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 45, 14, 2, + 8, 14, 14, 12, 21, 0, 0, 32, 0, 0, + 0, 0, 0, 32, 0, 0, 0, 0, 32, 0, + 0, 0, 32, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 43, 43, 43, 43, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 26, 0, 0, 26, 0, 0, + + 28, 0, 0, 0, 0, 0, 28, 0, 0, 0, + 0, 28, 0, 0, 0, 28, 0, 0, 0, 0, + 0, 28, 0, 0, 0, 0, 0, 33, 0, 0, + 0, 0, 0, 33, 0, 0, 0, 0, 33, 0, + 0, 0, 33, 0, 0, 0, 0, 0, 33, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 0, 0, 27, 0, 0, 29, 0, 0, 0, + 0, 0, 29, 0, 0, 0, 0, 29, 0, 0, + + 0, 29, 0, 0, 0, 0, 0, 29, 0, 0, + 0, 45, 14, 14, 14, 14, 32, 0, 32, 0, + 32, 0, 32, 0, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 28, 0, 28, + 0, 28, 0, 28, 0, 28, 0, 33, 0, 33, + 0, 33, 0, 33, 0, 33, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, + 29, 0, 29, 0, 29, 0, 29, 0, 45, 14, + + 10, 14, 14, 0, 32, 0, 0, 32, 0, 0, + 32, 0, 32, 0, 0, 32, 0, 0, 30, 0, + 0, 0, 0, 0, 30, 0, 0, 0, 0, 30, + 0, 0, 30, 0, 0, 0, 0, 0, 30, 0, + 0, 0, 0, 0, 30, 0, 0, 0, 30, 0, + 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 0, 0, 28, 0, 0, + 28, 0, 0, 28, 0, 28, 0, 0, 28, 0, + 33, 0, 0, 33, 0, 0, 33, 0, 33, 0, + 0, 33, 0, 0, 31, 0, 0, 0, 0, 0, + + 31, 0, 0, 0, 0, 31, 0, 0, 31, 0, + 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, + 31, 0, 0, 0, 31, 0, 0, 0, 0, 0, + 31, 0, 0, 0, 0, 0, 0, 0, 31, 0, + 0, 0, 0, 29, 0, 0, 29, 0, 0, 29, + 0, 29, 0, 0, 29, 45, 14, 11, 14, 30, + 0, 30, 0, 30, 0, 30, 0, 30, 0, 30, + 0, 30, 0, 30, 0, 30, 0, 31, 0, 31, + 0, 31, 0, 31, 0, 31, 0, 31, 0, 31, + 0, 31, 0, 31, 0, 45, 14, 14, 0, 30, + + 0, 0, 30, 0, 0, 30, 0, 30, 0, 0, + 30, 0, 0, 30, 0, 30, 0, 0, 30, 0, + 0, 30, 0, 31, 0, 0, 31, 0, 0, 31, + 0, 31, 0, 0, 31, 0, 0, 31, 0, 31, + 0, 0, 31, 0, 0, 31, 45, 14, 14, 45, + 3, 14, 45, 13, 45, 45, 45, 45, 1, 1, + 45, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 5, 6, 7, 8, 6, 6, 6, 1, 6, + 6, 6, 9, 2, 10, 11, 6, 12, 13, 14, + 13, 13, 13, 13, 13, 15, 13, 6, 6, 6, + 6, 6, 6, 6, 16, 17, 17, 18, 19, 20, + 6, 6, 21, 6, 6, 22, 23, 24, 25, 26, + 6, 27, 28, 29, 30, 31, 6, 32, 6, 6, + 33, 34, 35, 6, 6, 6, 17, 17, 17, 36, + + 37, 38, 6, 6, 39, 6, 6, 40, 6, 41, + 42, 43, 6, 6, 44, 45, 46, 47, 6, 48, + 6, 6, 1, 6, 1, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6 + } ; + +static yyconst flex_int32_t yy_meta[49] = + { 0, + 1, 2, 3, 2, 2, 4, 5, 6, 1, 4, + 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 8, 1, 8, 7, 7, 7, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4 + } ; + +static yyconst flex_int16_t yy_base[1120] = + { 0, + 0, 7, 15, 0, 62, 90, 118, 0, 61, 74, + 89, 102, 130, 136, 142, 148, 162, 169, 174, 181, + 187, 193, 199, 205, 211, 237, 263, 289, 315, 341, + 367, 393, 427, 461, 487, 513, 539, 565, 226, 233, + 261, 278, 328, 354, 1038, 8632, 251, 0, 231, 0, + 1019, 0, 1006, 992, 985, 981, 983, 974, 972, 968, + 21, 946, 967, 954, 944, 66, 93, 599, 123, 166, + 278, 293, 635, 77, 304, 377, 319, 346, 332, 682, + 0, 8632, 391, 941, 372, 358, 404, 425, 398, 718, + 431, 437, 754, 442, 458, 790, 940, 8632, 8632, 463, + + 471, 476, 491, 497, 502, 524, 518, 826, 0, 8632, + 554, 929, 529, 551, 862, 556, 569, 898, 0, 586, + 8632, 6, 947, 8632, 607, 612, 616, 591, 935, 0, + 933, 932, 234, 0, 0, 914, 900, 0, 892, 883, + 877, 0, 886, 867, 855, 847, 857, 8632, 848, 620, + 0, 640, 934, 948, 649, 656, 661, 690, 698, 0, + 726, 962, 740, 702, 0, 737, 0, 763, 976, 990, + 770, 0, 806, 813, 0, 774, 835, 843, 873, 810, + 0, 878, 1004, 1018, 906, 882, 0, 911, 1032, 1046, + 918, 1050, 0, 1055, 1069, 1083, 1090, 8632, 1094, 1099, + + 1107, 1115, 1119, 0, 1125, 0, 1134, 1148, 1162, 1169, + 0, 1183, 1190, 0, 1187, 1224, 1192, 1260, 1274, 1199, + 1207, 1288, 1233, 1324, 1338, 1240, 0, 1304, 89, 280, + 306, 8632, 1244, 0, 271, 0, 852, 847, 839, 830, + 0, 811, 794, 792, 791, 797, 1302, 1306, 1352, 1388, + 1402, 0, 0, 1360, 1416, 1364, 1452, 1368, 1372, 1413, + 1426, 1417, 1473, 1487, 0, 0, 195, 0, 1440, 0, + 1457, 1437, 1501, 1537, 1551, 0, 0, 1509, 1565, 1513, + 1601, 1517, 1521, 1563, 1567, 1574, 1615, 0, 0, 0, + 1582, 442, 1586, 1629, 1634, 1638, 1652, 1688, 0, 0, + + 0, 1660, 1675, 1672, 1711, 1693, 1715, 1729, 1765, 0, + 0, 0, 1737, 1752, 1749, 1788, 1769, 1773, 0, 1793, + 1797, 1811, 1847, 0, 0, 0, 1819, 1834, 1831, 1870, + 1852, 1874, 1879, 1915, 0, 0, 0, 1887, 536, 1891, + 1929, 1896, 1900, 1943, 1979, 0, 0, 0, 1951, 1966, + 1963, 2002, 0, 160, 785, 0, 782, 787, 755, 755, + 760, 728, 8632, 1984, 2016, 2030, 2037, 2051, 2079, 2115, + 2129, 2059, 0, 2133, 2064, 2170, 2184, 2071, 2198, 2226, + 2262, 2276, 2290, 2087, 2095, 2326, 2362, 2376, 2412, 2426, + 2145, 2440, 2476, 2490, 2504, 2518, 2532, 2568, 2582, 2152, + + 2596, 2632, 2646, 2660, 2674, 2688, 2724, 2738, 2206, 2752, + 2788, 2802, 2816, 2830, 2210, 2218, 2844, 2880, 2894, 2930, + 2944, 2239, 2958, 2994, 3008, 3022, 3036, 119, 694, 0, + 0, 376, 652, 0, 8632, 2100, 2243, 2305, 3050, 3064, + 0, 0, 2247, 578, 2298, 3078, 3092, 3106, 3120, 3156, + 2335, 2339, 3170, 3206, 0, 0, 0, 2343, 586, 2347, + 2384, 3185, 0, 3222, 289, 560, 2389, 2393, 3269, 3305, + 3319, 0, 0, 2397, 2867, 2448, 3333, 3347, 3361, 3375, + 3411, 2453, 2457, 3425, 3461, 0, 0, 0, 2461, 3143, + 2540, 2544, 3475, 2548, 2552, 3511, 3525, 662, 2605, 2609, + + 3530, 3566, 3580, 0, 0, 2613, 663, 2617, 3594, 3608, + 3622, 3636, 3672, 2697, 2701, 3686, 3722, 0, 0, 0, + 2705, 669, 2709, 2760, 3701, 2765, 2769, 3728, 3764, 3778, + 0, 0, 2773, 709, 2852, 3792, 3806, 3820, 3834, 3870, + 2865, 2902, 3884, 3920, 0, 0, 0, 2906, 716, 2910, + 2914, 3899, 2967, 2971, 3935, 3971, 3985, 0, 0, 2975, + 3398, 2979, 3999, 4013, 4027, 4041, 4077, 3129, 3140, 4091, + 4127, 0, 0, 0, 3178, 3448, 3277, 3281, 4141, 3285, + 3289, 4177, 4191, 735, 3384, 3395, 4196, 4232, 4246, 0, + 0, 3433, 744, 3445, 4260, 4274, 4288, 4302, 4338, 3484, + + 3488, 4352, 4388, 0, 0, 0, 3492, 807, 3496, 3538, + 4367, 416, 653, 601, 560, 549, 3644, 3545, 4403, 4439, + 4453, 4489, 4503, 3652, 4539, 4575, 4589, 4625, 4639, 3694, + 4653, 4689, 4703, 4717, 4731, 4745, 4781, 4795, 4809, 4823, + 4837, 4873, 3736, 4887, 4923, 4937, 4951, 3842, 3743, 4965, + 5001, 5015, 5051, 5065, 3850, 5101, 5137, 3943, 3892, 5151, + 5187, 5201, 5237, 5251, 3951, 5287, 5323, 5337, 5373, 5387, + 4049, 5401, 5437, 5451, 5465, 5479, 5493, 5529, 5543, 5557, + 5571, 5585, 5621, 4056, 5635, 5671, 5685, 5699, 4099, 4107, + 5713, 5749, 5763, 5799, 5813, 4149, 5849, 5885, 413, 530, + + 0, 502, 501, 3549, 3656, 5899, 5913, 814, 5927, 5941, + 4325, 3747, 5955, 5969, 5983, 816, 3855, 3955, 4518, 5997, + 6011, 0, 0, 4060, 823, 4111, 6025, 6039, 6053, 6067, + 4154, 4158, 6103, 6139, 6153, 0, 0, 4162, 824, 4204, + 4208, 5080, 6167, 6181, 6195, 6231, 4213, 4217, 6245, 6281, + 0, 0, 0, 4310, 936, 4322, 4360, 5266, 4411, 6295, + 6309, 6323, 6337, 4415, 4419, 5828, 4423, 4461, 6373, 6387, + 1098, 6401, 6415, 4476, 4473, 6429, 6443, 6457, 1104, 4511, + 4547, 6471, 6485, 1149, 6499, 6513, 4562, 4559, 6527, 6541, + 6555, 1152, 4598, 4602, 6076, 6569, 6583, 0, 0, 4606, + + 1196, 4610, 6597, 6611, 6625, 6639, 4662, 4666, 6675, 6711, + 6725, 0, 0, 4670, 1205, 4674, 4753, 6648, 6739, 6753, + 6767, 6803, 4758, 4762, 6817, 6853, 0, 0, 0, 4766, + 1232, 4845, 4849, 6832, 4853, 6868, 6882, 6896, 6910, 4857, + 4895, 6919, 4899, 4903, 6955, 6969, 1261, 6983, 6997, 5038, + 4907, 7011, 7025, 7039, 1285, 246, 482, 0, 428, 5345, + 4973, 7053, 7089, 7103, 7139, 7153, 4980, 7189, 7225, 7239, + 7275, 7289, 5023, 7325, 7361, 7375, 7411, 5409, 5035, 5501, + 5073, 4985, 5109, 5114, 5121, 5593, 5159, 5164, 5171, 5210, + 5217, 5643, 5259, 5222, 5295, 633, 404, 385, 5299, 5303, + + 449, 471, 1701, 483, 509, 7425, 5307, 7461, 607, 647, + 1860, 656, 668, 7475, 5353, 7511, 682, 715, 1930, 751, + 761, 7525, 5357, 5417, 5421, 5509, 6084, 5513, 5601, 7168, + 5605, 7561, 5651, 5655, 6111, 5721, 5725, 7304, 5729, 5733, + 5771, 5775, 6203, 5779, 5783, 7434, 315, 395, 354, 263, + 0, 327, 601, 0, 726, 782, 1476, 1490, 5829, 5867, + 1604, 5872, 5877, 6127, 6221, 6261, 6268, 6355, 6273, 6360, + 6365, 6666, 6693, 6700, 6785, 8632, 7576, 7584, 7592, 7600, + 7608, 7616, 7621, 7625, 7632, 7640, 7648, 7655, 7663, 7671, + 7679, 7687, 7694, 328, 7701, 7709, 7717, 7725, 304, 7733, + + 7741, 7749, 7757, 7765, 7773, 238, 7781, 7786, 7793, 7801, + 7808, 168, 7815, 111, 7823, 7831, 83, 7839, 7847, 7855, + 7863, 7871, 7879, 7887, 7895, 7903, 7911, 7919, 7927, 7935, + 7943, 7951, 7959, 7967, 7972, 7979, 7987, 7995, 0, 8003, + 8011, 8019, 8027, 8035, 8043, 8051, 8059, 8067, 8075, 8083, + 8091, 8099, 8107, 8115, 8123, 8131, 8139, 8144, 8151, 8159, + 8167, 8175, 8183, 8191, 8199, 8207, 8215, 8223, 8231, 8239, + 8247, 8255, 8263, 8271, 8279, 8287, 8295, 8303, 8311, 8319, + 8327, 8335, 8343, 8348, 8355, 8363, 8371, 8379, 8387, 8395, + 8403, 8411, 8419, 8427, 8435, 8443, 8451, 8459, 8467, 8475, + + 8483, 8491, 8499, 8507, 8515, 8523, 8531, 8539, 8547, 8552, + 8559, 8567, 8575, 8583, 8591, 8599, 8607, 8615, 8623 + } ; + +static yyconst flex_int16_t yy_def[1120] = + { 0, + 977, 977, 976, 3, 977, 977, 977, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 978, 978, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 979, 979, 7, 7, 7, 7, 980, 980, + 980, 980, 7, 7, 976, 976, 976, 981, 982, 983, + 982, 984, 983, 983, 983, 983, 983, 983, 983, 983, + 983, 983, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 73, 976, 976, 976, 976, 976, 976, + 985, 976, 986, 985, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + + 976, 976, 976, 976, 976, 976, 976, 976, 987, 976, + 988, 987, 976, 976, 976, 976, 976, 976, 989, 989, + 976, 990, 989, 976, 976, 976, 976, 976, 982, 981, + 982, 982, 982, 983, 984, 983, 983, 983, 983, 983, + 983, 983, 983, 983, 983, 983, 976, 976, 976, 976, + 68, 68, 976, 991, 976, 976, 976, 976, 976, 74, + 74, 992, 993, 976, 994, 976, 80, 80, 976, 995, + 976, 985, 986, 986, 985, 976, 976, 976, 976, 976, + 90, 90, 976, 996, 976, 976, 93, 93, 976, 997, + 976, 976, 96, 96, 976, 998, 976, 976, 976, 976, + + 976, 976, 976, 999, 976, 108, 108, 976, 1000, 976, + 987, 1001, 1001, 987, 976, 976, 216, 976, 1002, 976, + 976, 976, 222, 976, 1003, 976, 1004, 1004, 1005, 1005, + 1005, 976, 976, 1006, 1007, 1008, 1008, 1008, 1008, 1008, + 1008, 1008, 1008, 1008, 976, 976, 976, 976, 976, 1009, + 1009, 251, 251, 251, 251, 976, 976, 976, 976, 976, + 976, 976, 1010, 1010, 264, 264, 264, 264, 1011, 1012, + 976, 976, 976, 1013, 1013, 275, 275, 275, 275, 976, + 976, 976, 976, 976, 976, 976, 996, 287, 287, 287, + 287, 287, 976, 976, 976, 976, 976, 997, 298, 298, + + 298, 298, 298, 976, 976, 976, 976, 976, 998, 309, + 309, 309, 309, 309, 976, 976, 976, 976, 1014, 976, + 976, 976, 1000, 323, 323, 323, 323, 323, 976, 976, + 976, 976, 976, 1002, 334, 334, 334, 334, 334, 976, + 976, 976, 976, 976, 1003, 345, 345, 345, 345, 345, + 976, 976, 1006, 1007, 1008, 1008, 1008, 1008, 1008, 1008, + 1008, 976, 976, 249, 976, 1015, 976, 251, 368, 976, + 1016, 251, 1017, 264, 273, 976, 1018, 976, 275, 379, + 976, 1019, 379, 976, 976, 1020, 1020, 976, 976, 1021, + 976, 1022, 1022, 976, 1023, 1022, 976, 976, 1024, 976, + + 1025, 1025, 976, 1026, 1025, 976, 976, 1027, 976, 1028, + 1028, 976, 1029, 1028, 976, 976, 1030, 1030, 976, 976, + 1031, 976, 1032, 1032, 976, 1033, 1032, 1034, 1035, 1035, + 1035, 1035, 1035, 1035, 976, 976, 976, 976, 1036, 1036, + 440, 440, 440, 440, 976, 976, 1037, 1037, 448, 1038, + 976, 976, 976, 1038, 454, 454, 454, 454, 454, 448, + 448, 449, 1039, 976, 464, 464, 976, 976, 976, 1040, + 1040, 471, 471, 471, 471, 976, 976, 1041, 1041, 479, + 1042, 976, 976, 976, 1042, 485, 485, 485, 485, 485, + 479, 479, 479, 976, 976, 1043, 1043, 497, 976, 976, + + 976, 1044, 1044, 503, 503, 503, 503, 976, 976, 1045, + 1045, 511, 1046, 976, 976, 976, 1046, 517, 517, 517, + 517, 517, 511, 511, 512, 976, 976, 976, 1047, 1047, + 530, 530, 530, 530, 976, 976, 1048, 1048, 538, 1049, + 976, 976, 976, 1049, 544, 544, 544, 544, 544, 538, + 538, 539, 976, 976, 976, 1050, 1050, 557, 557, 557, + 557, 976, 976, 1051, 1051, 565, 1052, 976, 976, 976, + 1052, 571, 571, 571, 571, 571, 565, 565, 565, 976, + 976, 1053, 1053, 583, 976, 976, 976, 1054, 1054, 589, + 589, 589, 589, 976, 976, 1055, 1055, 597, 1056, 976, + + 976, 976, 1056, 603, 603, 603, 603, 603, 597, 597, + 598, 1057, 1058, 1058, 1058, 1058, 976, 976, 1059, 1059, + 1060, 1060, 976, 976, 1061, 1061, 976, 976, 1062, 976, + 1063, 1063, 976, 1064, 1063, 1065, 1065, 976, 1066, 1065, + 976, 1064, 976, 1067, 1067, 1066, 1067, 976, 976, 1068, + 1068, 1069, 1069, 976, 976, 1070, 1070, 976, 976, 1071, + 1071, 1072, 1072, 976, 976, 1073, 1073, 976, 976, 1074, + 976, 1075, 1075, 976, 1076, 1075, 1077, 1077, 976, 1078, + 1077, 976, 1076, 976, 1079, 1079, 1078, 1079, 976, 976, + 1080, 1080, 1081, 1081, 976, 976, 1082, 1082, 1083, 1084, + + 1084, 1084, 1084, 976, 976, 1085, 1085, 707, 1086, 1086, + 710, 976, 976, 1087, 1087, 715, 976, 976, 976, 1088, + 1088, 721, 721, 721, 721, 976, 976, 1089, 1089, 729, + 976, 976, 976, 1090, 1090, 735, 735, 735, 735, 729, + 729, 730, 1091, 1091, 744, 1092, 976, 976, 976, 1092, + 750, 750, 750, 750, 750, 744, 744, 745, 976, 976, + 1093, 1093, 762, 762, 762, 763, 976, 976, 1094, 1094, + 770, 1095, 1095, 773, 976, 976, 1096, 1096, 778, 976, + 976, 1097, 1097, 783, 1098, 1098, 786, 976, 976, 1099, + 1099, 791, 976, 976, 976, 1100, 1100, 797, 797, 797, + + 797, 976, 976, 1101, 1101, 805, 976, 976, 976, 1102, + 1102, 811, 811, 811, 811, 805, 805, 806, 1103, 1103, + 820, 1104, 976, 976, 976, 1104, 826, 826, 826, 826, + 826, 820, 820, 821, 976, 976, 1105, 1105, 838, 838, + 838, 839, 976, 976, 1106, 1106, 846, 1107, 1107, 849, + 976, 976, 1108, 1108, 854, 1109, 1110, 1110, 1110, 976, + 976, 1111, 1111, 1112, 1112, 976, 976, 1113, 1113, 1114, + 1114, 976, 976, 1115, 1115, 1116, 1116, 976, 976, 797, + 797, 806, 805, 809, 976, 811, 811, 821, 820, 825, + 976, 826, 826, 839, 838, 1109, 1110, 1110, 976, 976, + + 863, 863, 863, 865, 865, 865, 976, 976, 869, 869, + 869, 871, 871, 871, 976, 976, 875, 875, 875, 877, + 877, 877, 976, 976, 797, 797, 797, 805, 805, 806, + 976, 976, 811, 811, 811, 820, 820, 821, 976, 836, + 826, 826, 826, 838, 838, 839, 1109, 1110, 1110, 1109, + 1110, 1110, 1109, 1110, 1109, 1109, 1117, 1117, 976, 1117, + 1117, 976, 976, 1118, 1117, 976, 1117, 1119, 1118, 1118, + 1118, 1119, 1119, 1119, 1119, 0, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976 + } ; + +static yyconst flex_int16_t yy_nxt[8681] = + { 0, + 976, 47, 48, 47, 47, 976, 463, 49, 47, 48, + 47, 47, 131, 231, 49, 46, 47, 48, 47, 47, + 50, 46, 51, 46, 46, 46, 52, 52, 52, 52, + 50, 50, 53, 54, 50, 55, 50, 50, 56, 50, + 57, 58, 50, 59, 60, 50, 50, 46, 46, 46, + 50, 61, 62, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 47, 48, 47, 47, 144, 145, 51, + 69, 70, 71, 71, 71, 71, 150, 151, 151, 151, + 151, 63, 64, 69, 70, 71, 71, 71, 71, 463, + 65, 47, 48, 47, 47, 131, 231, 51, 72, 46, + + 73, 74, 74, 74, 152, 152, 152, 152, 976, 63, + 64, 72, 46, 73, 74, 74, 74, 319, 65, 47, + 48, 47, 47, 612, 976, 51, 132, 66, 67, 68, + 68, 68, 68, 156, 157, 157, 157, 157, 64, 75, + 46, 76, 77, 77, 77, 75, 46, 76, 77, 77, + 77, 78, 79, 80, 80, 80, 80, 78, 79, 80, + 80, 80, 80, 47, 48, 47, 47, 132, 82, 83, + 47, 48, 47, 47, 270, 82, 83, 158, 158, 158, + 158, 428, 84, 85, 86, 87, 87, 87, 87, 84, + 85, 86, 87, 87, 87, 87, 88, 89, 90, 90, + + 90, 90, 88, 89, 90, 90, 90, 90, 91, 92, + 93, 93, 93, 93, 91, 92, 93, 93, 93, 93, + 94, 95, 96, 96, 96, 96, 374, 120, 48, 120, + 120, 97, 121, 122, 120, 48, 120, 120, 132, 121, + 122, 132, 374, 98, 353, 99, 94, 95, 96, 96, + 96, 96, 128, 132, 128, 128, 896, 97, 129, 123, + 235, 133, 120, 48, 120, 120, 123, 124, 122, 98, + 132, 99, 100, 101, 102, 102, 102, 102, 132, 120, + 48, 120, 120, 97, 124, 122, 131, 231, 156, 157, + 157, 157, 157, 354, 123, 98, 159, 99, 100, 101, + + 102, 102, 102, 102, 160, 160, 160, 160, 953, 97, + 319, 123, 131, 231, 159, 164, 164, 164, 164, 950, + 263, 98, 132, 99, 103, 46, 104, 105, 105, 105, + 164, 164, 164, 164, 270, 97, 263, 125, 46, 126, + 127, 127, 127, 168, 168, 168, 168, 98, 46, 99, + 103, 46, 104, 105, 105, 105, 166, 167, 167, 167, + 167, 97, 954, 125, 46, 126, 127, 127, 127, 178, + 178, 178, 178, 98, 46, 99, 106, 107, 108, 108, + 108, 108, 176, 177, 177, 177, 177, 97, 164, 164, + 164, 164, 131, 952, 131, 131, 614, 131, 174, 98, + + 615, 99, 106, 107, 108, 108, 108, 108, 165, 182, + 182, 182, 182, 97, 176, 177, 177, 177, 177, 951, + 132, 949, 179, 132, 165, 98, 856, 99, 47, 48, + 47, 47, 948, 110, 111, 180, 181, 181, 181, 181, + 179, 186, 187, 187, 187, 187, 699, 112, 188, 188, + 188, 188, 192, 193, 193, 193, 193, 720, 723, 98, + 387, 99, 47, 48, 47, 47, 898, 110, 111, 194, + 194, 194, 194, 199, 200, 200, 200, 200, 387, 720, + 723, 112, 201, 201, 201, 201, 199, 200, 200, 200, + 200, 470, 473, 98, 202, 99, 113, 114, 115, 115, + + 115, 115, 203, 203, 203, 203, 897, 97, 203, 203, + 203, 203, 202, 203, 203, 203, 203, 470, 473, 98, + 859, 99, 113, 114, 115, 115, 115, 115, 204, 207, + 207, 207, 207, 97, 205, 206, 206, 206, 206, 215, + 216, 216, 216, 216, 204, 98, 858, 99, 116, 117, + 118, 118, 118, 118, 418, 131, 857, 131, 131, 97, + 131, 213, 217, 217, 217, 217, 221, 222, 222, 222, + 222, 98, 418, 99, 116, 117, 118, 118, 118, 118, + 223, 223, 223, 223, 703, 97, 131, 228, 131, 228, + 228, 263, 128, 229, 128, 128, 620, 98, 129, 99, + + 153, 153, 153, 153, 626, 702, 154, 263, 132, 150, + 151, 151, 151, 151, 620, 734, 737, 155, 233, 233, + 233, 233, 626, 233, 233, 233, 233, 233, 233, 233, + 233, 152, 152, 152, 152, 155, 161, 161, 161, 161, + 132, 701, 162, 234, 947, 955, 160, 160, 160, 160, + 976, 152, 152, 152, 152, 734, 737, 256, 256, 234, + 257, 257, 257, 257, 274, 277, 163, 158, 158, 158, + 158, 156, 157, 157, 157, 157, 274, 277, 700, 159, + 387, 651, 163, 169, 169, 169, 169, 657, 616, 170, + 750, 753, 166, 167, 167, 167, 167, 159, 387, 651, + + 171, 158, 158, 158, 158, 657, 258, 258, 159, 259, + 259, 259, 259, 164, 164, 164, 164, 613, 171, 183, + 183, 183, 183, 750, 753, 184, 159, 661, 180, 181, + 181, 181, 181, 132, 667, 260, 185, 261, 262, 262, + 262, 161, 161, 161, 161, 661, 435, 162, 168, 168, + 168, 168, 667, 418, 185, 189, 189, 189, 189, 485, + 488, 190, 692, 956, 186, 187, 187, 187, 187, 485, + 488, 418, 191, 976, 168, 168, 168, 168, 280, 280, + 692, 281, 281, 281, 281, 178, 178, 178, 178, 132, + 191, 195, 195, 195, 195, 434, 957, 196, 433, 432, + + 192, 193, 193, 193, 193, 431, 430, 131, 197, 131, + 131, 429, 131, 174, 131, 363, 131, 131, 362, 131, + 174, 182, 182, 182, 182, 698, 197, 208, 208, 208, + 208, 361, 620, 209, 626, 360, 205, 206, 206, 206, + 206, 863, 869, 698, 210, 176, 177, 177, 177, 177, + 620, 359, 626, 179, 178, 178, 178, 178, 358, 863, + 869, 179, 210, 218, 218, 218, 218, 357, 356, 219, + 355, 179, 215, 216, 216, 216, 216, 246, 245, 179, + 220, 282, 282, 244, 283, 283, 283, 283, 976, 182, + 182, 182, 182, 188, 188, 188, 188, 243, 220, 224, + + 224, 224, 224, 242, 241, 225, 240, 239, 221, 222, + 222, 222, 222, 238, 293, 293, 226, 294, 294, 294, + 294, 976, 188, 188, 188, 188, 304, 304, 237, 305, + 305, 305, 305, 236, 226, 153, 153, 153, 153, 132, + 132, 154, 132, 247, 248, 249, 249, 249, 249, 251, + 153, 251, 251, 232, 875, 252, 214, 253, 254, 255, + 255, 255, 255, 264, 161, 264, 264, 198, 175, 265, + 149, 266, 875, 267, 268, 268, 268, 169, 169, 169, + 169, 148, 147, 170, 146, 271, 272, 273, 273, 273, + 273, 275, 169, 275, 275, 143, 142, 276, 141, 277, + + 278, 279, 279, 279, 279, 183, 183, 183, 183, 140, + 139, 184, 138, 284, 285, 286, 286, 286, 286, 288, + 183, 288, 288, 137, 136, 289, 132, 290, 291, 292, + 292, 292, 292, 189, 189, 189, 189, 976, 976, 190, + 976, 295, 296, 297, 297, 297, 297, 299, 189, 299, + 299, 976, 976, 300, 976, 301, 302, 303, 303, 303, + 303, 194, 194, 194, 194, 976, 194, 194, 194, 194, + 195, 195, 195, 195, 976, 976, 196, 976, 306, 307, + 308, 308, 308, 308, 310, 195, 310, 310, 976, 976, + 311, 976, 312, 313, 314, 314, 314, 314, 315, 315, + + 976, 316, 316, 316, 316, 201, 201, 201, 201, 199, + 200, 200, 200, 200, 976, 976, 651, 202, 201, 201, + 201, 201, 657, 317, 317, 202, 318, 318, 318, 318, + 203, 203, 203, 203, 651, 202, 207, 207, 207, 207, + 657, 976, 976, 202, 976, 207, 207, 207, 207, 208, + 208, 208, 208, 976, 976, 209, 976, 320, 321, 322, + 322, 322, 322, 324, 208, 324, 324, 661, 976, 325, + 667, 326, 327, 328, 328, 328, 328, 329, 329, 976, + 330, 330, 330, 330, 131, 661, 131, 131, 667, 131, + 213, 131, 976, 131, 131, 976, 131, 213, 217, 217, + + 217, 217, 976, 217, 217, 217, 217, 340, 340, 976, + 341, 341, 341, 341, 881, 131, 976, 131, 223, 223, + 223, 223, 131, 887, 131, 218, 218, 218, 218, 976, + 976, 219, 881, 976, 215, 216, 216, 216, 216, 976, + 976, 887, 220, 976, 223, 223, 223, 223, 351, 351, + 893, 352, 352, 352, 352, 233, 233, 233, 233, 976, + 220, 218, 218, 218, 218, 976, 976, 219, 893, 331, + 332, 333, 333, 333, 333, 335, 218, 335, 335, 692, + 976, 336, 976, 337, 338, 339, 339, 339, 339, 224, + 224, 224, 224, 976, 976, 225, 976, 692, 221, 222, + + 222, 222, 222, 698, 976, 228, 226, 228, 228, 976, + 976, 229, 248, 249, 249, 249, 249, 364, 364, 364, + 364, 698, 976, 976, 226, 224, 224, 224, 224, 976, + 976, 225, 976, 342, 343, 344, 344, 344, 344, 346, + 224, 346, 346, 976, 976, 347, 976, 348, 349, 350, + 350, 350, 350, 365, 365, 365, 365, 976, 976, 366, + 976, 976, 248, 249, 249, 249, 249, 976, 976, 976, + 367, 368, 368, 368, 368, 257, 257, 257, 257, 259, + 259, 259, 259, 259, 259, 259, 259, 976, 367, 251, + 153, 251, 251, 976, 976, 252, 976, 253, 254, 255, + + 255, 255, 255, 251, 153, 251, 251, 976, 976, 252, + 976, 253, 254, 255, 255, 255, 255, 369, 370, 369, + 369, 976, 976, 371, 262, 262, 262, 262, 262, 262, + 262, 262, 976, 976, 372, 976, 976, 262, 262, 262, + 262, 161, 161, 161, 161, 976, 976, 162, 375, 375, + 375, 375, 372, 153, 153, 153, 153, 373, 976, 154, + 976, 976, 976, 257, 257, 257, 257, 272, 273, 273, + 273, 273, 976, 373, 264, 161, 264, 264, 959, 960, + 265, 976, 266, 961, 267, 268, 268, 268, 264, 161, + 264, 264, 959, 960, 265, 976, 266, 961, 267, 268, + + 268, 268, 376, 376, 376, 376, 976, 976, 377, 976, + 976, 272, 273, 273, 273, 273, 976, 976, 976, 378, + 379, 379, 379, 379, 281, 281, 281, 281, 283, 283, + 283, 283, 283, 283, 283, 283, 976, 378, 275, 169, + 275, 275, 976, 976, 276, 976, 277, 278, 279, 279, + 279, 279, 275, 169, 275, 275, 976, 976, 276, 976, + 277, 278, 279, 279, 279, 279, 380, 381, 380, 380, + 976, 976, 382, 285, 286, 286, 286, 286, 384, 384, + 384, 384, 976, 383, 285, 286, 286, 286, 286, 976, + 976, 976, 385, 386, 386, 386, 386, 294, 294, 294, + + 294, 383, 169, 169, 169, 169, 959, 960, 170, 976, + 385, 961, 281, 281, 281, 281, 288, 183, 288, 288, + 976, 976, 289, 976, 290, 291, 292, 292, 292, 292, + 183, 183, 183, 183, 976, 976, 184, 976, 976, 976, + 294, 294, 294, 294, 296, 297, 297, 297, 297, 388, + 388, 388, 388, 389, 389, 389, 389, 976, 976, 390, + 976, 976, 296, 297, 297, 297, 297, 976, 976, 976, + 391, 392, 392, 392, 392, 976, 393, 394, 393, 393, + 976, 976, 395, 305, 305, 305, 305, 976, 391, 299, + 189, 299, 299, 396, 976, 300, 976, 301, 302, 303, + + 303, 303, 303, 307, 308, 308, 308, 308, 976, 720, + 723, 396, 189, 189, 189, 189, 976, 976, 190, 863, + 976, 976, 305, 305, 305, 305, 397, 397, 397, 397, + 398, 398, 398, 398, 976, 976, 399, 863, 976, 307, + 308, 308, 308, 308, 976, 976, 976, 400, 401, 401, + 401, 401, 976, 402, 403, 402, 402, 976, 976, 404, + 316, 316, 316, 316, 976, 400, 310, 195, 310, 310, + 405, 976, 311, 976, 312, 313, 314, 314, 314, 314, + 318, 318, 318, 318, 318, 318, 318, 318, 405, 195, + 195, 195, 195, 976, 976, 196, 976, 976, 976, 316, + + 316, 316, 316, 321, 322, 322, 322, 322, 406, 406, + 406, 406, 407, 407, 407, 407, 976, 976, 408, 976, + 976, 321, 322, 322, 322, 322, 976, 976, 976, 409, + 410, 410, 410, 410, 976, 411, 412, 411, 411, 976, + 976, 413, 330, 330, 330, 330, 976, 409, 324, 208, + 324, 324, 414, 976, 325, 976, 326, 327, 328, 328, + 328, 328, 332, 333, 333, 333, 333, 976, 734, 737, + 414, 208, 208, 208, 208, 976, 976, 209, 869, 976, + 976, 330, 330, 330, 330, 415, 415, 415, 415, 332, + 333, 333, 333, 333, 976, 976, 869, 416, 417, 417, + + 417, 417, 341, 341, 341, 341, 343, 344, 344, 344, + 344, 419, 419, 419, 419, 416, 335, 218, 335, 335, + 976, 976, 336, 976, 337, 338, 339, 339, 339, 339, + 218, 218, 218, 218, 976, 976, 219, 976, 750, 753, + 341, 341, 341, 341, 420, 420, 420, 420, 875, 976, + 421, 976, 976, 343, 344, 344, 344, 344, 976, 976, + 976, 422, 423, 423, 423, 423, 875, 424, 425, 424, + 424, 976, 976, 426, 352, 352, 352, 352, 976, 422, + 346, 224, 346, 346, 427, 976, 347, 976, 348, 349, + 350, 350, 350, 350, 976, 364, 364, 364, 364, 976, + + 976, 976, 427, 224, 224, 224, 224, 976, 976, 225, + 976, 976, 976, 352, 352, 352, 352, 365, 365, 365, + 365, 976, 976, 366, 976, 436, 437, 438, 438, 438, + 438, 440, 365, 440, 440, 976, 976, 441, 976, 442, + 443, 444, 444, 444, 444, 445, 445, 976, 446, 446, + 446, 446, 369, 370, 369, 369, 976, 976, 371, 976, + 976, 976, 368, 368, 368, 368, 976, 460, 461, 372, + 462, 462, 462, 462, 976, 375, 375, 375, 375, 476, + 476, 976, 477, 477, 477, 477, 976, 372, 447, 448, + 449, 449, 449, 449, 976, 976, 976, 250, 384, 384, + + 384, 384, 976, 494, 494, 385, 495, 495, 495, 495, + 437, 438, 438, 438, 438, 250, 370, 370, 370, 370, + 976, 976, 450, 385, 451, 452, 453, 453, 453, 453, + 455, 370, 455, 455, 976, 976, 456, 976, 457, 458, + 459, 459, 459, 459, 464, 465, 465, 465, 466, 466, + 466, 466, 466, 508, 508, 976, 509, 509, 509, 509, + 535, 535, 976, 536, 536, 536, 536, 976, 466, 466, + 466, 376, 376, 376, 376, 976, 976, 377, 976, 467, + 468, 469, 469, 469, 469, 471, 376, 471, 471, 976, + 976, 472, 976, 473, 474, 475, 475, 475, 475, 380, + + 381, 380, 380, 976, 976, 382, 976, 976, 976, 379, + 379, 379, 379, 976, 562, 562, 383, 563, 563, 563, + 563, 415, 415, 415, 415, 976, 580, 580, 416, 581, + 581, 581, 581, 976, 383, 478, 479, 480, 480, 480, + 480, 976, 976, 976, 274, 976, 416, 594, 594, 976, + 595, 595, 595, 595, 617, 617, 617, 617, 619, 619, + 619, 619, 274, 381, 381, 381, 381, 976, 976, 481, + 976, 482, 483, 484, 484, 484, 484, 486, 381, 486, + 486, 976, 976, 487, 976, 488, 489, 490, 490, 490, + 490, 275, 169, 275, 275, 976, 976, 276, 491, 492, + + 976, 493, 493, 493, 493, 976, 976, 976, 274, 446, + 446, 446, 446, 976, 976, 437, 438, 438, 438, 438, + 976, 976, 976, 618, 976, 976, 274, 288, 183, 288, + 288, 976, 976, 289, 976, 290, 291, 386, 386, 386, + 386, 618, 976, 976, 387, 452, 453, 453, 453, 453, + 623, 623, 623, 623, 625, 625, 625, 625, 462, 462, + 462, 462, 387, 288, 183, 288, 288, 976, 976, 289, + 496, 497, 291, 498, 498, 498, 498, 389, 389, 389, + 389, 976, 976, 390, 976, 976, 976, 388, 388, 388, + 388, 976, 976, 976, 391, 462, 462, 462, 462, 468, + + 469, 469, 469, 469, 627, 627, 627, 627, 631, 631, + 631, 631, 391, 389, 389, 389, 389, 976, 976, 390, + 976, 499, 500, 501, 501, 501, 501, 503, 389, 503, + 503, 976, 976, 504, 976, 505, 506, 507, 507, 507, + 507, 393, 394, 393, 393, 976, 976, 395, 976, 301, + 302, 392, 392, 392, 392, 976, 976, 976, 396, 477, + 477, 477, 477, 483, 484, 484, 484, 484, 641, 641, + 641, 641, 644, 644, 644, 644, 396, 393, 394, 393, + 393, 976, 976, 395, 976, 510, 511, 512, 512, 512, + 512, 394, 394, 394, 394, 976, 976, 513, 976, 514, + + 515, 516, 516, 516, 516, 518, 394, 518, 518, 976, + 976, 519, 976, 520, 521, 522, 522, 522, 522, 299, + 189, 299, 299, 976, 976, 300, 523, 524, 302, 525, + 525, 525, 525, 398, 398, 398, 398, 976, 976, 399, + 976, 976, 976, 397, 397, 397, 397, 976, 976, 976, + 400, 493, 493, 493, 493, 493, 493, 493, 493, 495, + 495, 495, 495, 495, 495, 495, 495, 976, 400, 398, + 398, 398, 398, 976, 976, 399, 976, 526, 527, 528, + 528, 528, 528, 530, 398, 530, 530, 976, 976, 531, + 976, 532, 533, 534, 534, 534, 534, 402, 403, 402, + + 402, 976, 976, 404, 976, 312, 313, 401, 401, 401, + 401, 976, 976, 976, 405, 500, 501, 501, 501, 501, + 648, 648, 648, 648, 650, 650, 650, 650, 509, 509, + 509, 509, 405, 402, 403, 402, 402, 976, 976, 404, + 976, 537, 538, 539, 539, 539, 539, 403, 403, 403, + 403, 976, 976, 540, 976, 541, 542, 543, 543, 543, + 543, 545, 403, 545, 545, 976, 976, 546, 976, 547, + 548, 549, 549, 549, 549, 310, 195, 310, 310, 976, + 976, 311, 550, 551, 313, 552, 552, 552, 552, 407, + 407, 407, 407, 976, 976, 408, 976, 976, 976, 406, + + 406, 406, 406, 976, 976, 976, 409, 515, 516, 516, + 516, 516, 654, 654, 654, 654, 656, 656, 656, 656, + 525, 525, 525, 525, 409, 407, 407, 407, 407, 976, + 976, 408, 976, 553, 554, 555, 555, 555, 555, 557, + 407, 557, 557, 976, 976, 558, 976, 559, 560, 561, + 561, 561, 561, 411, 412, 411, 411, 976, 976, 413, + 976, 326, 327, 410, 410, 410, 410, 976, 976, 976, + 414, 525, 525, 525, 525, 527, 528, 528, 528, 528, + 658, 658, 658, 658, 660, 660, 660, 660, 414, 411, + 412, 411, 411, 976, 976, 413, 976, 564, 565, 566, + + 566, 566, 566, 412, 412, 412, 412, 976, 976, 567, + 976, 568, 569, 570, 570, 570, 570, 572, 412, 572, + 572, 976, 976, 573, 976, 574, 575, 576, 576, 576, + 576, 324, 208, 324, 324, 976, 976, 325, 577, 578, + 327, 579, 579, 579, 579, 335, 218, 335, 335, 976, + 976, 336, 976, 337, 338, 417, 417, 417, 417, 976, + 976, 976, 418, 536, 536, 536, 536, 976, 632, 633, + 632, 632, 976, 976, 634, 542, 543, 543, 543, 543, + 418, 335, 218, 335, 335, 635, 976, 336, 582, 583, + 338, 584, 584, 584, 584, 420, 420, 420, 420, 976, + + 976, 421, 976, 635, 976, 419, 419, 419, 419, 976, + 976, 976, 422, 664, 664, 664, 664, 666, 666, 666, + 666, 552, 552, 552, 552, 552, 552, 552, 552, 976, + 422, 420, 420, 420, 420, 976, 976, 421, 976, 585, + 586, 587, 587, 587, 587, 589, 420, 589, 589, 976, + 976, 590, 976, 591, 592, 593, 593, 593, 593, 424, + 425, 424, 424, 976, 976, 426, 976, 348, 349, 423, + 423, 423, 423, 976, 976, 976, 427, 554, 555, 555, + 555, 555, 668, 668, 668, 668, 672, 672, 672, 672, + 563, 563, 563, 563, 427, 424, 425, 424, 424, 976, + + 976, 426, 976, 596, 597, 598, 598, 598, 598, 425, + 425, 425, 425, 976, 976, 599, 976, 600, 601, 602, + 602, 602, 602, 604, 425, 604, 604, 976, 976, 605, + 976, 606, 607, 608, 608, 608, 608, 346, 224, 346, + 346, 976, 976, 347, 609, 610, 349, 611, 611, 611, + 611, 440, 365, 440, 440, 976, 976, 441, 976, 442, + 443, 444, 444, 444, 444, 440, 365, 440, 440, 976, + 976, 441, 976, 442, 443, 444, 444, 444, 444, 365, + 365, 365, 365, 976, 976, 366, 976, 976, 976, 446, + 446, 446, 446, 251, 153, 251, 251, 976, 976, 252, + + 976, 253, 448, 449, 449, 449, 449, 251, 153, 251, + 251, 976, 976, 252, 976, 253, 254, 621, 621, 621, + 621, 369, 370, 369, 369, 976, 976, 371, 976, 976, + 448, 449, 449, 449, 449, 976, 976, 976, 622, 569, + 570, 570, 570, 570, 645, 638, 645, 645, 976, 976, + 646, 682, 682, 682, 682, 976, 622, 455, 370, 455, + 455, 647, 976, 456, 976, 457, 458, 459, 459, 459, + 459, 365, 365, 365, 365, 976, 976, 366, 976, 647, + 452, 453, 453, 453, 453, 976, 976, 976, 624, 685, + 685, 685, 685, 976, 976, 254, 462, 462, 462, 462, + + 976, 976, 976, 372, 976, 976, 624, 455, 370, 455, + 455, 976, 976, 456, 976, 457, 458, 459, 459, 459, + 459, 372, 263, 264, 161, 264, 264, 263, 263, 265, + 263, 266, 263, 464, 465, 465, 465, 466, 466, 466, + 466, 466, 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 374, 263, 263, 263, 466, 466, 466, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 374, + 628, 628, 628, 628, 976, 976, 629, 976, 976, 468, + 469, 469, 469, 469, 976, 976, 976, 630, 579, 579, + 579, 579, 579, 579, 579, 579, 581, 581, 581, 581, + + 581, 581, 581, 581, 976, 630, 471, 376, 471, 471, + 976, 976, 472, 976, 473, 474, 475, 475, 475, 475, + 471, 376, 471, 471, 976, 976, 472, 976, 473, 474, + 475, 475, 475, 475, 376, 376, 376, 376, 976, 976, + 377, 976, 976, 976, 477, 477, 477, 477, 275, 169, + 275, 275, 976, 976, 276, 976, 277, 479, 480, 480, + 480, 480, 275, 169, 275, 275, 976, 976, 276, 976, + 277, 278, 636, 636, 636, 636, 637, 638, 637, 637, + 976, 976, 639, 976, 976, 479, 480, 480, 480, 480, + 976, 976, 976, 640, 586, 587, 587, 587, 587, 673, + + 674, 673, 673, 976, 976, 675, 689, 689, 689, 689, + 976, 640, 486, 381, 486, 486, 676, 976, 487, 976, + 488, 489, 490, 490, 490, 490, 633, 633, 633, 633, + 976, 976, 642, 976, 676, 483, 484, 484, 484, 484, + 976, 976, 976, 643, 691, 691, 691, 691, 976, 686, + 679, 686, 686, 976, 976, 687, 595, 595, 595, 595, + 976, 643, 486, 381, 486, 486, 688, 976, 487, 976, + 488, 489, 490, 490, 490, 490, 380, 381, 380, 380, + 976, 976, 382, 976, 688, 976, 493, 493, 493, 493, + 976, 976, 976, 383, 601, 602, 602, 602, 602, 695, + + 695, 695, 695, 697, 697, 697, 697, 611, 611, 611, + 611, 383, 288, 183, 288, 288, 976, 976, 289, 976, + 290, 291, 498, 498, 498, 498, 288, 183, 288, 288, + 976, 976, 289, 976, 290, 291, 498, 498, 498, 498, + 500, 501, 501, 501, 501, 976, 976, 976, 649, 611, + 611, 611, 611, 704, 704, 976, 705, 705, 705, 705, + 705, 705, 705, 705, 976, 976, 649, 503, 389, 503, + 503, 976, 976, 504, 976, 505, 506, 507, 507, 507, + 507, 503, 389, 503, 503, 976, 976, 504, 976, 505, + 506, 507, 507, 507, 507, 389, 389, 389, 389, 976, + + 976, 390, 976, 976, 976, 509, 509, 509, 509, 299, + 189, 299, 299, 976, 976, 300, 976, 301, 511, 512, + 512, 512, 512, 299, 189, 299, 299, 976, 976, 300, + 976, 301, 302, 652, 652, 652, 652, 393, 394, 393, + 393, 976, 976, 395, 976, 976, 511, 512, 512, 512, + 512, 976, 976, 976, 653, 617, 617, 617, 617, 976, + 712, 712, 618, 713, 713, 713, 713, 705, 705, 705, + 705, 976, 653, 518, 394, 518, 518, 976, 976, 519, + 618, 520, 521, 522, 522, 522, 522, 389, 389, 389, + 389, 976, 976, 390, 976, 976, 515, 516, 516, 516, + + 516, 976, 726, 726, 655, 727, 727, 727, 727, 976, + 976, 302, 525, 525, 525, 525, 976, 976, 976, 396, + 976, 976, 655, 518, 394, 518, 518, 976, 976, 519, + 976, 520, 521, 522, 522, 522, 522, 396, 527, 528, + 528, 528, 528, 976, 759, 759, 659, 760, 760, 760, + 760, 767, 767, 976, 768, 768, 768, 768, 713, 713, + 713, 713, 976, 976, 659, 530, 398, 530, 530, 976, + 976, 531, 976, 532, 533, 534, 534, 534, 534, 530, + 398, 530, 530, 976, 976, 531, 976, 532, 533, 534, + 534, 534, 534, 398, 398, 398, 398, 976, 976, 399, + + 976, 976, 976, 536, 536, 536, 536, 310, 195, 310, + 310, 976, 976, 311, 976, 312, 538, 539, 539, 539, + 539, 310, 195, 310, 310, 976, 976, 311, 976, 312, + 313, 662, 662, 662, 662, 402, 403, 402, 402, 976, + 976, 404, 976, 976, 538, 539, 539, 539, 539, 976, + 976, 976, 663, 648, 648, 648, 648, 976, 775, 775, + 649, 776, 776, 776, 776, 718, 719, 719, 719, 719, + 663, 545, 403, 545, 545, 976, 976, 546, 649, 547, + 548, 549, 549, 549, 549, 398, 398, 398, 398, 976, + 976, 399, 976, 976, 542, 543, 543, 543, 543, 976, + + 780, 780, 665, 781, 781, 781, 781, 976, 976, 313, + 552, 552, 552, 552, 976, 976, 976, 405, 976, 976, + 665, 545, 403, 545, 545, 976, 976, 546, 976, 547, + 548, 549, 549, 549, 549, 405, 669, 669, 669, 669, + 976, 976, 670, 976, 976, 554, 555, 555, 555, 555, + 976, 976, 976, 671, 658, 658, 658, 658, 976, 788, + 788, 659, 789, 789, 789, 789, 860, 860, 860, 860, + 976, 671, 557, 407, 557, 557, 976, 976, 558, 659, + 559, 560, 561, 561, 561, 561, 557, 407, 557, 557, + 976, 976, 558, 976, 559, 560, 561, 561, 561, 561, + + 407, 407, 407, 407, 976, 976, 408, 976, 976, 976, + 563, 563, 563, 563, 324, 208, 324, 324, 976, 976, + 325, 976, 326, 565, 566, 566, 566, 566, 324, 208, + 324, 324, 976, 976, 325, 976, 326, 327, 677, 677, + 677, 677, 678, 679, 678, 678, 976, 976, 680, 976, + 976, 565, 566, 566, 566, 566, 976, 802, 802, 681, + 803, 803, 803, 803, 835, 835, 976, 836, 836, 836, + 836, 862, 862, 862, 862, 976, 976, 681, 572, 412, + 572, 572, 976, 976, 573, 976, 574, 575, 576, 576, + 576, 576, 674, 674, 674, 674, 976, 976, 683, 976, + + 976, 569, 570, 570, 570, 570, 976, 976, 976, 684, + 689, 689, 689, 689, 976, 843, 843, 690, 844, 844, + 844, 844, 727, 727, 727, 727, 976, 684, 572, 412, + 572, 572, 976, 976, 573, 690, 574, 575, 576, 576, + 576, 576, 411, 412, 411, 411, 976, 976, 413, 976, + 976, 976, 579, 579, 579, 579, 976, 851, 851, 414, + 852, 852, 852, 852, 732, 733, 733, 733, 733, 866, + 866, 866, 866, 868, 868, 868, 868, 414, 335, 218, + 335, 335, 976, 976, 336, 976, 337, 338, 584, 584, + 584, 584, 335, 218, 335, 335, 976, 976, 336, 976, + + 337, 338, 584, 584, 584, 584, 586, 587, 587, 587, + 587, 976, 976, 976, 690, 742, 742, 742, 742, 742, + 742, 742, 742, 748, 749, 749, 749, 749, 872, 872, + 872, 872, 690, 589, 420, 589, 589, 976, 976, 590, + 976, 591, 592, 593, 593, 593, 593, 589, 420, 589, + 589, 976, 976, 590, 976, 591, 592, 593, 593, 593, + 593, 420, 420, 420, 420, 976, 976, 421, 976, 976, + 976, 595, 595, 595, 595, 346, 224, 346, 346, 976, + 976, 347, 976, 348, 597, 598, 598, 598, 598, 346, + 224, 346, 346, 976, 976, 347, 976, 348, 349, 693, + + 693, 693, 693, 424, 425, 424, 424, 976, 976, 426, + 976, 976, 597, 598, 598, 598, 598, 976, 976, 976, + 694, 874, 874, 874, 874, 976, 369, 370, 369, 369, + 976, 976, 371, 758, 758, 758, 758, 976, 694, 604, + 425, 604, 604, 372, 976, 605, 976, 606, 607, 608, + 608, 608, 608, 420, 420, 420, 420, 976, 976, 421, + 976, 372, 601, 602, 602, 602, 602, 976, 976, 976, + 696, 758, 758, 758, 758, 976, 976, 349, 611, 611, + 611, 611, 976, 976, 976, 427, 976, 976, 696, 604, + 425, 604, 604, 976, 976, 605, 976, 606, 607, 608, + + 608, 608, 608, 427, 440, 365, 440, 440, 976, 976, + 441, 976, 442, 443, 619, 619, 619, 619, 976, 976, + 976, 620, 760, 760, 760, 760, 766, 766, 766, 766, + 766, 766, 766, 766, 768, 768, 768, 768, 976, 620, + 440, 365, 440, 440, 976, 976, 441, 706, 707, 443, + 708, 708, 708, 708, 369, 370, 369, 369, 976, 976, + 371, 976, 253, 254, 621, 621, 621, 621, 976, 976, + 976, 622, 768, 768, 768, 768, 976, 393, 394, 393, + 393, 976, 976, 395, 776, 776, 776, 776, 976, 622, + 251, 153, 251, 251, 396, 976, 252, 709, 710, 254, + + 711, 711, 711, 711, 365, 365, 365, 365, 976, 976, + 366, 976, 396, 976, 623, 623, 623, 623, 976, 976, + 976, 624, 781, 781, 781, 781, 976, 976, 718, 719, + 719, 719, 719, 976, 976, 976, 861, 976, 976, 624, + 455, 370, 455, 455, 976, 976, 456, 976, 457, 458, + 625, 625, 625, 625, 861, 976, 976, 626, 781, 781, + 781, 781, 976, 402, 403, 402, 402, 976, 976, 404, + 789, 789, 789, 789, 976, 626, 455, 370, 455, 455, + 405, 976, 456, 714, 715, 458, 716, 716, 716, 716, + 628, 628, 628, 628, 976, 976, 629, 976, 405, 976, + + 627, 627, 627, 627, 976, 976, 976, 630, 794, 795, + 795, 795, 795, 878, 878, 878, 878, 880, 880, 880, + 880, 803, 803, 803, 803, 630, 628, 628, 628, 628, + 976, 976, 629, 976, 717, 718, 719, 719, 719, 719, + 721, 628, 721, 721, 976, 976, 722, 976, 723, 724, + 725, 725, 725, 725, 632, 633, 632, 632, 976, 976, + 634, 976, 473, 474, 631, 631, 631, 631, 976, 976, + 976, 635, 808, 809, 809, 809, 809, 884, 884, 884, + 884, 886, 886, 886, 886, 818, 818, 818, 818, 635, + 632, 633, 632, 632, 976, 976, 634, 976, 728, 729, + + 730, 730, 730, 730, 633, 633, 633, 633, 976, 976, + 642, 976, 731, 732, 733, 733, 733, 733, 735, 633, + 735, 735, 976, 976, 736, 976, 737, 738, 739, 739, + 739, 739, 471, 376, 471, 471, 976, 976, 472, 740, + 741, 474, 742, 742, 742, 742, 637, 638, 637, 637, + 976, 976, 639, 976, 277, 278, 636, 636, 636, 636, + 976, 976, 976, 640, 818, 818, 818, 818, 824, 825, + 825, 825, 825, 890, 890, 890, 890, 892, 892, 892, + 892, 640, 637, 638, 637, 637, 976, 976, 639, 976, + 743, 744, 745, 745, 745, 745, 638, 638, 638, 638, + + 976, 976, 746, 976, 747, 748, 749, 749, 749, 749, + 751, 638, 751, 751, 976, 976, 752, 976, 753, 754, + 755, 755, 755, 755, 275, 169, 275, 275, 976, 976, + 276, 756, 757, 278, 758, 758, 758, 758, 633, 633, + 633, 633, 976, 976, 642, 976, 976, 976, 641, 641, + 641, 641, 976, 976, 976, 643, 834, 834, 834, 834, + 834, 834, 834, 834, 836, 836, 836, 836, 842, 842, + 842, 842, 976, 643, 735, 633, 735, 735, 976, 976, + 736, 976, 737, 738, 739, 739, 739, 739, 645, 638, + 645, 645, 976, 976, 646, 976, 488, 489, 644, 644, + + 644, 644, 976, 976, 976, 647, 842, 842, 842, 842, + 844, 844, 844, 844, 844, 844, 844, 844, 852, 852, + 852, 852, 976, 647, 645, 638, 645, 645, 976, 976, + 646, 976, 761, 762, 763, 763, 763, 763, 751, 638, + 751, 751, 976, 976, 752, 976, 753, 754, 755, 755, + 755, 755, 486, 381, 486, 486, 976, 976, 487, 764, + 765, 489, 766, 766, 766, 766, 503, 389, 503, 503, + 976, 976, 504, 976, 505, 506, 650, 650, 650, 650, + 976, 899, 899, 651, 900, 900, 900, 900, 907, 907, + 976, 908, 908, 908, 908, 560, 882, 882, 882, 882, + + 976, 651, 503, 389, 503, 503, 976, 976, 504, 769, + 770, 506, 771, 771, 771, 771, 393, 394, 393, 393, + 976, 976, 395, 976, 301, 302, 652, 652, 652, 652, + 976, 915, 915, 653, 916, 916, 916, 916, 976, 424, + 425, 424, 424, 923, 923, 426, 924, 924, 924, 924, + 976, 653, 299, 189, 299, 299, 427, 976, 300, 772, + 773, 302, 774, 774, 774, 774, 389, 389, 389, 389, + 976, 976, 390, 976, 427, 976, 654, 654, 654, 654, + 976, 925, 926, 655, 927, 927, 927, 927, 976, 976, + 474, 742, 742, 742, 742, 976, 976, 976, 635, 976, + + 976, 655, 518, 394, 518, 518, 976, 976, 519, 976, + 520, 521, 656, 656, 656, 656, 635, 928, 929, 657, + 930, 930, 930, 930, 976, 884, 884, 884, 884, 931, + 931, 976, 932, 932, 932, 932, 976, 657, 518, 394, + 518, 518, 976, 976, 519, 777, 778, 521, 779, 779, + 779, 779, 530, 398, 530, 530, 976, 976, 531, 976, + 532, 533, 660, 660, 660, 660, 976, 933, 934, 661, + 935, 935, 935, 935, 327, 888, 888, 888, 888, 936, + 937, 976, 938, 938, 938, 938, 976, 661, 530, 398, + 530, 530, 976, 976, 531, 782, 783, 533, 784, 784, + + 784, 784, 402, 403, 402, 402, 976, 976, 404, 976, + 312, 313, 662, 662, 662, 662, 976, 976, 976, 663, + 976, 890, 890, 890, 890, 939, 939, 976, 940, 940, + 940, 940, 575, 894, 894, 894, 894, 663, 310, 195, + 310, 310, 976, 976, 311, 785, 786, 313, 787, 787, + 787, 787, 398, 398, 398, 398, 976, 976, 399, 976, + 976, 976, 664, 664, 664, 664, 976, 941, 942, 665, + 943, 943, 943, 943, 976, 976, 278, 758, 758, 758, + 758, 976, 976, 976, 383, 976, 976, 665, 545, 403, + 545, 545, 976, 976, 546, 976, 547, 548, 666, 666, + + 666, 666, 383, 944, 945, 667, 946, 946, 946, 946, + 900, 900, 900, 900, 900, 900, 900, 900, 908, 908, + 908, 908, 976, 667, 545, 403, 545, 545, 976, 976, + 546, 790, 791, 548, 792, 792, 792, 792, 669, 669, + 669, 669, 976, 976, 670, 976, 976, 976, 668, 668, + 668, 668, 976, 976, 976, 671, 860, 860, 860, 860, + 976, 976, 976, 861, 916, 916, 916, 916, 924, 924, + 924, 924, 976, 671, 669, 669, 669, 669, 976, 976, + 670, 861, 793, 794, 795, 795, 795, 795, 797, 669, + 797, 797, 976, 976, 798, 976, 799, 800, 801, 801, + + 801, 801, 673, 674, 673, 673, 976, 976, 675, 976, + 559, 560, 672, 672, 672, 672, 976, 976, 976, 676, + 878, 878, 878, 878, 976, 976, 976, 879, 924, 924, + 924, 924, 927, 927, 927, 927, 976, 676, 673, 674, + 673, 673, 976, 976, 675, 879, 804, 805, 806, 806, + 806, 806, 674, 674, 674, 674, 976, 976, 683, 976, + 807, 808, 809, 809, 809, 809, 811, 674, 811, 811, + 976, 976, 812, 976, 813, 814, 815, 815, 815, 815, + 557, 407, 557, 557, 976, 976, 558, 816, 817, 560, + 818, 818, 818, 818, 678, 679, 678, 678, 976, 976, + + 680, 976, 326, 327, 677, 677, 677, 677, 976, 976, + 976, 681, 880, 880, 880, 880, 976, 976, 976, 881, + 927, 927, 927, 927, 930, 930, 930, 930, 976, 681, + 678, 679, 678, 678, 976, 976, 680, 881, 819, 820, + 821, 821, 821, 821, 679, 679, 679, 679, 976, 976, + 822, 976, 823, 824, 825, 825, 825, 825, 827, 679, + 827, 827, 976, 976, 828, 976, 829, 830, 831, 831, + 831, 831, 324, 208, 324, 324, 976, 976, 325, 832, + 833, 327, 834, 834, 834, 834, 674, 674, 674, 674, + 976, 976, 683, 976, 976, 976, 682, 682, 682, 682, + + 976, 976, 976, 684, 886, 886, 886, 886, 976, 976, + 976, 887, 930, 930, 930, 930, 932, 932, 932, 932, + 976, 684, 811, 674, 811, 811, 976, 976, 812, 887, + 813, 814, 815, 815, 815, 815, 686, 679, 686, 686, + 976, 976, 687, 976, 574, 575, 685, 685, 685, 685, + 976, 976, 976, 688, 892, 892, 892, 892, 976, 976, + 976, 893, 935, 935, 935, 935, 935, 935, 935, 935, + 976, 688, 686, 679, 686, 686, 976, 976, 687, 893, + 837, 838, 839, 839, 839, 839, 827, 679, 827, 827, + 976, 976, 828, 976, 829, 830, 831, 831, 831, 831, + + 572, 412, 572, 572, 976, 976, 573, 840, 841, 575, + 842, 842, 842, 842, 589, 420, 589, 589, 976, 976, + 590, 976, 591, 592, 691, 691, 691, 691, 976, 976, + 976, 692, 938, 938, 938, 938, 938, 938, 938, 938, + 940, 940, 940, 940, 940, 940, 940, 940, 976, 692, + 589, 420, 589, 589, 976, 976, 590, 845, 846, 592, + 847, 847, 847, 847, 424, 425, 424, 424, 976, 976, + 426, 976, 348, 349, 693, 693, 693, 693, 976, 976, + 976, 694, 943, 943, 943, 943, 943, 943, 943, 943, + 946, 946, 946, 946, 946, 946, 946, 946, 976, 694, + + 346, 224, 346, 346, 976, 976, 347, 848, 849, 349, + 850, 850, 850, 850, 420, 420, 420, 420, 976, 976, + 421, 976, 976, 976, 695, 695, 695, 695, 976, 976, + 962, 696, 963, 962, 976, 976, 964, 976, 489, 766, + 766, 766, 766, 976, 976, 976, 647, 976, 976, 696, + 604, 425, 604, 604, 976, 976, 605, 976, 606, 607, + 697, 697, 697, 697, 647, 976, 976, 698, 965, 966, + 967, 965, 976, 962, 968, 962, 962, 976, 962, 964, + 962, 962, 976, 976, 964, 698, 604, 425, 604, 604, + 976, 976, 605, 853, 854, 607, 855, 855, 855, 855, + + 440, 365, 440, 440, 976, 976, 441, 976, 442, 443, + 708, 708, 708, 708, 440, 365, 440, 440, 976, 976, + 441, 976, 442, 443, 708, 708, 708, 708, 251, 153, + 251, 251, 976, 976, 252, 976, 253, 254, 711, 711, + 711, 711, 251, 153, 251, 251, 976, 976, 252, 976, + 253, 254, 711, 711, 711, 711, 365, 365, 365, 365, + 976, 976, 366, 976, 976, 976, 713, 713, 713, 713, + 455, 370, 455, 455, 976, 976, 456, 976, 457, 458, + 716, 716, 716, 716, 455, 370, 455, 455, 976, 976, + 456, 976, 457, 458, 716, 716, 716, 716, 721, 628, + + 721, 721, 976, 976, 722, 976, 723, 724, 725, 725, + 725, 725, 721, 628, 721, 721, 976, 976, 722, 976, + 723, 724, 725, 725, 725, 725, 628, 628, 628, 628, + 976, 976, 629, 976, 976, 976, 727, 727, 727, 727, + 471, 376, 471, 471, 976, 976, 472, 976, 473, 729, + 730, 730, 730, 730, 471, 376, 471, 471, 976, 976, + 472, 976, 473, 474, 864, 864, 864, 864, 632, 633, + 632, 632, 976, 976, 634, 976, 976, 729, 730, 730, + 730, 730, 976, 976, 976, 865, 794, 795, 795, 795, + 795, 976, 976, 976, 879, 927, 927, 927, 927, 976, + + 976, 976, 881, 865, 628, 628, 628, 628, 976, 976, + 629, 976, 879, 732, 733, 733, 733, 733, 976, 976, + 881, 867, 935, 935, 935, 935, 976, 976, 970, 887, + 970, 970, 976, 976, 971, 976, 976, 976, 976, 867, + 735, 633, 735, 735, 976, 976, 736, 887, 737, 738, + 739, 739, 739, 739, 735, 633, 735, 735, 976, 976, + 736, 976, 737, 738, 739, 739, 739, 739, 275, 169, + 275, 275, 976, 976, 276, 976, 277, 744, 745, 745, + 745, 745, 275, 169, 275, 275, 976, 976, 276, 976, + 277, 278, 870, 870, 870, 870, 637, 638, 637, 637, + + 976, 976, 639, 976, 976, 744, 745, 745, 745, 745, + 976, 976, 976, 871, 943, 943, 943, 943, 976, 976, + 976, 893, 965, 959, 967, 965, 976, 976, 968, 976, + 976, 871, 751, 638, 751, 751, 976, 976, 752, 893, + 753, 754, 755, 755, 755, 755, 633, 633, 633, 633, + 976, 976, 642, 976, 976, 748, 749, 749, 749, 749, + 976, 976, 962, 873, 963, 962, 976, 976, 964, 965, + 966, 967, 965, 976, 970, 968, 970, 970, 976, 976, + 971, 873, 751, 638, 751, 751, 976, 976, 752, 976, + 753, 754, 755, 755, 755, 755, 633, 633, 633, 633, + + 976, 976, 642, 976, 976, 976, 760, 760, 760, 760, + 486, 381, 486, 486, 976, 976, 487, 976, 488, 762, + 763, 763, 763, 763, 486, 381, 486, 486, 976, 976, + 487, 976, 488, 489, 876, 876, 876, 876, 645, 638, + 645, 645, 976, 976, 646, 976, 976, 762, 763, 763, + 763, 763, 976, 976, 976, 877, 973, 959, 974, 973, + 976, 970, 975, 970, 970, 976, 970, 971, 970, 970, + 976, 976, 971, 877, 503, 389, 503, 503, 976, 976, + 504, 976, 505, 506, 771, 771, 771, 771, 503, 389, + 503, 503, 976, 976, 504, 976, 505, 506, 771, 771, + + 771, 771, 299, 189, 299, 299, 976, 976, 300, 976, + 301, 302, 774, 774, 774, 774, 299, 189, 299, 299, + 976, 976, 300, 976, 301, 302, 774, 774, 774, 774, + 389, 389, 389, 389, 976, 976, 390, 976, 976, 976, + 776, 776, 776, 776, 518, 394, 518, 518, 976, 976, + 519, 976, 520, 521, 779, 779, 779, 779, 518, 394, + 518, 518, 976, 976, 519, 976, 520, 521, 779, 779, + 779, 779, 530, 398, 530, 530, 976, 976, 531, 976, + 532, 533, 784, 784, 784, 784, 530, 398, 530, 530, + 976, 976, 531, 976, 532, 533, 784, 784, 784, 784, + + 310, 195, 310, 310, 976, 976, 311, 976, 312, 313, + 787, 787, 787, 787, 310, 195, 310, 310, 976, 976, + 311, 976, 312, 313, 787, 787, 787, 787, 398, 398, + 398, 398, 976, 976, 399, 976, 976, 976, 789, 789, + 789, 789, 545, 403, 545, 545, 976, 976, 546, 976, + 547, 548, 792, 792, 792, 792, 545, 403, 545, 545, + 976, 976, 546, 976, 547, 548, 792, 792, 792, 792, + 797, 669, 797, 797, 976, 976, 798, 976, 799, 800, + 801, 801, 801, 801, 797, 669, 797, 797, 976, 976, + 798, 976, 799, 800, 801, 801, 801, 801, 669, 669, + + 669, 669, 976, 976, 670, 976, 976, 976, 803, 803, + 803, 803, 557, 407, 557, 557, 976, 976, 558, 976, + 559, 805, 806, 806, 806, 806, 557, 407, 557, 557, + 976, 976, 558, 976, 559, 560, 882, 882, 882, 882, + 673, 674, 673, 673, 976, 976, 675, 976, 976, 805, + 806, 806, 806, 806, 976, 976, 976, 883, 560, 818, + 818, 818, 818, 976, 976, 976, 676, 973, 959, 974, + 973, 976, 976, 975, 976, 883, 669, 669, 669, 669, + 976, 976, 670, 976, 676, 808, 809, 809, 809, 809, + 976, 976, 976, 885, 973, 959, 974, 973, 976, 976, + + 975, 973, 966, 974, 973, 976, 976, 975, 976, 976, + 976, 885, 811, 674, 811, 811, 976, 976, 812, 976, + 813, 814, 815, 815, 815, 815, 811, 674, 811, 811, + 976, 976, 812, 976, 813, 814, 815, 815, 815, 815, + 324, 208, 324, 324, 976, 976, 325, 976, 326, 820, + 821, 821, 821, 821, 324, 208, 324, 324, 976, 976, + 325, 976, 326, 327, 888, 888, 888, 888, 678, 679, + 678, 678, 976, 976, 680, 976, 976, 820, 821, 821, + 821, 821, 976, 976, 976, 889, 973, 959, 974, 973, + 976, 976, 975, 976, 976, 976, 976, 976, 976, 976, + + 976, 976, 976, 889, 827, 679, 827, 827, 976, 976, + 828, 976, 829, 830, 831, 831, 831, 831, 674, 674, + 674, 674, 976, 976, 683, 976, 976, 824, 825, 825, + 825, 825, 976, 976, 976, 891, 976, 976, 976, 976, + 976, 976, 327, 834, 834, 834, 834, 976, 976, 976, + 414, 976, 976, 891, 827, 679, 827, 827, 976, 976, + 828, 976, 829, 830, 831, 831, 831, 831, 414, 674, + 674, 674, 674, 976, 976, 683, 976, 976, 976, 836, + 836, 836, 836, 572, 412, 572, 572, 976, 976, 573, + 976, 574, 838, 839, 839, 839, 839, 572, 412, 572, + + 572, 976, 976, 573, 976, 574, 575, 894, 894, 894, + 894, 686, 679, 686, 686, 976, 976, 687, 976, 976, + 838, 839, 839, 839, 839, 976, 976, 976, 895, 575, + 842, 842, 842, 842, 976, 976, 976, 688, 976, 976, + 976, 976, 976, 976, 976, 976, 895, 976, 976, 976, + 976, 976, 976, 976, 976, 688, 589, 420, 589, 589, + 976, 976, 590, 976, 591, 592, 847, 847, 847, 847, + 589, 420, 589, 589, 976, 976, 590, 976, 591, 592, + 847, 847, 847, 847, 346, 224, 346, 346, 976, 976, + 347, 976, 348, 349, 850, 850, 850, 850, 346, 224, + + 346, 346, 976, 976, 347, 976, 348, 349, 850, 850, + 850, 850, 420, 420, 420, 420, 976, 976, 421, 976, + 976, 976, 852, 852, 852, 852, 604, 425, 604, 604, + 976, 976, 605, 976, 606, 607, 855, 855, 855, 855, + 604, 425, 604, 604, 976, 976, 605, 976, 606, 607, + 855, 855, 855, 855, 721, 628, 721, 721, 976, 976, + 722, 976, 723, 724, 862, 862, 862, 862, 976, 976, + 976, 863, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 863, + 721, 628, 721, 721, 976, 976, 722, 901, 902, 724, + + 903, 903, 903, 903, 632, 633, 632, 632, 976, 976, + 634, 976, 473, 474, 864, 864, 864, 864, 976, 976, + 976, 865, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 865, + 471, 376, 471, 471, 976, 976, 472, 904, 905, 474, + 906, 906, 906, 906, 628, 628, 628, 628, 976, 976, + 629, 976, 976, 976, 866, 866, 866, 866, 976, 976, + 976, 867, 976, 976, 976, 976, 976, 976, 560, 930, + 930, 930, 930, 976, 976, 976, 676, 976, 976, 867, + 735, 633, 735, 735, 976, 976, 736, 976, 737, 738, + + 868, 868, 868, 868, 676, 976, 976, 869, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 869, 735, 633, 735, 735, + 976, 976, 736, 909, 910, 738, 911, 911, 911, 911, + 637, 638, 637, 637, 976, 976, 639, 976, 277, 278, + 870, 870, 870, 870, 976, 976, 976, 871, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 871, 275, 169, 275, 275, + 976, 976, 276, 912, 913, 278, 914, 914, 914, 914, + 633, 633, 633, 633, 976, 976, 642, 976, 976, 976, + + 872, 872, 872, 872, 976, 976, 976, 873, 976, 976, + 976, 976, 976, 976, 327, 938, 938, 938, 938, 976, + 976, 976, 414, 976, 976, 873, 751, 638, 751, 751, + 976, 976, 752, 976, 753, 754, 874, 874, 874, 874, + 414, 976, 976, 875, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 875, 751, 638, 751, 751, 976, 976, 752, 917, + 918, 754, 919, 919, 919, 919, 645, 638, 645, 645, + 976, 976, 646, 976, 488, 489, 876, 876, 876, 876, + 976, 976, 976, 877, 976, 976, 976, 976, 976, 976, + + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 877, 486, 381, 486, 486, 976, 976, 487, 920, + 921, 489, 922, 922, 922, 922, 632, 633, 632, 632, + 976, 976, 634, 470, 473, 976, 976, 976, 976, 976, + 976, 976, 976, 635, 575, 946, 946, 946, 946, 976, + 976, 976, 688, 976, 976, 976, 976, 976, 976, 976, + 976, 635, 628, 628, 628, 628, 976, 976, 629, 976, + 688, 976, 908, 908, 908, 908, 637, 638, 637, 637, + 976, 976, 639, 274, 277, 976, 976, 976, 976, 976, + 976, 976, 976, 383, 976, 976, 976, 976, 976, 976, + + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 383, 633, 633, 633, 633, 976, 976, 642, 976, + 976, 976, 916, 916, 916, 916, 645, 638, 645, 645, + 976, 976, 646, 485, 488, 976, 976, 976, 976, 976, + 976, 976, 976, 647, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 647, 669, 669, 669, 669, 976, 976, 670, 976, + 976, 976, 932, 932, 932, 932, 46, 46, 46, 46, + 46, 46, 46, 46, 81, 81, 81, 81, 81, 81, + 81, 81, 109, 109, 109, 109, 109, 109, 109, 109, + + 119, 119, 119, 119, 119, 119, 119, 119, 130, 130, + 976, 130, 130, 130, 130, 130, 131, 131, 976, 131, + 131, 131, 131, 131, 134, 976, 976, 134, 135, 976, + 976, 135, 172, 976, 976, 172, 976, 172, 172, 172, + 173, 173, 976, 173, 173, 173, 173, 173, 211, 976, + 976, 211, 976, 211, 211, 212, 212, 976, 212, 212, + 212, 212, 212, 227, 227, 976, 227, 976, 227, 227, + 227, 230, 230, 976, 230, 230, 230, 230, 230, 250, + 250, 250, 250, 250, 250, 250, 250, 263, 263, 263, + 263, 263, 263, 263, 263, 269, 269, 976, 976, 269, + + 269, 274, 274, 274, 274, 274, 274, 274, 274, 287, + 287, 287, 287, 287, 287, 287, 287, 298, 298, 298, + 298, 298, 298, 298, 298, 309, 309, 309, 309, 309, + 309, 309, 309, 323, 323, 323, 323, 323, 323, 323, + 323, 212, 212, 976, 212, 212, 212, 212, 212, 334, + 334, 334, 334, 334, 334, 334, 334, 345, 345, 345, + 345, 345, 345, 345, 345, 227, 227, 976, 227, 976, + 227, 227, 227, 230, 230, 976, 230, 230, 230, 230, + 230, 131, 131, 976, 131, 131, 131, 131, 131, 134, + 976, 976, 134, 250, 250, 250, 250, 250, 250, 250, + + 250, 263, 263, 263, 263, 263, 263, 263, 263, 269, + 269, 976, 976, 269, 269, 274, 274, 274, 274, 274, + 274, 274, 274, 439, 439, 439, 439, 439, 439, 439, + 439, 454, 454, 454, 454, 454, 454, 454, 454, 470, + 470, 470, 470, 470, 470, 470, 470, 485, 485, 485, + 485, 485, 485, 485, 485, 287, 287, 287, 287, 287, + 287, 287, 287, 502, 502, 502, 502, 502, 502, 502, + 502, 298, 298, 298, 298, 298, 298, 298, 298, 517, + 517, 517, 517, 517, 517, 517, 517, 529, 529, 529, + 529, 529, 529, 529, 529, 309, 309, 309, 309, 309, + + 309, 309, 309, 544, 544, 544, 544, 544, 544, 544, + 544, 556, 556, 556, 556, 556, 556, 556, 556, 323, + 323, 323, 323, 323, 323, 323, 323, 571, 571, 571, + 571, 571, 571, 571, 571, 334, 334, 334, 334, 334, + 334, 334, 334, 588, 588, 588, 588, 588, 588, 588, + 588, 345, 345, 345, 345, 345, 345, 345, 345, 603, + 603, 603, 603, 603, 603, 603, 603, 131, 131, 976, + 131, 131, 131, 131, 131, 134, 976, 976, 134, 439, + 439, 439, 439, 439, 439, 439, 439, 250, 250, 250, + 250, 250, 250, 250, 250, 454, 454, 454, 454, 454, + + 454, 454, 454, 470, 470, 470, 470, 470, 470, 470, + 470, 274, 274, 274, 274, 274, 274, 274, 274, 485, + 485, 485, 485, 485, 485, 485, 485, 287, 287, 287, + 287, 287, 287, 287, 287, 502, 502, 502, 502, 502, + 502, 502, 502, 298, 298, 298, 298, 298, 298, 298, + 298, 517, 517, 517, 517, 517, 517, 517, 517, 529, + 529, 529, 529, 529, 529, 529, 529, 309, 309, 309, + 309, 309, 309, 309, 309, 544, 544, 544, 544, 544, + 544, 544, 544, 556, 556, 556, 556, 556, 556, 556, + 556, 323, 323, 323, 323, 323, 323, 323, 323, 571, + + 571, 571, 571, 571, 571, 571, 571, 334, 334, 334, + 334, 334, 334, 334, 334, 588, 588, 588, 588, 588, + 588, 588, 588, 345, 345, 345, 345, 345, 345, 345, + 345, 603, 603, 603, 603, 603, 603, 603, 603, 131, + 131, 976, 131, 131, 131, 131, 131, 134, 976, 976, + 134, 439, 439, 439, 439, 439, 439, 439, 439, 250, + 250, 250, 250, 250, 250, 250, 250, 454, 454, 454, + 454, 454, 454, 454, 454, 720, 720, 720, 720, 720, + 720, 720, 720, 470, 470, 470, 470, 470, 470, 470, + 470, 734, 734, 734, 734, 734, 734, 734, 734, 274, + + 274, 274, 274, 274, 274, 274, 274, 750, 750, 750, + 750, 750, 750, 750, 750, 485, 485, 485, 485, 485, + 485, 485, 485, 502, 502, 502, 502, 502, 502, 502, + 502, 298, 298, 298, 298, 298, 298, 298, 298, 517, + 517, 517, 517, 517, 517, 517, 517, 529, 529, 529, + 529, 529, 529, 529, 529, 309, 309, 309, 309, 309, + 309, 309, 309, 544, 544, 544, 544, 544, 544, 544, + 544, 796, 796, 796, 796, 796, 796, 796, 796, 556, + 556, 556, 556, 556, 556, 556, 556, 810, 810, 810, + 810, 810, 810, 810, 810, 323, 323, 323, 323, 323, + + 323, 323, 323, 826, 826, 826, 826, 826, 826, 826, + 826, 571, 571, 571, 571, 571, 571, 571, 571, 588, + 588, 588, 588, 588, 588, 588, 588, 345, 345, 345, + 345, 345, 345, 345, 345, 603, 603, 603, 603, 603, + 603, 603, 603, 131, 131, 976, 131, 131, 131, 131, + 131, 134, 976, 976, 134, 439, 439, 439, 439, 439, + 439, 439, 439, 250, 250, 250, 250, 250, 250, 250, + 250, 454, 454, 454, 454, 454, 454, 454, 454, 720, + 720, 720, 720, 720, 720, 720, 720, 470, 470, 470, + 470, 470, 470, 470, 470, 734, 734, 734, 734, 734, + + 734, 734, 734, 274, 274, 274, 274, 274, 274, 274, + 274, 750, 750, 750, 750, 750, 750, 750, 750, 485, + 485, 485, 485, 485, 485, 485, 485, 502, 502, 502, + 502, 502, 502, 502, 502, 298, 298, 298, 298, 298, + 298, 298, 298, 517, 517, 517, 517, 517, 517, 517, + 517, 529, 529, 529, 529, 529, 529, 529, 529, 309, + 309, 309, 309, 309, 309, 309, 309, 544, 544, 544, + 544, 544, 544, 544, 544, 796, 796, 796, 796, 796, + 796, 796, 796, 556, 556, 556, 556, 556, 556, 556, + 556, 810, 810, 810, 810, 810, 810, 810, 810, 323, + + 323, 323, 323, 323, 323, 323, 323, 826, 826, 826, + 826, 826, 826, 826, 826, 571, 571, 571, 571, 571, + 571, 571, 571, 588, 588, 588, 588, 588, 588, 588, + 588, 345, 345, 345, 345, 345, 345, 345, 345, 603, + 603, 603, 603, 603, 603, 603, 603, 131, 131, 976, + 131, 131, 131, 131, 131, 134, 976, 976, 134, 720, + 720, 720, 720, 720, 720, 720, 720, 470, 470, 470, + 470, 470, 470, 470, 470, 734, 734, 734, 734, 734, + 734, 734, 734, 274, 274, 274, 274, 274, 274, 274, + 274, 750, 750, 750, 750, 750, 750, 750, 750, 485, + + 485, 485, 485, 485, 485, 485, 485, 958, 958, 958, + 958, 958, 958, 958, 958, 969, 969, 976, 969, 969, + 969, 969, 969, 972, 972, 972, 972, 972, 972, 972, + 972, 45, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976 + } ; + +static yyconst flex_int16_t yy_chk[8681] = + { 0, + 0, 1, 1, 1, 1, 0, 1039, 1, 2, 2, + 2, 2, 122, 122, 2, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 5, 5, 5, 5, 61, 61, 5, + 9, 9, 9, 9, 9, 9, 66, 66, 66, 66, + 66, 5, 5, 10, 10, 10, 10, 10, 10, 1017, + 5, 6, 6, 6, 6, 229, 229, 6, 11, 11, + + 11, 11, 11, 11, 67, 67, 67, 67, 74, 6, + 6, 12, 12, 12, 12, 12, 12, 1014, 6, 7, + 7, 7, 7, 428, 74, 7, 428, 7, 7, 7, + 7, 7, 7, 69, 69, 69, 69, 69, 7, 13, + 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, + 14, 15, 15, 15, 15, 15, 15, 16, 16, 16, + 16, 16, 16, 17, 17, 17, 17, 354, 17, 17, + 18, 18, 18, 18, 1012, 18, 18, 70, 70, 70, + 70, 354, 17, 19, 19, 19, 19, 19, 19, 18, + 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, + + 21, 21, 22, 22, 22, 22, 22, 22, 23, 23, + 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, + 25, 25, 25, 25, 25, 25, 267, 39, 39, 39, + 39, 25, 39, 39, 40, 40, 40, 40, 49, 40, + 40, 133, 267, 25, 1006, 25, 26, 26, 26, 26, + 26, 26, 47, 856, 47, 47, 856, 26, 47, 39, + 133, 49, 41, 41, 41, 41, 40, 41, 41, 26, + 950, 26, 27, 27, 27, 27, 27, 27, 235, 42, + 42, 42, 42, 27, 42, 42, 230, 230, 71, 71, + 71, 71, 71, 235, 41, 27, 71, 27, 28, 28, + + 28, 28, 28, 28, 72, 72, 72, 72, 950, 28, + 999, 42, 231, 231, 71, 75, 75, 75, 75, 947, + 465, 28, 947, 28, 29, 29, 29, 29, 29, 29, + 77, 77, 77, 77, 994, 29, 465, 43, 43, 43, + 43, 43, 43, 79, 79, 79, 79, 29, 43, 29, + 30, 30, 30, 30, 30, 30, 78, 78, 78, 78, + 78, 30, 952, 44, 44, 44, 44, 44, 44, 86, + 86, 86, 86, 30, 44, 30, 31, 31, 31, 31, + 31, 31, 85, 85, 85, 85, 85, 31, 76, 76, + 76, 76, 83, 949, 83, 83, 432, 83, 83, 31, + + 432, 31, 32, 32, 32, 32, 32, 32, 76, 89, + 89, 89, 89, 32, 87, 87, 87, 87, 87, 948, + 699, 898, 87, 612, 76, 32, 699, 32, 33, 33, + 33, 33, 897, 33, 33, 88, 88, 88, 88, 88, + 87, 91, 91, 91, 91, 91, 612, 33, 92, 92, + 92, 92, 94, 94, 94, 94, 94, 901, 901, 33, + 292, 33, 34, 34, 34, 34, 859, 34, 34, 95, + 95, 95, 95, 100, 100, 100, 100, 100, 292, 902, + 902, 34, 101, 101, 101, 101, 102, 102, 102, 102, + 102, 904, 904, 34, 102, 34, 35, 35, 35, 35, + + 35, 35, 103, 103, 103, 103, 857, 35, 104, 104, + 104, 104, 102, 105, 105, 105, 105, 905, 905, 35, + 703, 35, 36, 36, 36, 36, 36, 36, 104, 107, + 107, 107, 107, 36, 106, 106, 106, 106, 106, 113, + 113, 113, 113, 113, 104, 36, 702, 36, 37, 37, + 37, 37, 37, 37, 339, 111, 700, 111, 111, 37, + 111, 111, 114, 114, 114, 114, 116, 116, 116, 116, + 116, 37, 339, 37, 38, 38, 38, 38, 38, 38, + 117, 117, 117, 117, 616, 38, 111, 120, 111, 120, + 120, 466, 128, 120, 128, 128, 444, 38, 128, 38, + + 68, 68, 68, 68, 459, 615, 68, 466, 953, 68, + 68, 68, 68, 68, 444, 909, 909, 68, 125, 125, + 125, 125, 459, 126, 126, 126, 126, 127, 127, 127, + 127, 150, 150, 150, 150, 68, 73, 73, 73, 73, + 896, 614, 73, 126, 896, 953, 73, 73, 73, 73, + 152, 152, 152, 152, 152, 910, 910, 155, 155, 126, + 155, 155, 155, 155, 912, 912, 73, 156, 156, 156, + 156, 157, 157, 157, 157, 157, 913, 913, 613, 157, + 498, 507, 73, 80, 80, 80, 80, 522, 433, 80, + 917, 917, 80, 80, 80, 80, 80, 157, 498, 507, + + 80, 158, 158, 158, 158, 522, 159, 159, 158, 159, + 159, 159, 159, 164, 164, 164, 164, 429, 80, 90, + 90, 90, 90, 918, 918, 90, 158, 534, 90, 90, + 90, 90, 90, 955, 549, 161, 90, 161, 161, 161, + 161, 163, 163, 163, 163, 534, 362, 163, 166, 166, + 166, 166, 549, 584, 90, 93, 93, 93, 93, 920, + 920, 93, 593, 955, 93, 93, 93, 93, 93, 921, + 921, 584, 93, 168, 168, 168, 168, 168, 171, 171, + 593, 171, 171, 171, 171, 176, 176, 176, 176, 956, + 93, 96, 96, 96, 96, 361, 956, 96, 360, 359, + + 96, 96, 96, 96, 96, 358, 357, 173, 96, 173, + 173, 355, 173, 173, 174, 246, 174, 174, 245, 174, + 174, 180, 180, 180, 180, 608, 96, 108, 108, 108, + 108, 244, 708, 108, 716, 243, 108, 108, 108, 108, + 108, 725, 739, 608, 108, 177, 177, 177, 177, 177, + 708, 242, 716, 177, 178, 178, 178, 178, 240, 725, + 739, 178, 108, 115, 115, 115, 115, 239, 238, 115, + 237, 177, 115, 115, 115, 115, 115, 149, 147, 178, + 115, 179, 179, 146, 179, 179, 179, 179, 182, 182, + 182, 182, 182, 186, 186, 186, 186, 145, 115, 118, + + 118, 118, 118, 144, 143, 118, 141, 140, 118, 118, + 118, 118, 118, 139, 185, 185, 118, 185, 185, 185, + 185, 188, 188, 188, 188, 188, 191, 191, 137, 191, + 191, 191, 191, 136, 118, 153, 153, 153, 153, 132, + 131, 153, 129, 153, 153, 153, 153, 153, 153, 154, + 154, 154, 154, 123, 755, 154, 112, 154, 154, 154, + 154, 154, 154, 162, 162, 162, 162, 97, 84, 162, + 65, 162, 755, 162, 162, 162, 162, 169, 169, 169, + 169, 64, 63, 169, 62, 169, 169, 169, 169, 169, + 169, 170, 170, 170, 170, 60, 59, 170, 58, 170, + + 170, 170, 170, 170, 170, 183, 183, 183, 183, 57, + 56, 183, 55, 183, 183, 183, 183, 183, 183, 184, + 184, 184, 184, 54, 53, 184, 51, 184, 184, 184, + 184, 184, 184, 189, 189, 189, 189, 45, 0, 189, + 0, 189, 189, 189, 189, 189, 189, 190, 190, 190, + 190, 0, 0, 190, 0, 190, 190, 190, 190, 190, + 190, 192, 192, 192, 192, 194, 194, 194, 194, 194, + 195, 195, 195, 195, 0, 0, 195, 0, 195, 195, + 195, 195, 195, 195, 196, 196, 196, 196, 0, 0, + 196, 0, 196, 196, 196, 196, 196, 196, 197, 197, + + 0, 197, 197, 197, 197, 199, 199, 199, 199, 200, + 200, 200, 200, 200, 0, 0, 771, 200, 201, 201, + 201, 201, 779, 202, 202, 201, 202, 202, 202, 202, + 203, 203, 203, 203, 771, 200, 205, 205, 205, 205, + 779, 0, 0, 201, 207, 207, 207, 207, 207, 208, + 208, 208, 208, 0, 0, 208, 0, 208, 208, 208, + 208, 208, 208, 209, 209, 209, 209, 784, 0, 209, + 792, 209, 209, 209, 209, 209, 209, 210, 210, 0, + 210, 210, 210, 210, 212, 784, 212, 212, 792, 212, + 212, 213, 0, 213, 213, 0, 213, 213, 215, 215, + + 215, 215, 217, 217, 217, 217, 217, 220, 220, 0, + 220, 220, 220, 220, 801, 212, 0, 212, 221, 221, + 221, 221, 213, 815, 213, 216, 216, 216, 216, 0, + 0, 216, 801, 0, 216, 216, 216, 216, 216, 0, + 0, 815, 216, 223, 223, 223, 223, 223, 226, 226, + 831, 226, 226, 226, 226, 233, 233, 233, 233, 0, + 216, 218, 218, 218, 218, 0, 0, 218, 831, 218, + 218, 218, 218, 218, 218, 219, 219, 219, 219, 847, + 0, 219, 0, 219, 219, 219, 219, 219, 219, 222, + 222, 222, 222, 0, 0, 222, 0, 847, 222, 222, + + 222, 222, 222, 855, 0, 228, 222, 228, 228, 0, + 0, 228, 247, 247, 247, 247, 247, 248, 248, 248, + 248, 855, 0, 0, 222, 224, 224, 224, 224, 0, + 0, 224, 0, 224, 224, 224, 224, 224, 224, 225, + 225, 225, 225, 0, 0, 225, 0, 225, 225, 225, + 225, 225, 225, 249, 249, 249, 249, 0, 0, 249, + 0, 0, 249, 249, 249, 249, 249, 0, 0, 0, + 249, 254, 254, 254, 254, 256, 256, 256, 256, 258, + 258, 258, 258, 259, 259, 259, 259, 0, 249, 250, + 250, 250, 250, 0, 0, 250, 0, 250, 250, 250, + + 250, 250, 250, 251, 251, 251, 251, 0, 0, 251, + 0, 251, 251, 251, 251, 251, 251, 255, 255, 255, + 255, 0, 0, 255, 260, 260, 260, 260, 262, 262, + 262, 262, 0, 0, 255, 0, 0, 261, 261, 261, + 261, 269, 269, 269, 269, 0, 0, 269, 272, 272, + 272, 272, 255, 257, 257, 257, 257, 261, 0, 257, + 0, 0, 0, 257, 257, 257, 257, 271, 271, 271, + 271, 271, 0, 261, 263, 263, 263, 263, 957, 957, + 263, 0, 263, 957, 263, 263, 263, 263, 264, 264, + 264, 264, 958, 958, 264, 0, 264, 958, 264, 264, + + 264, 264, 273, 273, 273, 273, 0, 0, 273, 0, + 0, 273, 273, 273, 273, 273, 0, 0, 0, 273, + 278, 278, 278, 278, 280, 280, 280, 280, 282, 282, + 282, 282, 283, 283, 283, 283, 0, 273, 274, 274, + 274, 274, 0, 0, 274, 0, 274, 274, 274, 274, + 274, 274, 275, 275, 275, 275, 0, 0, 275, 0, + 275, 275, 275, 275, 275, 275, 279, 279, 279, 279, + 0, 0, 279, 284, 284, 284, 284, 284, 285, 285, + 285, 285, 0, 279, 286, 286, 286, 286, 286, 0, + 0, 0, 286, 291, 291, 291, 291, 293, 293, 293, + + 293, 279, 281, 281, 281, 281, 961, 961, 281, 0, + 286, 961, 281, 281, 281, 281, 287, 287, 287, 287, + 0, 0, 287, 0, 287, 287, 287, 287, 287, 287, + 294, 294, 294, 294, 0, 0, 294, 0, 0, 0, + 294, 294, 294, 294, 295, 295, 295, 295, 295, 296, + 296, 296, 296, 297, 297, 297, 297, 0, 0, 297, + 0, 0, 297, 297, 297, 297, 297, 0, 0, 0, + 297, 302, 302, 302, 302, 0, 303, 303, 303, 303, + 0, 0, 303, 304, 304, 304, 304, 0, 297, 298, + 298, 298, 298, 303, 0, 298, 0, 298, 298, 298, + + 298, 298, 298, 306, 306, 306, 306, 306, 0, 903, + 903, 303, 305, 305, 305, 305, 0, 0, 305, 903, + 0, 0, 305, 305, 305, 305, 307, 307, 307, 307, + 308, 308, 308, 308, 0, 0, 308, 903, 0, 308, + 308, 308, 308, 308, 0, 0, 0, 308, 313, 313, + 313, 313, 0, 314, 314, 314, 314, 0, 0, 314, + 315, 315, 315, 315, 0, 308, 309, 309, 309, 309, + 314, 0, 309, 0, 309, 309, 309, 309, 309, 309, + 317, 317, 317, 317, 318, 318, 318, 318, 314, 316, + 316, 316, 316, 0, 0, 316, 0, 0, 0, 316, + + 316, 316, 316, 320, 320, 320, 320, 320, 321, 321, + 321, 321, 322, 322, 322, 322, 0, 0, 322, 0, + 0, 322, 322, 322, 322, 322, 0, 0, 0, 322, + 327, 327, 327, 327, 0, 328, 328, 328, 328, 0, + 0, 328, 329, 329, 329, 329, 0, 322, 323, 323, + 323, 323, 328, 0, 323, 0, 323, 323, 323, 323, + 323, 323, 331, 331, 331, 331, 331, 0, 911, 911, + 328, 330, 330, 330, 330, 0, 0, 330, 911, 0, + 0, 330, 330, 330, 330, 332, 332, 332, 332, 333, + 333, 333, 333, 333, 0, 0, 911, 333, 338, 338, + + 338, 338, 340, 340, 340, 340, 342, 342, 342, 342, + 342, 343, 343, 343, 343, 333, 334, 334, 334, 334, + 0, 0, 334, 0, 334, 334, 334, 334, 334, 334, + 341, 341, 341, 341, 0, 0, 341, 0, 919, 919, + 341, 341, 341, 341, 344, 344, 344, 344, 919, 0, + 344, 0, 0, 344, 344, 344, 344, 344, 0, 0, + 0, 344, 349, 349, 349, 349, 919, 350, 350, 350, + 350, 0, 0, 350, 351, 351, 351, 351, 0, 344, + 345, 345, 345, 345, 350, 0, 345, 0, 345, 345, + 345, 345, 345, 345, 364, 364, 364, 364, 364, 0, + + 0, 0, 350, 352, 352, 352, 352, 0, 0, 352, + 0, 0, 0, 352, 352, 352, 352, 365, 365, 365, + 365, 0, 0, 365, 0, 365, 365, 365, 365, 365, + 365, 366, 366, 366, 366, 0, 0, 366, 0, 366, + 366, 366, 366, 366, 366, 367, 367, 0, 367, 367, + 367, 367, 368, 368, 368, 368, 0, 0, 368, 0, + 0, 0, 368, 368, 368, 368, 0, 372, 372, 368, + 372, 372, 372, 372, 375, 375, 375, 375, 375, 378, + 378, 0, 378, 378, 378, 378, 0, 368, 369, 369, + 369, 369, 369, 369, 0, 0, 0, 369, 384, 384, + + 384, 384, 0, 385, 385, 384, 385, 385, 385, 385, + 436, 436, 436, 436, 436, 369, 370, 370, 370, 370, + 0, 0, 370, 384, 370, 370, 370, 370, 370, 370, + 371, 371, 371, 371, 0, 0, 371, 0, 371, 371, + 371, 371, 371, 371, 374, 374, 374, 374, 374, 374, + 374, 374, 374, 391, 391, 0, 391, 391, 391, 391, + 400, 400, 0, 400, 400, 400, 400, 0, 374, 374, + 374, 376, 376, 376, 376, 0, 0, 376, 0, 376, + 376, 376, 376, 376, 376, 377, 377, 377, 377, 0, + 0, 377, 0, 377, 377, 377, 377, 377, 377, 379, + + 379, 379, 379, 0, 0, 379, 0, 0, 0, 379, + 379, 379, 379, 0, 409, 409, 379, 409, 409, 409, + 409, 415, 415, 415, 415, 0, 416, 416, 415, 416, + 416, 416, 416, 0, 379, 380, 380, 380, 380, 380, + 380, 0, 0, 0, 380, 0, 415, 422, 422, 0, + 422, 422, 422, 422, 437, 437, 437, 437, 443, 443, + 443, 443, 380, 381, 381, 381, 381, 0, 0, 381, + 0, 381, 381, 381, 381, 381, 381, 382, 382, 382, + 382, 0, 0, 382, 0, 382, 382, 382, 382, 382, + 382, 383, 383, 383, 383, 0, 0, 383, 383, 383, + + 0, 383, 383, 383, 383, 0, 0, 0, 383, 445, + 445, 445, 445, 0, 0, 438, 438, 438, 438, 438, + 0, 0, 0, 438, 0, 0, 383, 386, 386, 386, + 386, 0, 0, 386, 0, 386, 386, 386, 386, 386, + 386, 438, 0, 0, 386, 451, 451, 451, 451, 451, + 452, 452, 452, 452, 458, 458, 458, 458, 460, 460, + 460, 460, 386, 387, 387, 387, 387, 0, 0, 387, + 387, 387, 387, 387, 387, 387, 387, 388, 388, 388, + 388, 0, 0, 388, 0, 0, 0, 388, 388, 388, + 388, 0, 0, 0, 388, 461, 461, 461, 461, 467, + + 467, 467, 467, 467, 468, 468, 468, 468, 474, 474, + 474, 474, 388, 389, 389, 389, 389, 0, 0, 389, + 0, 389, 389, 389, 389, 389, 389, 390, 390, 390, + 390, 0, 0, 390, 0, 390, 390, 390, 390, 390, + 390, 392, 392, 392, 392, 0, 0, 392, 0, 392, + 392, 392, 392, 392, 392, 0, 0, 0, 392, 476, + 476, 476, 476, 482, 482, 482, 482, 482, 483, 483, + 483, 483, 489, 489, 489, 489, 392, 393, 393, 393, + 393, 0, 0, 393, 0, 393, 393, 393, 393, 393, + 393, 394, 394, 394, 394, 0, 0, 394, 0, 394, + + 394, 394, 394, 394, 394, 395, 395, 395, 395, 0, + 0, 395, 0, 395, 395, 395, 395, 395, 395, 396, + 396, 396, 396, 0, 0, 396, 396, 396, 396, 396, + 396, 396, 396, 397, 397, 397, 397, 0, 0, 397, + 0, 0, 0, 397, 397, 397, 397, 0, 0, 0, + 397, 491, 491, 491, 491, 492, 492, 492, 492, 494, + 494, 494, 494, 495, 495, 495, 495, 0, 397, 398, + 398, 398, 398, 0, 0, 398, 0, 398, 398, 398, + 398, 398, 398, 399, 399, 399, 399, 0, 0, 399, + 0, 399, 399, 399, 399, 399, 399, 401, 401, 401, + + 401, 0, 0, 401, 0, 401, 401, 401, 401, 401, + 401, 0, 0, 0, 401, 499, 499, 499, 499, 499, + 500, 500, 500, 500, 506, 506, 506, 506, 508, 508, + 508, 508, 401, 402, 402, 402, 402, 0, 0, 402, + 0, 402, 402, 402, 402, 402, 402, 403, 403, 403, + 403, 0, 0, 403, 0, 403, 403, 403, 403, 403, + 403, 404, 404, 404, 404, 0, 0, 404, 0, 404, + 404, 404, 404, 404, 404, 405, 405, 405, 405, 0, + 0, 405, 405, 405, 405, 405, 405, 405, 405, 406, + 406, 406, 406, 0, 0, 406, 0, 0, 0, 406, + + 406, 406, 406, 0, 0, 0, 406, 514, 514, 514, + 514, 514, 515, 515, 515, 515, 521, 521, 521, 521, + 523, 523, 523, 523, 406, 407, 407, 407, 407, 0, + 0, 407, 0, 407, 407, 407, 407, 407, 407, 408, + 408, 408, 408, 0, 0, 408, 0, 408, 408, 408, + 408, 408, 408, 410, 410, 410, 410, 0, 0, 410, + 0, 410, 410, 410, 410, 410, 410, 0, 0, 0, + 410, 524, 524, 524, 524, 526, 526, 526, 526, 526, + 527, 527, 527, 527, 533, 533, 533, 533, 410, 411, + 411, 411, 411, 0, 0, 411, 0, 411, 411, 411, + + 411, 411, 411, 412, 412, 412, 412, 0, 0, 412, + 0, 412, 412, 412, 412, 412, 412, 413, 413, 413, + 413, 0, 0, 413, 0, 413, 413, 413, 413, 413, + 413, 414, 414, 414, 414, 0, 0, 414, 414, 414, + 414, 414, 414, 414, 414, 417, 417, 417, 417, 0, + 0, 417, 0, 417, 417, 417, 417, 417, 417, 0, + 0, 0, 417, 535, 535, 535, 535, 0, 475, 475, + 475, 475, 0, 0, 475, 541, 541, 541, 541, 541, + 417, 418, 418, 418, 418, 475, 0, 418, 418, 418, + 418, 418, 418, 418, 418, 419, 419, 419, 419, 0, + + 0, 419, 0, 475, 0, 419, 419, 419, 419, 0, + 0, 0, 419, 542, 542, 542, 542, 548, 548, 548, + 548, 550, 550, 550, 550, 551, 551, 551, 551, 0, + 419, 420, 420, 420, 420, 0, 0, 420, 0, 420, + 420, 420, 420, 420, 420, 421, 421, 421, 421, 0, + 0, 421, 0, 421, 421, 421, 421, 421, 421, 423, + 423, 423, 423, 0, 0, 423, 0, 423, 423, 423, + 423, 423, 423, 0, 0, 0, 423, 553, 553, 553, + 553, 553, 554, 554, 554, 554, 560, 560, 560, 560, + 562, 562, 562, 562, 423, 424, 424, 424, 424, 0, + + 0, 424, 0, 424, 424, 424, 424, 424, 424, 425, + 425, 425, 425, 0, 0, 425, 0, 425, 425, 425, + 425, 425, 425, 426, 426, 426, 426, 0, 0, 426, + 0, 426, 426, 426, 426, 426, 426, 427, 427, 427, + 427, 0, 0, 427, 427, 427, 427, 427, 427, 427, + 427, 439, 439, 439, 439, 0, 0, 439, 0, 439, + 439, 439, 439, 439, 439, 440, 440, 440, 440, 0, + 0, 440, 0, 440, 440, 440, 440, 440, 440, 446, + 446, 446, 446, 0, 0, 446, 0, 0, 0, 446, + 446, 446, 446, 447, 447, 447, 447, 0, 0, 447, + + 0, 447, 447, 447, 447, 447, 447, 448, 448, 448, + 448, 0, 0, 448, 0, 448, 448, 448, 448, 448, + 448, 449, 449, 449, 449, 0, 0, 449, 0, 0, + 449, 449, 449, 449, 449, 0, 0, 0, 449, 568, + 568, 568, 568, 568, 490, 490, 490, 490, 0, 0, + 490, 569, 569, 569, 569, 0, 449, 450, 450, 450, + 450, 490, 0, 450, 0, 450, 450, 450, 450, 450, + 450, 453, 453, 453, 453, 0, 0, 453, 0, 490, + 453, 453, 453, 453, 453, 0, 0, 0, 453, 575, + 575, 575, 575, 0, 0, 462, 462, 462, 462, 462, + + 0, 0, 0, 462, 0, 0, 453, 454, 454, 454, + 454, 0, 0, 454, 0, 454, 454, 454, 454, 454, + 454, 462, 464, 464, 464, 464, 464, 464, 464, 464, + 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, + 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, + 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, + 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, + 469, 469, 469, 469, 0, 0, 469, 0, 0, 469, + 469, 469, 469, 469, 0, 0, 0, 469, 577, 577, + 577, 577, 578, 578, 578, 578, 580, 580, 580, 580, + + 581, 581, 581, 581, 0, 469, 470, 470, 470, 470, + 0, 0, 470, 0, 470, 470, 470, 470, 470, 470, + 471, 471, 471, 471, 0, 0, 471, 0, 471, 471, + 471, 471, 471, 471, 477, 477, 477, 477, 0, 0, + 477, 0, 0, 0, 477, 477, 477, 477, 478, 478, + 478, 478, 0, 0, 478, 0, 478, 478, 478, 478, + 478, 478, 479, 479, 479, 479, 0, 0, 479, 0, + 479, 479, 479, 479, 479, 479, 480, 480, 480, 480, + 0, 0, 480, 0, 0, 480, 480, 480, 480, 480, + 0, 0, 0, 480, 585, 585, 585, 585, 585, 561, + + 561, 561, 561, 0, 0, 561, 586, 586, 586, 586, + 0, 480, 481, 481, 481, 481, 561, 0, 481, 0, + 481, 481, 481, 481, 481, 481, 484, 484, 484, 484, + 0, 0, 484, 0, 561, 484, 484, 484, 484, 484, + 0, 0, 0, 484, 592, 592, 592, 592, 0, 576, + 576, 576, 576, 0, 0, 576, 594, 594, 594, 594, + 0, 484, 485, 485, 485, 485, 576, 0, 485, 0, + 485, 485, 485, 485, 485, 485, 493, 493, 493, 493, + 0, 0, 493, 0, 576, 0, 493, 493, 493, 493, + 0, 0, 0, 493, 600, 600, 600, 600, 600, 601, + + 601, 601, 601, 607, 607, 607, 607, 609, 609, 609, + 609, 493, 496, 496, 496, 496, 0, 0, 496, 0, + 496, 496, 496, 496, 496, 496, 497, 497, 497, 497, + 0, 0, 497, 0, 497, 497, 497, 497, 497, 497, + 501, 501, 501, 501, 501, 0, 0, 0, 501, 610, + 610, 610, 610, 618, 618, 0, 618, 618, 618, 618, + 704, 704, 704, 704, 0, 0, 501, 502, 502, 502, + 502, 0, 0, 502, 0, 502, 502, 502, 502, 502, + 502, 503, 503, 503, 503, 0, 0, 503, 0, 503, + 503, 503, 503, 503, 503, 509, 509, 509, 509, 0, + + 0, 509, 0, 0, 0, 509, 509, 509, 509, 510, + 510, 510, 510, 0, 0, 510, 0, 510, 510, 510, + 510, 510, 510, 511, 511, 511, 511, 0, 0, 511, + 0, 511, 511, 511, 511, 511, 511, 512, 512, 512, + 512, 0, 0, 512, 0, 0, 512, 512, 512, 512, + 512, 0, 0, 0, 512, 617, 617, 617, 617, 0, + 624, 624, 617, 624, 624, 624, 624, 705, 705, 705, + 705, 0, 512, 513, 513, 513, 513, 0, 0, 513, + 617, 513, 513, 513, 513, 513, 513, 516, 516, 516, + 516, 0, 0, 516, 0, 0, 516, 516, 516, 516, + + 516, 0, 630, 630, 516, 630, 630, 630, 630, 0, + 0, 525, 525, 525, 525, 525, 0, 0, 0, 525, + 0, 0, 516, 517, 517, 517, 517, 0, 0, 517, + 0, 517, 517, 517, 517, 517, 517, 525, 528, 528, + 528, 528, 528, 0, 643, 643, 528, 643, 643, 643, + 643, 649, 649, 0, 649, 649, 649, 649, 712, 712, + 712, 712, 0, 0, 528, 529, 529, 529, 529, 0, + 0, 529, 0, 529, 529, 529, 529, 529, 529, 530, + 530, 530, 530, 0, 0, 530, 0, 530, 530, 530, + 530, 530, 530, 536, 536, 536, 536, 0, 0, 536, + + 0, 0, 0, 536, 536, 536, 536, 537, 537, 537, + 537, 0, 0, 537, 0, 537, 537, 537, 537, 537, + 537, 538, 538, 538, 538, 0, 0, 538, 0, 538, + 538, 538, 538, 538, 538, 539, 539, 539, 539, 0, + 0, 539, 0, 0, 539, 539, 539, 539, 539, 0, + 0, 0, 539, 648, 648, 648, 648, 0, 655, 655, + 648, 655, 655, 655, 655, 717, 717, 717, 717, 717, + 539, 540, 540, 540, 540, 0, 0, 540, 648, 540, + 540, 540, 540, 540, 540, 543, 543, 543, 543, 0, + 0, 543, 0, 0, 543, 543, 543, 543, 543, 0, + + 659, 659, 543, 659, 659, 659, 659, 0, 0, 552, + 552, 552, 552, 552, 0, 0, 0, 552, 0, 0, + 543, 544, 544, 544, 544, 0, 0, 544, 0, 544, + 544, 544, 544, 544, 544, 552, 555, 555, 555, 555, + 0, 0, 555, 0, 0, 555, 555, 555, 555, 555, + 0, 0, 0, 555, 658, 658, 658, 658, 0, 665, + 665, 658, 665, 665, 665, 665, 718, 718, 718, 718, + 0, 555, 556, 556, 556, 556, 0, 0, 556, 658, + 556, 556, 556, 556, 556, 556, 557, 557, 557, 557, + 0, 0, 557, 0, 557, 557, 557, 557, 557, 557, + + 563, 563, 563, 563, 0, 0, 563, 0, 0, 0, + 563, 563, 563, 563, 564, 564, 564, 564, 0, 0, + 564, 0, 564, 564, 564, 564, 564, 564, 565, 565, + 565, 565, 0, 0, 565, 0, 565, 565, 565, 565, + 565, 565, 566, 566, 566, 566, 0, 0, 566, 0, + 0, 566, 566, 566, 566, 566, 0, 671, 671, 566, + 671, 671, 671, 671, 684, 684, 0, 684, 684, 684, + 684, 724, 724, 724, 724, 0, 0, 566, 567, 567, + 567, 567, 0, 0, 567, 0, 567, 567, 567, 567, + 567, 567, 570, 570, 570, 570, 0, 0, 570, 0, + + 0, 570, 570, 570, 570, 570, 0, 0, 0, 570, + 689, 689, 689, 689, 0, 690, 690, 689, 690, 690, + 690, 690, 726, 726, 726, 726, 0, 570, 571, 571, + 571, 571, 0, 0, 571, 689, 571, 571, 571, 571, + 571, 571, 579, 579, 579, 579, 0, 0, 579, 0, + 0, 0, 579, 579, 579, 579, 0, 696, 696, 579, + 696, 696, 696, 696, 731, 731, 731, 731, 731, 732, + 732, 732, 732, 738, 738, 738, 738, 579, 582, 582, + 582, 582, 0, 0, 582, 0, 582, 582, 582, 582, + 582, 582, 583, 583, 583, 583, 0, 0, 583, 0, + + 583, 583, 583, 583, 583, 583, 587, 587, 587, 587, + 587, 0, 0, 0, 587, 740, 740, 740, 740, 741, + 741, 741, 741, 747, 747, 747, 747, 747, 748, 748, + 748, 748, 587, 588, 588, 588, 588, 0, 0, 588, + 0, 588, 588, 588, 588, 588, 588, 589, 589, 589, + 589, 0, 0, 589, 0, 589, 589, 589, 589, 589, + 589, 595, 595, 595, 595, 0, 0, 595, 0, 0, + 0, 595, 595, 595, 595, 596, 596, 596, 596, 0, + 0, 596, 0, 596, 596, 596, 596, 596, 596, 597, + 597, 597, 597, 0, 0, 597, 0, 597, 597, 597, + + 597, 597, 597, 598, 598, 598, 598, 0, 0, 598, + 0, 0, 598, 598, 598, 598, 598, 0, 0, 0, + 598, 754, 754, 754, 754, 0, 711, 711, 711, 711, + 0, 0, 711, 756, 756, 756, 756, 0, 598, 599, + 599, 599, 599, 711, 0, 599, 0, 599, 599, 599, + 599, 599, 599, 602, 602, 602, 602, 0, 0, 602, + 0, 711, 602, 602, 602, 602, 602, 0, 0, 0, + 602, 757, 757, 757, 757, 0, 0, 611, 611, 611, + 611, 611, 0, 0, 0, 611, 0, 0, 602, 603, + 603, 603, 603, 0, 0, 603, 0, 603, 603, 603, + + 603, 603, 603, 611, 619, 619, 619, 619, 0, 0, + 619, 0, 619, 619, 619, 619, 619, 619, 0, 0, + 0, 619, 759, 759, 759, 759, 764, 764, 764, 764, + 765, 765, 765, 765, 767, 767, 767, 767, 0, 619, + 620, 620, 620, 620, 0, 0, 620, 620, 620, 620, + 620, 620, 620, 620, 621, 621, 621, 621, 0, 0, + 621, 0, 621, 621, 621, 621, 621, 621, 0, 0, + 0, 621, 768, 768, 768, 768, 0, 774, 774, 774, + 774, 0, 0, 774, 775, 775, 775, 775, 0, 621, + 622, 622, 622, 622, 774, 0, 622, 622, 622, 622, + + 622, 622, 622, 622, 623, 623, 623, 623, 0, 0, + 623, 0, 774, 0, 623, 623, 623, 623, 0, 0, + 0, 623, 780, 780, 780, 780, 0, 0, 719, 719, + 719, 719, 719, 0, 0, 0, 719, 0, 0, 623, + 625, 625, 625, 625, 0, 0, 625, 0, 625, 625, + 625, 625, 625, 625, 719, 0, 0, 625, 781, 781, + 781, 781, 0, 787, 787, 787, 787, 0, 0, 787, + 788, 788, 788, 788, 0, 625, 626, 626, 626, 626, + 787, 0, 626, 626, 626, 626, 626, 626, 626, 626, + 627, 627, 627, 627, 0, 0, 627, 0, 787, 0, + + 627, 627, 627, 627, 0, 0, 0, 627, 793, 793, + 793, 793, 793, 794, 794, 794, 794, 800, 800, 800, + 800, 802, 802, 802, 802, 627, 628, 628, 628, 628, + 0, 0, 628, 0, 628, 628, 628, 628, 628, 628, + 629, 629, 629, 629, 0, 0, 629, 0, 629, 629, + 629, 629, 629, 629, 631, 631, 631, 631, 0, 0, + 631, 0, 631, 631, 631, 631, 631, 631, 0, 0, + 0, 631, 807, 807, 807, 807, 807, 808, 808, 808, + 808, 814, 814, 814, 814, 816, 816, 816, 816, 631, + 632, 632, 632, 632, 0, 0, 632, 0, 632, 632, + + 632, 632, 632, 632, 633, 633, 633, 633, 0, 0, + 633, 0, 633, 633, 633, 633, 633, 633, 634, 634, + 634, 634, 0, 0, 634, 0, 634, 634, 634, 634, + 634, 634, 635, 635, 635, 635, 0, 0, 635, 635, + 635, 635, 635, 635, 635, 635, 636, 636, 636, 636, + 0, 0, 636, 0, 636, 636, 636, 636, 636, 636, + 0, 0, 0, 636, 817, 817, 817, 817, 823, 823, + 823, 823, 823, 824, 824, 824, 824, 830, 830, 830, + 830, 636, 637, 637, 637, 637, 0, 0, 637, 0, + 637, 637, 637, 637, 637, 637, 638, 638, 638, 638, + + 0, 0, 638, 0, 638, 638, 638, 638, 638, 638, + 639, 639, 639, 639, 0, 0, 639, 0, 639, 639, + 639, 639, 639, 639, 640, 640, 640, 640, 0, 0, + 640, 640, 640, 640, 640, 640, 640, 640, 641, 641, + 641, 641, 0, 0, 641, 0, 0, 0, 641, 641, + 641, 641, 0, 0, 0, 641, 832, 832, 832, 832, + 833, 833, 833, 833, 835, 835, 835, 835, 840, 840, + 840, 840, 0, 641, 642, 642, 642, 642, 0, 0, + 642, 0, 642, 642, 642, 642, 642, 642, 644, 644, + 644, 644, 0, 0, 644, 0, 644, 644, 644, 644, + + 644, 644, 0, 0, 0, 644, 841, 841, 841, 841, + 843, 843, 843, 843, 844, 844, 844, 844, 851, 851, + 851, 851, 0, 644, 645, 645, 645, 645, 0, 0, + 645, 0, 645, 645, 645, 645, 645, 645, 646, 646, + 646, 646, 0, 0, 646, 0, 646, 646, 646, 646, + 646, 646, 647, 647, 647, 647, 0, 0, 647, 647, + 647, 647, 647, 647, 647, 647, 650, 650, 650, 650, + 0, 0, 650, 0, 650, 650, 650, 650, 650, 650, + 0, 861, 861, 650, 861, 861, 861, 861, 867, 867, + 0, 867, 867, 867, 867, 882, 882, 882, 882, 882, + + 0, 650, 651, 651, 651, 651, 0, 0, 651, 651, + 651, 651, 651, 651, 651, 651, 652, 652, 652, 652, + 0, 0, 652, 0, 652, 652, 652, 652, 652, 652, + 0, 873, 873, 652, 873, 873, 873, 873, 0, 850, + 850, 850, 850, 879, 879, 850, 879, 879, 879, 879, + 0, 652, 653, 653, 653, 653, 850, 0, 653, 653, + 653, 653, 653, 653, 653, 653, 654, 654, 654, 654, + 0, 0, 654, 0, 850, 0, 654, 654, 654, 654, + 0, 881, 881, 654, 881, 881, 881, 881, 0, 0, + 742, 742, 742, 742, 742, 0, 0, 0, 742, 0, + + 0, 654, 656, 656, 656, 656, 0, 0, 656, 0, + 656, 656, 656, 656, 656, 656, 742, 883, 883, 656, + 883, 883, 883, 883, 884, 884, 884, 884, 884, 885, + 885, 0, 885, 885, 885, 885, 0, 656, 657, 657, + 657, 657, 0, 0, 657, 657, 657, 657, 657, 657, + 657, 657, 660, 660, 660, 660, 0, 0, 660, 0, + 660, 660, 660, 660, 660, 660, 0, 887, 887, 660, + 887, 887, 887, 887, 888, 888, 888, 888, 888, 889, + 889, 0, 889, 889, 889, 889, 0, 660, 661, 661, + 661, 661, 0, 0, 661, 661, 661, 661, 661, 661, + + 661, 661, 662, 662, 662, 662, 0, 0, 662, 0, + 662, 662, 662, 662, 662, 662, 0, 0, 0, 662, + 890, 890, 890, 890, 890, 891, 891, 0, 891, 891, + 891, 891, 894, 894, 894, 894, 894, 662, 663, 663, + 663, 663, 0, 0, 663, 663, 663, 663, 663, 663, + 663, 663, 664, 664, 664, 664, 0, 0, 664, 0, + 0, 0, 664, 664, 664, 664, 0, 893, 893, 664, + 893, 893, 893, 893, 0, 0, 758, 758, 758, 758, + 758, 0, 0, 0, 758, 0, 0, 664, 666, 666, + 666, 666, 0, 0, 666, 0, 666, 666, 666, 666, + + 666, 666, 758, 895, 895, 666, 895, 895, 895, 895, + 899, 899, 899, 899, 900, 900, 900, 900, 907, 907, + 907, 907, 0, 666, 667, 667, 667, 667, 0, 0, + 667, 667, 667, 667, 667, 667, 667, 667, 668, 668, + 668, 668, 0, 0, 668, 0, 0, 0, 668, 668, + 668, 668, 0, 0, 0, 668, 860, 860, 860, 860, + 0, 0, 0, 860, 915, 915, 915, 915, 923, 923, + 923, 923, 0, 668, 669, 669, 669, 669, 0, 0, + 669, 860, 669, 669, 669, 669, 669, 669, 670, 670, + 670, 670, 0, 0, 670, 0, 670, 670, 670, 670, + + 670, 670, 672, 672, 672, 672, 0, 0, 672, 0, + 672, 672, 672, 672, 672, 672, 0, 0, 0, 672, + 878, 878, 878, 878, 0, 0, 0, 878, 924, 924, + 924, 924, 925, 925, 925, 925, 0, 672, 673, 673, + 673, 673, 0, 0, 673, 878, 673, 673, 673, 673, + 673, 673, 674, 674, 674, 674, 0, 0, 674, 0, + 674, 674, 674, 674, 674, 674, 675, 675, 675, 675, + 0, 0, 675, 0, 675, 675, 675, 675, 675, 675, + 676, 676, 676, 676, 0, 0, 676, 676, 676, 676, + 676, 676, 676, 676, 677, 677, 677, 677, 0, 0, + + 677, 0, 677, 677, 677, 677, 677, 677, 0, 0, + 0, 677, 880, 880, 880, 880, 0, 0, 0, 880, + 926, 926, 926, 926, 928, 928, 928, 928, 0, 677, + 678, 678, 678, 678, 0, 0, 678, 880, 678, 678, + 678, 678, 678, 678, 679, 679, 679, 679, 0, 0, + 679, 0, 679, 679, 679, 679, 679, 679, 680, 680, + 680, 680, 0, 0, 680, 0, 680, 680, 680, 680, + 680, 680, 681, 681, 681, 681, 0, 0, 681, 681, + 681, 681, 681, 681, 681, 681, 682, 682, 682, 682, + 0, 0, 682, 0, 0, 0, 682, 682, 682, 682, + + 0, 0, 0, 682, 886, 886, 886, 886, 0, 0, + 0, 886, 929, 929, 929, 929, 931, 931, 931, 931, + 0, 682, 683, 683, 683, 683, 0, 0, 683, 886, + 683, 683, 683, 683, 683, 683, 685, 685, 685, 685, + 0, 0, 685, 0, 685, 685, 685, 685, 685, 685, + 0, 0, 0, 685, 892, 892, 892, 892, 0, 0, + 0, 892, 933, 933, 933, 933, 934, 934, 934, 934, + 0, 685, 686, 686, 686, 686, 0, 0, 686, 892, + 686, 686, 686, 686, 686, 686, 687, 687, 687, 687, + 0, 0, 687, 0, 687, 687, 687, 687, 687, 687, + + 688, 688, 688, 688, 0, 0, 688, 688, 688, 688, + 688, 688, 688, 688, 691, 691, 691, 691, 0, 0, + 691, 0, 691, 691, 691, 691, 691, 691, 0, 0, + 0, 691, 936, 936, 936, 936, 937, 937, 937, 937, + 939, 939, 939, 939, 940, 940, 940, 940, 0, 691, + 692, 692, 692, 692, 0, 0, 692, 692, 692, 692, + 692, 692, 692, 692, 693, 693, 693, 693, 0, 0, + 693, 0, 693, 693, 693, 693, 693, 693, 0, 0, + 0, 693, 941, 941, 941, 941, 942, 942, 942, 942, + 944, 944, 944, 944, 945, 945, 945, 945, 0, 693, + + 694, 694, 694, 694, 0, 0, 694, 694, 694, 694, + 694, 694, 694, 694, 695, 695, 695, 695, 0, 0, + 695, 0, 0, 0, 695, 695, 695, 695, 0, 0, + 959, 695, 959, 959, 0, 0, 959, 0, 766, 766, + 766, 766, 766, 0, 0, 0, 766, 0, 0, 695, + 697, 697, 697, 697, 0, 0, 697, 0, 697, 697, + 697, 697, 697, 697, 766, 0, 0, 697, 960, 960, + 960, 960, 0, 962, 960, 962, 962, 0, 963, 962, + 963, 963, 0, 0, 963, 697, 698, 698, 698, 698, + 0, 0, 698, 698, 698, 698, 698, 698, 698, 698, + + 706, 706, 706, 706, 0, 0, 706, 0, 706, 706, + 706, 706, 706, 706, 707, 707, 707, 707, 0, 0, + 707, 0, 707, 707, 707, 707, 707, 707, 709, 709, + 709, 709, 0, 0, 709, 0, 709, 709, 709, 709, + 709, 709, 710, 710, 710, 710, 0, 0, 710, 0, + 710, 710, 710, 710, 710, 710, 713, 713, 713, 713, + 0, 0, 713, 0, 0, 0, 713, 713, 713, 713, + 714, 714, 714, 714, 0, 0, 714, 0, 714, 714, + 714, 714, 714, 714, 715, 715, 715, 715, 0, 0, + 715, 0, 715, 715, 715, 715, 715, 715, 720, 720, + + 720, 720, 0, 0, 720, 0, 720, 720, 720, 720, + 720, 720, 721, 721, 721, 721, 0, 0, 721, 0, + 721, 721, 721, 721, 721, 721, 727, 727, 727, 727, + 0, 0, 727, 0, 0, 0, 727, 727, 727, 727, + 728, 728, 728, 728, 0, 0, 728, 0, 728, 728, + 728, 728, 728, 728, 729, 729, 729, 729, 0, 0, + 729, 0, 729, 729, 729, 729, 729, 729, 730, 730, + 730, 730, 0, 0, 730, 0, 0, 730, 730, 730, + 730, 730, 0, 0, 0, 730, 795, 795, 795, 795, + 795, 0, 0, 0, 795, 927, 927, 927, 927, 0, + + 0, 0, 927, 730, 733, 733, 733, 733, 0, 0, + 733, 0, 795, 733, 733, 733, 733, 733, 0, 0, + 927, 733, 935, 935, 935, 935, 0, 0, 964, 935, + 964, 964, 0, 0, 964, 0, 0, 0, 0, 733, + 734, 734, 734, 734, 0, 0, 734, 935, 734, 734, + 734, 734, 734, 734, 735, 735, 735, 735, 0, 0, + 735, 0, 735, 735, 735, 735, 735, 735, 743, 743, + 743, 743, 0, 0, 743, 0, 743, 743, 743, 743, + 743, 743, 744, 744, 744, 744, 0, 0, 744, 0, + 744, 744, 744, 744, 744, 744, 745, 745, 745, 745, + + 0, 0, 745, 0, 0, 745, 745, 745, 745, 745, + 0, 0, 0, 745, 943, 943, 943, 943, 0, 0, + 0, 943, 965, 965, 965, 965, 0, 0, 965, 0, + 0, 745, 746, 746, 746, 746, 0, 0, 746, 943, + 746, 746, 746, 746, 746, 746, 749, 749, 749, 749, + 0, 0, 749, 0, 0, 749, 749, 749, 749, 749, + 0, 0, 966, 749, 966, 966, 0, 0, 966, 967, + 967, 967, 967, 0, 969, 967, 969, 969, 0, 0, + 969, 749, 750, 750, 750, 750, 0, 0, 750, 0, + 750, 750, 750, 750, 750, 750, 760, 760, 760, 760, + + 0, 0, 760, 0, 0, 0, 760, 760, 760, 760, + 761, 761, 761, 761, 0, 0, 761, 0, 761, 761, + 761, 761, 761, 761, 762, 762, 762, 762, 0, 0, + 762, 0, 762, 762, 762, 762, 762, 762, 763, 763, + 763, 763, 0, 0, 763, 0, 0, 763, 763, 763, + 763, 763, 0, 0, 0, 763, 968, 968, 968, 968, + 0, 970, 968, 970, 970, 0, 971, 970, 971, 971, + 0, 0, 971, 763, 769, 769, 769, 769, 0, 0, + 769, 0, 769, 769, 769, 769, 769, 769, 770, 770, + 770, 770, 0, 0, 770, 0, 770, 770, 770, 770, + + 770, 770, 772, 772, 772, 772, 0, 0, 772, 0, + 772, 772, 772, 772, 772, 772, 773, 773, 773, 773, + 0, 0, 773, 0, 773, 773, 773, 773, 773, 773, + 776, 776, 776, 776, 0, 0, 776, 0, 0, 0, + 776, 776, 776, 776, 777, 777, 777, 777, 0, 0, + 777, 0, 777, 777, 777, 777, 777, 777, 778, 778, + 778, 778, 0, 0, 778, 0, 778, 778, 778, 778, + 778, 778, 782, 782, 782, 782, 0, 0, 782, 0, + 782, 782, 782, 782, 782, 782, 783, 783, 783, 783, + 0, 0, 783, 0, 783, 783, 783, 783, 783, 783, + + 785, 785, 785, 785, 0, 0, 785, 0, 785, 785, + 785, 785, 785, 785, 786, 786, 786, 786, 0, 0, + 786, 0, 786, 786, 786, 786, 786, 786, 789, 789, + 789, 789, 0, 0, 789, 0, 0, 0, 789, 789, + 789, 789, 790, 790, 790, 790, 0, 0, 790, 0, + 790, 790, 790, 790, 790, 790, 791, 791, 791, 791, + 0, 0, 791, 0, 791, 791, 791, 791, 791, 791, + 796, 796, 796, 796, 0, 0, 796, 0, 796, 796, + 796, 796, 796, 796, 797, 797, 797, 797, 0, 0, + 797, 0, 797, 797, 797, 797, 797, 797, 803, 803, + + 803, 803, 0, 0, 803, 0, 0, 0, 803, 803, + 803, 803, 804, 804, 804, 804, 0, 0, 804, 0, + 804, 804, 804, 804, 804, 804, 805, 805, 805, 805, + 0, 0, 805, 0, 805, 805, 805, 805, 805, 805, + 806, 806, 806, 806, 0, 0, 806, 0, 0, 806, + 806, 806, 806, 806, 0, 0, 0, 806, 818, 818, + 818, 818, 818, 0, 0, 0, 818, 972, 972, 972, + 972, 0, 0, 972, 0, 806, 809, 809, 809, 809, + 0, 0, 809, 0, 818, 809, 809, 809, 809, 809, + 0, 0, 0, 809, 973, 973, 973, 973, 0, 0, + + 973, 974, 974, 974, 974, 0, 0, 974, 0, 0, + 0, 809, 810, 810, 810, 810, 0, 0, 810, 0, + 810, 810, 810, 810, 810, 810, 811, 811, 811, 811, + 0, 0, 811, 0, 811, 811, 811, 811, 811, 811, + 819, 819, 819, 819, 0, 0, 819, 0, 819, 819, + 819, 819, 819, 819, 820, 820, 820, 820, 0, 0, + 820, 0, 820, 820, 820, 820, 820, 820, 821, 821, + 821, 821, 0, 0, 821, 0, 0, 821, 821, 821, + 821, 821, 0, 0, 0, 821, 975, 975, 975, 975, + 0, 0, 975, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 821, 822, 822, 822, 822, 0, 0, + 822, 0, 822, 822, 822, 822, 822, 822, 825, 825, + 825, 825, 0, 0, 825, 0, 0, 825, 825, 825, + 825, 825, 0, 0, 0, 825, 0, 0, 0, 0, + 0, 0, 834, 834, 834, 834, 834, 0, 0, 0, + 834, 0, 0, 825, 826, 826, 826, 826, 0, 0, + 826, 0, 826, 826, 826, 826, 826, 826, 834, 836, + 836, 836, 836, 0, 0, 836, 0, 0, 0, 836, + 836, 836, 836, 837, 837, 837, 837, 0, 0, 837, + 0, 837, 837, 837, 837, 837, 837, 838, 838, 838, + + 838, 0, 0, 838, 0, 838, 838, 838, 838, 838, + 838, 839, 839, 839, 839, 0, 0, 839, 0, 0, + 839, 839, 839, 839, 839, 0, 0, 0, 839, 842, + 842, 842, 842, 842, 0, 0, 0, 842, 0, 0, + 0, 0, 0, 0, 0, 0, 839, 0, 0, 0, + 0, 0, 0, 0, 0, 842, 845, 845, 845, 845, + 0, 0, 845, 0, 845, 845, 845, 845, 845, 845, + 846, 846, 846, 846, 0, 0, 846, 0, 846, 846, + 846, 846, 846, 846, 848, 848, 848, 848, 0, 0, + 848, 0, 848, 848, 848, 848, 848, 848, 849, 849, + + 849, 849, 0, 0, 849, 0, 849, 849, 849, 849, + 849, 849, 852, 852, 852, 852, 0, 0, 852, 0, + 0, 0, 852, 852, 852, 852, 853, 853, 853, 853, + 0, 0, 853, 0, 853, 853, 853, 853, 853, 853, + 854, 854, 854, 854, 0, 0, 854, 0, 854, 854, + 854, 854, 854, 854, 862, 862, 862, 862, 0, 0, + 862, 0, 862, 862, 862, 862, 862, 862, 0, 0, + 0, 862, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 862, + 863, 863, 863, 863, 0, 0, 863, 863, 863, 863, + + 863, 863, 863, 863, 864, 864, 864, 864, 0, 0, + 864, 0, 864, 864, 864, 864, 864, 864, 0, 0, + 0, 864, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 864, + 865, 865, 865, 865, 0, 0, 865, 865, 865, 865, + 865, 865, 865, 865, 866, 866, 866, 866, 0, 0, + 866, 0, 0, 0, 866, 866, 866, 866, 0, 0, + 0, 866, 0, 0, 0, 0, 0, 0, 930, 930, + 930, 930, 930, 0, 0, 0, 930, 0, 0, 866, + 868, 868, 868, 868, 0, 0, 868, 0, 868, 868, + + 868, 868, 868, 868, 930, 0, 0, 868, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 868, 869, 869, 869, 869, + 0, 0, 869, 869, 869, 869, 869, 869, 869, 869, + 870, 870, 870, 870, 0, 0, 870, 0, 870, 870, + 870, 870, 870, 870, 0, 0, 0, 870, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 870, 871, 871, 871, 871, + 0, 0, 871, 871, 871, 871, 871, 871, 871, 871, + 872, 872, 872, 872, 0, 0, 872, 0, 0, 0, + + 872, 872, 872, 872, 0, 0, 0, 872, 0, 0, + 0, 0, 0, 0, 938, 938, 938, 938, 938, 0, + 0, 0, 938, 0, 0, 872, 874, 874, 874, 874, + 0, 0, 874, 0, 874, 874, 874, 874, 874, 874, + 938, 0, 0, 874, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 874, 875, 875, 875, 875, 0, 0, 875, 875, + 875, 875, 875, 875, 875, 875, 876, 876, 876, 876, + 0, 0, 876, 0, 876, 876, 876, 876, 876, 876, + 0, 0, 0, 876, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 876, 877, 877, 877, 877, 0, 0, 877, 877, + 877, 877, 877, 877, 877, 877, 906, 906, 906, 906, + 0, 0, 906, 906, 906, 0, 0, 0, 0, 0, + 0, 0, 0, 906, 946, 946, 946, 946, 946, 0, + 0, 0, 946, 0, 0, 0, 0, 0, 0, 0, + 0, 906, 908, 908, 908, 908, 0, 0, 908, 0, + 946, 0, 908, 908, 908, 908, 914, 914, 914, 914, + 0, 0, 914, 914, 914, 0, 0, 0, 0, 0, + 0, 0, 0, 914, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 914, 916, 916, 916, 916, 0, 0, 916, 0, + 0, 0, 916, 916, 916, 916, 922, 922, 922, 922, + 0, 0, 922, 922, 922, 0, 0, 0, 0, 0, + 0, 0, 0, 922, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 922, 932, 932, 932, 932, 0, 0, 932, 0, + 0, 0, 932, 932, 932, 932, 977, 977, 977, 977, + 977, 977, 977, 977, 978, 978, 978, 978, 978, 978, + 978, 978, 979, 979, 979, 979, 979, 979, 979, 979, + + 980, 980, 980, 980, 980, 980, 980, 980, 981, 981, + 0, 981, 981, 981, 981, 981, 982, 982, 0, 982, + 982, 982, 982, 982, 983, 0, 0, 983, 984, 0, + 0, 984, 985, 0, 0, 985, 0, 985, 985, 985, + 986, 986, 0, 986, 986, 986, 986, 986, 987, 0, + 0, 987, 0, 987, 987, 988, 988, 0, 988, 988, + 988, 988, 988, 989, 989, 0, 989, 0, 989, 989, + 989, 990, 990, 0, 990, 990, 990, 990, 990, 991, + 991, 991, 991, 991, 991, 991, 991, 992, 992, 992, + 992, 992, 992, 992, 992, 993, 993, 0, 0, 993, + + 993, 995, 995, 995, 995, 995, 995, 995, 995, 996, + 996, 996, 996, 996, 996, 996, 996, 997, 997, 997, + 997, 997, 997, 997, 997, 998, 998, 998, 998, 998, + 998, 998, 998, 1000, 1000, 1000, 1000, 1000, 1000, 1000, + 1000, 1001, 1001, 0, 1001, 1001, 1001, 1001, 1001, 1002, + 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1003, 1003, 1003, + 1003, 1003, 1003, 1003, 1003, 1004, 1004, 0, 1004, 0, + 1004, 1004, 1004, 1005, 1005, 0, 1005, 1005, 1005, 1005, + 1005, 1007, 1007, 0, 1007, 1007, 1007, 1007, 1007, 1008, + 0, 0, 1008, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + + 1009, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1011, + 1011, 0, 0, 1011, 1011, 1013, 1013, 1013, 1013, 1013, + 1013, 1013, 1013, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1018, + 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1019, 1019, 1019, + 1019, 1019, 1019, 1019, 1019, 1020, 1020, 1020, 1020, 1020, + 1020, 1020, 1020, 1021, 1021, 1021, 1021, 1021, 1021, 1021, + 1021, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1023, + 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, 1024, 1025, 1025, 1025, 1025, 1025, + + 1025, 1025, 1025, 1026, 1026, 1026, 1026, 1026, 1026, 1026, + 1026, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1028, + 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1029, 1029, 1029, + 1029, 1029, 1029, 1029, 1029, 1030, 1030, 1030, 1030, 1030, + 1030, 1030, 1030, 1031, 1031, 1031, 1031, 1031, 1031, 1031, + 1031, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1033, + 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1034, 1034, 0, + 1034, 1034, 1034, 1034, 1034, 1035, 0, 0, 1035, 1036, + 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1038, 1038, 1038, 1038, 1038, + + 1038, 1038, 1038, 1040, 1040, 1040, 1040, 1040, 1040, 1040, + 1040, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1042, + 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1043, 1043, 1043, + 1043, 1043, 1043, 1043, 1043, 1044, 1044, 1044, 1044, 1044, + 1044, 1044, 1044, 1045, 1045, 1045, 1045, 1045, 1045, 1045, + 1045, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1049, 1049, 1049, 1049, 1049, + 1049, 1049, 1049, 1050, 1050, 1050, 1050, 1050, 1050, 1050, + 1050, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1052, + + 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1053, 1053, 1053, + 1053, 1053, 1053, 1053, 1053, 1054, 1054, 1054, 1054, 1054, + 1054, 1054, 1054, 1055, 1055, 1055, 1055, 1055, 1055, 1055, + 1055, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1057, + 1057, 0, 1057, 1057, 1057, 1057, 1057, 1058, 0, 0, + 1058, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1061, 1061, 1061, + 1061, 1061, 1061, 1061, 1061, 1062, 1062, 1062, 1062, 1062, + 1062, 1062, 1062, 1063, 1063, 1063, 1063, 1063, 1063, 1063, + 1063, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1065, + + 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1066, 1066, 1066, + 1066, 1066, 1066, 1066, 1066, 1067, 1067, 1067, 1067, 1067, + 1067, 1067, 1067, 1068, 1068, 1068, 1068, 1068, 1068, 1068, + 1068, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1070, + 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1071, 1071, 1071, + 1071, 1071, 1071, 1071, 1071, 1072, 1072, 1072, 1072, 1072, + 1072, 1072, 1072, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1075, + 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1076, 1076, 1076, + 1076, 1076, 1076, 1076, 1076, 1077, 1077, 1077, 1077, 1077, + + 1077, 1077, 1077, 1078, 1078, 1078, 1078, 1078, 1078, 1078, + 1078, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1080, + 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1081, 1081, 1081, + 1081, 1081, 1081, 1081, 1081, 1082, 1082, 1082, 1082, 1082, + 1082, 1082, 1082, 1083, 1083, 0, 1083, 1083, 1083, 1083, + 1083, 1084, 0, 0, 1084, 1085, 1085, 1085, 1085, 1085, + 1085, 1085, 1085, 1086, 1086, 1086, 1086, 1086, 1086, 1086, + 1086, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1088, + 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1089, 1089, 1089, + 1089, 1089, 1089, 1089, 1089, 1090, 1090, 1090, 1090, 1090, + + 1090, 1090, 1090, 1091, 1091, 1091, 1091, 1091, 1091, 1091, + 1091, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1093, + 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1094, 1094, 1094, + 1094, 1094, 1094, 1094, 1094, 1095, 1095, 1095, 1095, 1095, + 1095, 1095, 1095, 1096, 1096, 1096, 1096, 1096, 1096, 1096, + 1096, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1098, + 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1099, 1099, 1099, + 1099, 1099, 1099, 1099, 1099, 1100, 1100, 1100, 1100, 1100, + 1100, 1100, 1100, 1101, 1101, 1101, 1101, 1101, 1101, 1101, + 1101, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1103, + + 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1104, 1104, 1104, + 1104, 1104, 1104, 1104, 1104, 1105, 1105, 1105, 1105, 1105, + 1105, 1105, 1105, 1106, 1106, 1106, 1106, 1106, 1106, 1106, + 1106, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1108, + 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1109, 1109, 0, + 1109, 1109, 1109, 1109, 1109, 1110, 0, 0, 1110, 1111, + 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1112, 1112, 1112, + 1112, 1112, 1112, 1112, 1112, 1113, 1113, 1113, 1113, 1113, + 1113, 1113, 1113, 1114, 1114, 1114, 1114, 1114, 1114, 1114, + 1114, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1116, + + 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1117, 1117, 1117, + 1117, 1117, 1117, 1117, 1117, 1118, 1118, 0, 1118, 1118, + 1118, 1118, 1118, 1119, 1119, 1119, 1119, 1119, 1119, 1119, + 1119, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, + 976, 976, 976, 976, 976, 976, 976, 976, 976, 976 + } ; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int vrmlyy_flex_debug; +int vrmlyy_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *vrmlyytext; +#line 1 "vrmlLexer.lxx" +/* +// Filename: vrmlLexer.lxx +// Created by: drose (01Oct04) +// +//////////////////////////////////////////////////////////////////// +// +// PANDA 3D SOFTWARE +// Copyright (c) Carnegie Mellon University. All rights reserved. +// +// All use of this software is subject to the terms of the revised BSD +// license. You should have received a copy of this license along +// with this source code in a file named "LICENSE." +// +//////////////////////////////////////////////////////////////////// +*/ +/************************************************** + * VRML 2.0 Parser + * Copyright (C) 1996 Silicon Graphics, Inc. + * + * Author(s) : Gavin Bell + * Daniel Woods (first port) + ************************************************** + */ +#line 26 "vrmlLexer.lxx" +#include "pandatoolbase.h" + +#include "vrmlNode.h" +#include "vrmlParser.h" +#include "pnotify.h" +#include "pstrtod.h" + +static int yyinput(void); // declared by flex. +extern "C" int vrmlyywrap(); + +//////////////////////////////////////////////////////////////////// +// Static variables +//////////////////////////////////////////////////////////////////// + +// We'll increment line_number as we parse the file, so +// that we can report the position of an error. +static int line_number = 0; + +// current_line holds as much of the current line as will fit. Its +// only purpose is for printing it out to report an error to the user. +static const int max_error_width = 1024; +static char current_line[max_error_width + 1]; + +static int error_count = 0; +static int warning_count = 0; + +// This is the pointer to the current input stream. +static istream *input_p = NULL; + +// This is the name of the vrml file we're parsing. We keep it so we +// can print it out for error messages. +static string vrml_filename; + +extern void vrmlyyerror(const string &); + + /* The YACC parser sets this to a token to direct the lexer */ + /* in cases where just syntax isn't enough: */ +int expectToken = 0; + + /* True when parsing a multiple-valued field: */ +static int parsing_mf = 0; + + /* These are used when parsing SFImage fields: */ +static int sfImageIntsParsed = 0; +static int sfImageIntsExpected = 0; + +// This is used while scanning a quoted string. +static string quoted_string; + +// And this keeps track of the currently-parsing array. +static MFArray *mfarray; + +void +vrml_init_lexer(istream &in, const string &filename) { + input_p = ∈ + vrml_filename = filename; + line_number = 0; + error_count = 0; + warning_count = 0; +} + +//////////////////////////////////////////////////////////////////// +// Internal support functions. +//////////////////////////////////////////////////////////////////// + +int +vrmlyywrap(void) { + return 1; +} + +void +vrmlyyerror(const string &msg) { + cerr << "\nError"; + if (!vrml_filename.empty()) { + cerr << " in " << vrml_filename; + } + cerr + << " at line " << line_number << ":\n" + << current_line << "\n"; + + error_count++; +} + +void +vrmlyywarning(const string &msg) { + cerr << "\nWarning"; + if (!vrml_filename.empty()) { + cerr << " in " << vrml_filename; + } + cerr + << " at line " << line_number << ":\n" + << current_line << "\n"; + + warning_count++; +} + +// Now define a function to take input from an istream instead of a +// stdio FILE pointer. This is flex-specific. +static void +input_chars(char *buffer, int &result, int max_size) { + nassertv(input_p != NULL); + if (*input_p) { + input_p->read(buffer, max_size); + result = input_p->gcount(); + if (result >= 0 && result < max_size) { + // Truncate at the end of the read. + buffer[result] = '\0'; + } + + if (line_number == 0) { + // This is a special case. If we are reading the very first bit + // from the stream, copy it into the current_line array. This + // is because the \n.* rule below, which fills current_line + // normally, doesn't catch the first line. + strncpy(current_line, vrmlyytext, max_error_width); + current_line[max_error_width] = '\0'; + line_number++; + + // Truncate it at the newline. + char *end = strchr(current_line, '\n'); + if (end != NULL) { + *end = '\0'; + } + } + + } else { + // End of file or I/O error. + result = 0; + } +} +#undef YY_INPUT + +// Define this macro carefully, since different flex versions call it +// with a different type for result. +#define YY_INPUT(buffer, result, max_size) { \ + int int_result; \ + input_chars((buffer), int_result, (max_size)); \ + (result) = int_result; \ +} + +int extract_int() { + return strtol(vrmlyytext, NULL, 0); +} + +double extract_float() { + return patof(vrmlyytext); +} + +void extract_vec(double vec[], int num_elements) { + char *p = vrmlyytext; + for (int i = 0; i < num_elements; i++) { + vec[i] = pstrtod(p, &p); + } +} + +/* Normal state: parsing nodes. The initial start state is used */ +/* only to recognize the VRML header. */ + +/* Start tokens for all of the field types, */ +/* except for MFNode and SFNode, which are almost completely handled */ +/* by the parser: */ + + + +/* Big hairy expression for floating point numbers: */ +/* Ints are decimal or hex (0x##): */ +/* Whitespace. Using this pattern can screw up currentLineNumber, */ +/* so it is only used wherever it is really convenient and it is */ +/* extremely unlikely that the user will put in a carriage return */ +/* (example: between the floats in an SFVec3f) */ +/* And the same pattern without the newline */ +/* Here's a pattern that matches a single newline character. */ +/* Legal characters to start an identifier */ +/* Legal other characters in an identifier */ +/*idRestChar ([^\x00-\x20\x22\x23\x27\x2b-\x2e\x5b-\x5d\x7b\x7d])*/ +/* Allow hyphen (0x2d) in identifiers. */ +#line 2927 "lex.yy.c" + +#define INITIAL 0 +#define NODE 1 +#define SFB 2 +#define SFC 3 +#define SFF 4 +#define SFIMG 5 +#define SFI 6 +#define SFR 7 +#define SFS 8 +#define SFT 9 +#define SFV2 10 +#define SFV3 11 +#define MFC 12 +#define MFF 13 +#define MFI 14 +#define MFR 15 +#define MFS 16 +#define MFV2 17 +#define MFV3 18 +#define IN_SFS 19 +#define IN_MFS 20 +#define IN_SFIMG 21 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int vrmlyylex_destroy (void ); + +int vrmlyyget_debug (void ); + +void vrmlyyset_debug (int debug_flag ); + +YY_EXTRA_TYPE vrmlyyget_extra (void ); + +void vrmlyyset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *vrmlyyget_in (void ); + +void vrmlyyset_in (FILE * in_str ); + +FILE *vrmlyyget_out (void ); + +void vrmlyyset_out (FILE * out_str ); + +int vrmlyyget_leng (void ); + +char *vrmlyyget_text (void ); + +int vrmlyyget_lineno (void ); + +void vrmlyyset_lineno (int line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int vrmlyywrap (void ); +#else +extern int vrmlyywrap (void ); +#endif +#endif + + static void yyunput (int c,char *buf_ptr ); + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO fwrite( vrmlyytext, vrmlyyleng, 1, vrmlyyout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + int n; \ + for ( n = 0; n < max_size && \ + (c = getc( vrmlyyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( vrmlyyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, vrmlyyin))==0 && ferror(vrmlyyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(vrmlyyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int vrmlyylex (void); + +#define YY_DECL int vrmlyylex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after vrmlyytext and vrmlyyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + +#line 217 "vrmlLexer.lxx" + + + + /* Switch into a new start state if the parser */ + /* just told us that we've read a field name */ + /* and should expect a field value (or IS) */ + if (expectToken != 0) { + + /* + * Annoying. This big switch is necessary because + * LEX wants to assign particular numbers to start + * tokens, and YACC wants to define all the tokens + * used, too. Sigh. + */ + switch(expectToken) { + case SFBOOL: BEGIN SFB; break; + case SFCOLOR: BEGIN SFC; break; + case SFFLOAT: BEGIN SFF; break; + case SFIMAGE: BEGIN SFIMG; break; + case SFINT32: BEGIN SFI; break; + case SFROTATION: BEGIN SFR; break; + case SFSTRING: BEGIN SFS; break; + case SFTIME: BEGIN SFT; break; + case SFVEC2F: BEGIN SFV2; break; + case SFVEC3F: BEGIN SFV3; break; + case MFCOLOR: BEGIN MFC; break; + case MFFLOAT: BEGIN MFF; break; + case MFINT32: BEGIN MFI; break; + case MFROTATION: BEGIN MFR; break; + case MFSTRING: BEGIN MFS; break; + case MFVEC2F: BEGIN MFV2; break; + case MFVEC3F: BEGIN MFV3; break; + + /* SFNode and MFNode are special. Here the lexer just returns */ + /* "marker tokens" so the parser knows what type of field is */ + /* being parsed; unlike the other fields, parsing of SFNode/MFNode */ + /* field happens in the parser. */ + case MFNODE: expectToken = 0; return MFNODE; + case SFNODE: expectToken = 0; return SFNODE; + + default: vrmlyyerror("ACK: Bad expectToken"); break; + } + } + + + /* This is more complicated than they really need to be because */ + /* I was ambitious and made the whitespace-matching rule aggressive */ +#line 3178 "lex.yy.c" + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! vrmlyyin ) + vrmlyyin = stdin; + + if ( ! vrmlyyout ) + vrmlyyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + vrmlyyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + vrmlyy_create_buffer(vrmlyyin,YY_BUF_SIZE ); + } + + vrmlyy_load_buffer_state( ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of vrmlyytext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 977 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 8632 ); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +/* rule 1 can match eol */ +YY_RULE_SETUP +#line 264 "vrmlLexer.lxx" +{ + BEGIN NODE; +} + YY_BREAK +/* The lexer is in the NODE state when parsing nodes, either */ +/* top-level nodes in the .wrl file, in a prototype implementation, */ +/* or when parsing the contents of SFNode or MFNode fields. */ +case 2: +YY_RULE_SETUP +#line 271 "vrmlLexer.lxx" +{ return PROTO; } + YY_BREAK +case 3: +YY_RULE_SETUP +#line 272 "vrmlLexer.lxx" +{ return EXTERNPROTO; } + YY_BREAK +case 4: +YY_RULE_SETUP +#line 273 "vrmlLexer.lxx" +{ return DEF; } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 274 "vrmlLexer.lxx" +{ return USE; } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 275 "vrmlLexer.lxx" +{ return TO; } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 276 "vrmlLexer.lxx" +{ return IS; } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 277 "vrmlLexer.lxx" +{ return ROUTE; } + YY_BREAK +case 9: +YY_RULE_SETUP +#line 278 "vrmlLexer.lxx" +{ return SFN_NULL; } + YY_BREAK +case 10: +YY_RULE_SETUP +#line 279 "vrmlLexer.lxx" +{ return EVENTIN; } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 280 "vrmlLexer.lxx" +{ return EVENTOUT; } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 281 "vrmlLexer.lxx" +{ return FIELD; } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 282 "vrmlLexer.lxx" +{ return EXPOSEDFIELD; } + YY_BREAK +/* Legal identifiers: */ +case 14: +YY_RULE_SETUP +#line 285 "vrmlLexer.lxx" +{ + vrmlyylval.string = strdup(vrmlyytext); + return IDENTIFIER; +} + YY_BREAK +/* This hopefully won't bitch things too much. It's not legal for + an identifier to begin with a digit, but Form-Z writes out VRML + files that do. So we'll allow it. Hopefully the start states + will keep them sorted out. */ +case 15: +YY_RULE_SETUP +#line 293 "vrmlLexer.lxx" +{ + vrmlyylval.string = strdup(vrmlyytext); + return IDENTIFIER; +} + YY_BREAK +/* All fields may have an IS declaration: */ +case 16: +YY_RULE_SETUP +#line 299 "vrmlLexer.lxx" +{ + BEGIN NODE; + expectToken = 0; + yyless(0); +} + YY_BREAK +case 17: +YY_RULE_SETUP +#line 305 "vrmlLexer.lxx" +{ + BEGIN NODE; + expectToken = 0; + yyless(0); /* put back the IS */ +} + YY_BREAK +/* All MF field types other than MFNode are completely parsed here */ +/* in the lexer, and one token is returned to the parser. They all */ +/* share the same rules for open and closing brackets: */ +case 18: +YY_RULE_SETUP +#line 314 "vrmlLexer.lxx" +{ + if (parsing_mf) vrmlyyerror("Double ["); + parsing_mf = 1; + mfarray = new MFArray; +} + YY_BREAK +case 19: +YY_RULE_SETUP +#line 320 "vrmlLexer.lxx" +{ + if (!parsing_mf) vrmlyyerror("Unmatched ]"); + int fieldType = expectToken; + BEGIN NODE; + parsing_mf = 0; + expectToken = 0; + vrmlyylval.fv._mf = mfarray; + return fieldType; +} + YY_BREAK +case 20: +YY_RULE_SETUP +#line 330 "vrmlLexer.lxx" +{ + BEGIN NODE; + expectToken = 0; + vrmlyylval.fv._sfbool = true; + return SFBOOL; +} + YY_BREAK +case 21: +YY_RULE_SETUP +#line 337 "vrmlLexer.lxx" +{ + BEGIN NODE; + expectToken = 0; + vrmlyylval.fv._sfbool = false; + return SFBOOL; +} + YY_BREAK +case 22: +YY_RULE_SETUP +#line 344 "vrmlLexer.lxx" +{ + BEGIN NODE; + expectToken = 0; + vrmlyylval.fv._sfint32 = extract_int(); + return SFINT32; +} + YY_BREAK +case 23: +YY_RULE_SETUP +#line 351 "vrmlLexer.lxx" +{ + VrmlFieldValue v; + v._sfint32 = extract_int(); + if (parsing_mf) { + mfarray->push_back(v); + } else { + BEGIN NODE; + expectToken = 0; + vrmlyylval.fv._mf = new MFArray; + vrmlyylval.fv._mf->push_back(v); + return MFINT32; + } +} + YY_BREAK +/* All the floating-point types are pretty similar: */ +case 24: +YY_RULE_SETUP +#line 366 "vrmlLexer.lxx" +{ + BEGIN NODE; + expectToken = 0; + vrmlyylval.fv._sffloat = extract_float(); + return SFFLOAT; +} + YY_BREAK +case 25: +YY_RULE_SETUP +#line 373 "vrmlLexer.lxx" +{ + VrmlFieldValue v; + v._sffloat = extract_float(); + if (parsing_mf) { + /* Add to array... */ + mfarray->push_back(v); + } else { + /* No open bracket means a single value: */ + BEGIN NODE; + expectToken = 0; + vrmlyylval.fv._mf = new MFArray; + vrmlyylval.fv._mf->push_back(v); + return MFFLOAT; + } +} + YY_BREAK +case 26: +/* rule 26 can match eol */ +YY_RULE_SETUP +#line 389 "vrmlLexer.lxx" +{ + BEGIN NODE; + expectToken = 0; + extract_vec(vrmlyylval.fv._sfvec, 2); + return SFVEC2F; +} + YY_BREAK +case 27: +/* rule 27 can match eol */ +YY_RULE_SETUP +#line 396 "vrmlLexer.lxx" +{ + VrmlFieldValue v; + extract_vec(v._sfvec, 2); + if (parsing_mf) { + mfarray->push_back(v); + } else { + BEGIN NODE; + expectToken = 0; + vrmlyylval.fv._mf = new MFArray; + vrmlyylval.fv._mf->push_back(v); + return MFVEC2F; + } +} + YY_BREAK +case 28: +/* rule 28 can match eol */ +YY_RULE_SETUP +#line 410 "vrmlLexer.lxx" +{ + BEGIN NODE; + expectToken = 0; + extract_vec(vrmlyylval.fv._sfvec, 3); + return SFVEC3F; +} + YY_BREAK +case 29: +/* rule 29 can match eol */ +YY_RULE_SETUP +#line 417 "vrmlLexer.lxx" +{ + VrmlFieldValue v; + extract_vec(v._sfvec, 3); + if (parsing_mf) { + mfarray->push_back(v); + } else { + BEGIN NODE; + expectToken = 0; + vrmlyylval.fv._mf = new MFArray; + vrmlyylval.fv._mf->push_back(v); + return MFVEC3F; + } +} + YY_BREAK +case 30: +/* rule 30 can match eol */ +YY_RULE_SETUP +#line 431 "vrmlLexer.lxx" +{ + BEGIN NODE; + expectToken = 0; + extract_vec(vrmlyylval.fv._sfvec, 4); + return SFROTATION; +} + YY_BREAK +case 31: +/* rule 31 can match eol */ +YY_RULE_SETUP +#line 438 "vrmlLexer.lxx" +{ + VrmlFieldValue v; + extract_vec(v._sfvec, 4); + if (parsing_mf) { + mfarray->push_back(v); + } else { + BEGIN NODE; + expectToken = 0; + vrmlyylval.fv._mf = new MFArray; + vrmlyylval.fv._mf->push_back(v); + return MFROTATION; + } +} + YY_BREAK +case 32: +/* rule 32 can match eol */ +YY_RULE_SETUP +#line 452 "vrmlLexer.lxx" +{ + BEGIN NODE; + expectToken = 0; + extract_vec(vrmlyylval.fv._sfvec, 3); + return SFCOLOR; +} + YY_BREAK +case 33: +/* rule 33 can match eol */ +YY_RULE_SETUP +#line 459 "vrmlLexer.lxx" +{ + VrmlFieldValue v; + extract_vec(v._sfvec, 3); + if (parsing_mf) { + mfarray->push_back(v); + } else { + BEGIN NODE; + expectToken = 0; + vrmlyylval.fv._mf = new MFArray; + vrmlyylval.fv._mf->push_back(v); + return MFCOLOR; + } +} + YY_BREAK +case 34: +YY_RULE_SETUP +#line 473 "vrmlLexer.lxx" +{ + BEGIN NODE; + expectToken = 0; + vrmlyylval.fv._sffloat = extract_float(); + return SFTIME; +} + YY_BREAK +/* SFString/MFString */ +case 35: +YY_RULE_SETUP +#line 481 "vrmlLexer.lxx" +{ + BEGIN IN_SFS; + quoted_string = ""; +} + YY_BREAK +case 36: +YY_RULE_SETUP +#line 486 "vrmlLexer.lxx" +{ + BEGIN IN_MFS; + quoted_string = ""; +} + YY_BREAK +/* Anything besides open-quote (or whitespace) is an error: */ +case 37: +YY_RULE_SETUP +#line 492 "vrmlLexer.lxx" +{ + vrmlyyerror("String missing open-quote"); + BEGIN NODE; + expectToken = 0; + vrmlyylval.fv._sfstring = strdup(""); + return SFSTRING; +} + YY_BREAK +/* Expect open-quote, open-bracket, or whitespace: */ +case 38: +YY_RULE_SETUP +#line 501 "vrmlLexer.lxx" +{ + vrmlyyerror("String missing open-quote"); + BEGIN NODE; + expectToken = 0; + return MFSTRING; +} + YY_BREAK +/* Backslashed-quotes are OK: */ +case 39: +YY_RULE_SETUP +#line 509 "vrmlLexer.lxx" +{ + quoted_string += '"'; +} + YY_BREAK +/* Gobble up anything besides quotes and newlines. */ +/* Newlines are legal in strings, but we exclude them here so */ +/* that line number are counted correctly by the catch-all newline */ +/* rule that applies to everything. */ +case 40: +YY_RULE_SETUP +#line 517 "vrmlLexer.lxx" +{ + quoted_string += vrmlyytext; +} + YY_BREAK +/* Quote ends the string: */ +case 41: +YY_RULE_SETUP +#line 522 "vrmlLexer.lxx" +{ + BEGIN NODE; + expectToken = 0; + vrmlyylval.fv._sfstring = strdup(quoted_string.c_str()); + return SFSTRING; +} + YY_BREAK +case 42: +YY_RULE_SETUP +#line 529 "vrmlLexer.lxx" +{ + VrmlFieldValue v; + v._sfstring = strdup(quoted_string.c_str()); + if (parsing_mf) { + BEGIN MFS; + mfarray->push_back(v); + quoted_string = ""; + } else { + BEGIN NODE; + expectToken = 0; + vrmlyylval.fv._mf = new MFArray; + vrmlyylval.fv._mf->push_back(v); + return MFSTRING; + } +} + YY_BREAK +/* SFImage: width height numComponents then width*height integers: */ +case 43: +/* rule 43 can match eol */ +YY_RULE_SETUP +#line 546 "vrmlLexer.lxx" +{ int w, h; + sscanf(vrmlyytext, "%d %d", &w, &h); + sfImageIntsExpected = 1+w*h; + sfImageIntsParsed = 0; + BEGIN IN_SFIMG; + } + YY_BREAK +case 44: +YY_RULE_SETUP +#line 552 "vrmlLexer.lxx" +{ ++sfImageIntsParsed; + if (sfImageIntsParsed == sfImageIntsExpected) { + BEGIN NODE; expectToken = 0; return SFIMAGE; + } + } + YY_BREAK +/* Whitespace and catch-all rules apply to all start states: */ +case 45: +YY_RULE_SETUP +#line 559 "vrmlLexer.lxx" +; + YY_BREAK +/* A newline is also whitespace, but we'll keep track of line number */ +/* to report in errors: */ +case 46: +/* rule 46 can match eol */ +YY_RULE_SETUP +#line 563 "vrmlLexer.lxx" +{ + // Save a copy of the line so we can print it out for the benefit of + // the user in case we get an error. + strncpy(current_line, vrmlyytext+1, max_error_width); + current_line[max_error_width] = '\0'; + line_number++; + + // Return the whole line to the lexer, except the newline character, + // which we eat. + yyless(1); +} + YY_BREAK +/* This catch-all rule catches anything not covered by any of */ +/* the above: */ +case 47: +YY_RULE_SETUP +#line 577 "vrmlLexer.lxx" +{ + return vrmlyytext[0]; +} + YY_BREAK +case 48: +YY_RULE_SETUP +#line 581 "vrmlLexer.lxx" +ECHO; + YY_BREAK +#line 3748 "lex.yy.c" +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(NODE): +case YY_STATE_EOF(SFB): +case YY_STATE_EOF(SFC): +case YY_STATE_EOF(SFF): +case YY_STATE_EOF(SFIMG): +case YY_STATE_EOF(SFI): +case YY_STATE_EOF(SFR): +case YY_STATE_EOF(SFS): +case YY_STATE_EOF(SFT): +case YY_STATE_EOF(SFV2): +case YY_STATE_EOF(SFV3): +case YY_STATE_EOF(MFC): +case YY_STATE_EOF(MFF): +case YY_STATE_EOF(MFI): +case YY_STATE_EOF(MFR): +case YY_STATE_EOF(MFS): +case YY_STATE_EOF(MFV2): +case YY_STATE_EOF(MFV3): +case YY_STATE_EOF(IN_SFS): +case YY_STATE_EOF(IN_MFS): +case YY_STATE_EOF(IN_SFIMG): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed vrmlyyin at a new source and called + * vrmlyylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = vrmlyyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_c_buf_p); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( vrmlyywrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * vrmlyytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of vrmlyylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = (yytext_ptr); + register int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + vrmlyyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), (size_t) num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + vrmlyyrestart(vrmlyyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) vrmlyyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 977 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + register int yy_is_jam; + register char *yy_cp = (yy_c_buf_p); + + register YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 977 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 976); + + return yy_is_jam ? 0 : yy_current_state; +} + + static void yyunput (int c, register char * yy_bp ) +{ + register char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up vrmlyytext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + register int number_to_move = (yy_n_chars) + 2; + register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + (yytext_ptr) = yy_bp; + (yy_hold_char) = *yy_cp; + (yy_c_buf_p) = yy_cp; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (yy_c_buf_p) - (yytext_ptr); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + vrmlyyrestart(vrmlyyin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( vrmlyywrap( ) ) + return EOF; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve vrmlyytext */ + (yy_hold_char) = *++(yy_c_buf_p); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void vrmlyyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + vrmlyyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + vrmlyy_create_buffer(vrmlyyin,YY_BUF_SIZE ); + } + + vrmlyy_init_buffer(YY_CURRENT_BUFFER,input_file ); + vrmlyy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void vrmlyy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * vrmlyypop_buffer_state(); + * vrmlyypush_buffer_state(new_buffer); + */ + vrmlyyensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + vrmlyy_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (vrmlyywrap()) processing, but the only time this flag + * is looked at is after vrmlyywrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void vrmlyy_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + vrmlyyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE vrmlyy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) vrmlyyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in vrmlyy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) vrmlyyalloc(b->yy_buf_size + 2 ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in vrmlyy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + vrmlyy_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with vrmlyy_create_buffer() + * + */ + void vrmlyy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + vrmlyyfree((void *) b->yy_ch_buf ); + + vrmlyyfree((void *) b ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a vrmlyyrestart() or at EOF. + */ + static void vrmlyy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + vrmlyy_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then vrmlyy_init_buffer was _probably_ + * called from vrmlyyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void vrmlyy_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + vrmlyy_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void vrmlyypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + vrmlyyensure_buffer_stack(); + + /* This block is copied from vrmlyy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from vrmlyy_switch_to_buffer. */ + vrmlyy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void vrmlyypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + vrmlyy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + vrmlyy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void vrmlyyensure_buffer_stack (void) +{ + int num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)vrmlyyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in vrmlyyensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)vrmlyyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in vrmlyyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE vrmlyy_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) vrmlyyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in vrmlyy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + vrmlyy_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to vrmlyylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * vrmlyy_scan_bytes() instead. + */ +YY_BUFFER_STATE vrmlyy_scan_string (yyconst char * yystr ) +{ + + return vrmlyy_scan_bytes(yystr,strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to vrmlyylex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE vrmlyy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) vrmlyyalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in vrmlyy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = vrmlyy_scan_buffer(buf,n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in vrmlyy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up vrmlyytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + vrmlyytext[vrmlyyleng] = (yy_hold_char); \ + (yy_c_buf_p) = vrmlyytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + vrmlyyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int vrmlyyget_lineno (void) +{ + + return vrmlyylineno; +} + +/** Get the input stream. + * + */ +FILE *vrmlyyget_in (void) +{ + return vrmlyyin; +} + +/** Get the output stream. + * + */ +FILE *vrmlyyget_out (void) +{ + return vrmlyyout; +} + +/** Get the length of the current token. + * + */ +int vrmlyyget_leng (void) +{ + return vrmlyyleng; +} + +/** Get the current token. + * + */ + +char *vrmlyyget_text (void) +{ + return vrmlyytext; +} + +/** Set the current line number. + * @param line_number + * + */ +void vrmlyyset_lineno (int line_number ) +{ + + vrmlyylineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see vrmlyy_switch_to_buffer + */ +void vrmlyyset_in (FILE * in_str ) +{ + vrmlyyin = in_str ; +} + +void vrmlyyset_out (FILE * out_str ) +{ + vrmlyyout = out_str ; +} + +int vrmlyyget_debug (void) +{ + return vrmlyy_flex_debug; +} + +void vrmlyyset_debug (int bdebug ) +{ + vrmlyy_flex_debug = bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from vrmlyylex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + vrmlyyin = stdin; + vrmlyyout = stdout; +#else + vrmlyyin = (FILE *) 0; + vrmlyyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * vrmlyylex_init() + */ + return 0; +} + +/* vrmlyylex_destroy is for both reentrant and non-reentrant scanners. */ +int vrmlyylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + vrmlyy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + vrmlyypop_buffer_state(); + } + + /* Destroy the stack itself. */ + vrmlyyfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * vrmlyylex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *vrmlyyalloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *vrmlyyrealloc (void * ptr, yy_size_t size ) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void vrmlyyfree (void * ptr ) +{ + free( (char *) ptr ); /* see vrmlyyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 581 "vrmlLexer.lxx" diff --git a/pandatool/src/vrml/vrmlLexer.lxx b/pandatool/src/vrml/vrmlLexer.lxx index fead9385b6..e8b1290615 100644 --- a/pandatool/src/vrml/vrmlLexer.lxx +++ b/pandatool/src/vrml/vrmlLexer.lxx @@ -50,7 +50,7 @@ static int error_count = 0; static int warning_count = 0; // This is the pointer to the current input stream. -static istream *inp = NULL; +static istream *input_p = NULL; // This is the name of the vrml file we're parsing. We keep it so we // can print it out for error messages. @@ -77,7 +77,7 @@ static MFArray *mfarray; void vrml_init_lexer(istream &in, const string &filename) { - inp = ∈ + input_p = ∈ vrml_filename = filename; line_number = 0; error_count = 0; @@ -123,10 +123,10 @@ vrmlyywarning(const string &msg) { // stdio FILE pointer. This is flex-specific. static void input_chars(char *buffer, int &result, int max_size) { - nassertv(inp != NULL); - if (*inp) { - inp->read(buffer, max_size); - result = inp->gcount(); + nassertv(input_p != NULL); + if (*input_p) { + input_p->read(buffer, max_size); + result = input_p->gcount(); if (result >= 0 && result < max_size) { // Truncate at the end of the read. buffer[result] = '\0'; diff --git a/pandatool/src/vrml/vrmlParser.cxx.prebuilt b/pandatool/src/vrml/vrmlParser.cxx.prebuilt index a84cdd3a89..fb95f8075f 100644 --- a/pandatool/src/vrml/vrmlParser.cxx.prebuilt +++ b/pandatool/src/vrml/vrmlParser.cxx.prebuilt @@ -1,24 +1,22 @@ -/* A Bison parser, made by GNU Bison 2.3. */ +/* A Bison parser, made by GNU Bison 2.4.2. */ /* Skeleton implementation for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify + + Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -29,7 +27,7 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ @@ -47,7 +45,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.3" +#define YYBISON_VERSION "2.4.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -55,97 +53,28 @@ /* Pure parsers. */ #define YYPURE 0 +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ -#define yyparse vrmlyyparse -#define yylex vrmlyylex -#define yyerror vrmlyyerror -#define yylval vrmlyylval -#define yychar vrmlyychar -#define yydebug vrmlyydebug -#define yynerrs vrmlyynerrs - - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - IDENTIFIER = 258, - DEF = 259, - USE = 260, - PROTO = 261, - EXTERNPROTO = 262, - TO = 263, - IS = 264, - ROUTE = 265, - SFN_NULL = 266, - EVENTIN = 267, - EVENTOUT = 268, - FIELD = 269, - EXPOSEDFIELD = 270, - SFBOOL = 271, - SFCOLOR = 272, - SFFLOAT = 273, - SFIMAGE = 274, - SFINT32 = 275, - SFNODE = 276, - SFROTATION = 277, - SFSTRING = 278, - SFTIME = 279, - SFVEC2F = 280, - SFVEC3F = 281, - MFCOLOR = 282, - MFFLOAT = 283, - MFINT32 = 284, - MFROTATION = 285, - MFSTRING = 286, - MFVEC2F = 287, - MFVEC3F = 288, - MFNODE = 289 - }; -#endif -/* Tokens. */ -#define IDENTIFIER 258 -#define DEF 259 -#define USE 260 -#define PROTO 261 -#define EXTERNPROTO 262 -#define TO 263 -#define IS 264 -#define ROUTE 265 -#define SFN_NULL 266 -#define EVENTIN 267 -#define EVENTOUT 268 -#define FIELD 269 -#define EXPOSEDFIELD 270 -#define SFBOOL 271 -#define SFCOLOR 272 -#define SFFLOAT 273 -#define SFIMAGE 274 -#define SFINT32 275 -#define SFNODE 276 -#define SFROTATION 277 -#define SFSTRING 278 -#define SFTIME 279 -#define SFVEC2F 280 -#define SFVEC3F 281 -#define MFCOLOR 282 -#define MFFLOAT 283 -#define MFINT32 284 -#define MFROTATION 285 -#define MFSTRING 286 -#define MFVEC2F 287 -#define MFVEC3F 288 -#define MFNODE 289 - - +#define yyparse vrmlyyparse +#define yylex vrmlyylex +#define yyerror vrmlyyerror +#define yylval vrmlyylval +#define yychar vrmlyychar +#define yydebug vrmlyydebug +#define yynerrs vrmlyynerrs /* Copy the first part of user declarations. */ + +/* Line 189 of yacc.c */ #line 23 "vrmlParser.yxx" @@ -240,6 +169,9 @@ vrml_cleanup_parser() { +/* Line 189 of yacc.c */ +#line 174 "y.tab.c" + /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 @@ -258,32 +190,114 @@ vrml_cleanup_parser() { # define YYTOKEN_TABLE 0 #endif + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + IDENTIFIER = 258, + DEF = 259, + USE = 260, + PROTO = 261, + EXTERNPROTO = 262, + TO = 263, + IS = 264, + ROUTE = 265, + SFN_NULL = 266, + EVENTIN = 267, + EVENTOUT = 268, + FIELD = 269, + EXPOSEDFIELD = 270, + SFBOOL = 271, + SFCOLOR = 272, + SFFLOAT = 273, + SFIMAGE = 274, + SFINT32 = 275, + SFNODE = 276, + SFROTATION = 277, + SFSTRING = 278, + SFTIME = 279, + SFVEC2F = 280, + SFVEC3F = 281, + MFCOLOR = 282, + MFFLOAT = 283, + MFINT32 = 284, + MFROTATION = 285, + MFSTRING = 286, + MFVEC2F = 287, + MFVEC3F = 288, + MFNODE = 289 + }; +#endif +/* Tokens. */ +#define IDENTIFIER 258 +#define DEF 259 +#define USE 260 +#define PROTO 261 +#define EXTERNPROTO 262 +#define TO 263 +#define IS 264 +#define ROUTE 265 +#define SFN_NULL 266 +#define EVENTIN 267 +#define EVENTOUT 268 +#define FIELD 269 +#define EXPOSEDFIELD 270 +#define SFBOOL 271 +#define SFCOLOR 272 +#define SFFLOAT 273 +#define SFIMAGE 274 +#define SFINT32 275 +#define SFNODE 276 +#define SFROTATION 277 +#define SFSTRING 278 +#define SFTIME 279 +#define SFVEC2F 280 +#define SFVEC3F 281 +#define MFCOLOR 282 +#define MFFLOAT 283 +#define MFINT32 284 +#define MFROTATION 285 +#define MFSTRING 286 +#define MFVEC2F 287 +#define MFVEC3F 288 +#define MFNODE 289 + + + + #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 116 "vrmlParser.yxx" { + +/* Line 214 of yacc.c */ +#line 116 "vrmlParser.yxx" + char *string; VrmlFieldValue fv; VrmlNode *node; MFArray *mfarray; SFNodeRef nodeRef; VrmlScene *scene; -} -/* Line 193 of yacc.c. */ -#line 274 "y.tab.c" - YYSTYPE; + + + +/* Line 214 of yacc.c */ +#line 289 "y.tab.c" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 #endif - /* Copy the second part of user declarations. */ -/* Line 216 of yacc.c. */ -#line 287 "y.tab.c" +/* Line 264 of yacc.c */ +#line 301 "y.tab.c" #ifdef short # undef short @@ -358,14 +372,14 @@ typedef short int yytype_int16; #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int -YYID (int i) +YYID (int yyi) #else static int -YYID (i) - int i; +YYID (yyi) + int yyi; #endif { - return i; + return yyi; } #endif @@ -446,9 +460,9 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss; - YYSTYPE yyvs; - }; + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; +}; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) @@ -482,12 +496,12 @@ union yyalloc elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack) \ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ @@ -617,10 +631,10 @@ static const char *const yytname[] = "SFVEC3F", "MFCOLOR", "MFFLOAT", "MFINT32", "MFROTATION", "MFSTRING", "MFVEC2F", "MFVEC3F", "MFNODE", "'['", "']'", "'{'", "'}'", "'.'", "$accept", "vrmlscene", "declarations", "nodeDeclaration", - "protoDeclaration", "proto", "@1", "externproto", "@2", "@3", - "interfaceDeclarations", "interfaceDeclaration", "@4", "@5", + "protoDeclaration", "proto", "$@1", "externproto", "$@2", "$@3", + "interfaceDeclarations", "interfaceDeclaration", "$@4", "$@5", "externInterfaceDeclarations", "externInterfaceDeclaration", - "routeDeclaration", "node", "@6", "nodeGuts", "nodeGut", "@7", "@8", + "routeDeclaration", "node", "$@6", "nodeGuts", "nodeGut", "$@7", "$@8", "fieldValue", "mfnodeValue", "nodes", 0 }; #endif @@ -789,9 +803,18 @@ static const yytype_uint8 yystos[] = /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ + Once GCC version 2 has supplanted version 1, this can go. However, + YYFAIL appears to be in use. Nevertheless, it is formally deprecated + in Bison 2.4.2's NEWS entry, where a plan to phase it out is + discussed. */ #define YYFAIL goto yyerrlab +#if defined YYFAIL + /* This is here to suppress warnings from the GCC cpp's + -Wunused-macros. Normally we don't worry about that warning, but + some users do, and we want to make it easy for users to remove + YYFAIL uses, which will produce warnings from Bison 2.5. */ +#endif #define YYRECOVERING() (!!yyerrstatus) @@ -959,17 +982,20 @@ yy_symbol_print (yyoutput, yytype, yyvaluep) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void -yy_stack_print (bottom, top) - yytype_int16 *bottom; - yytype_int16 *top; +yy_stack_print (yybottom, yytop) + yytype_int16 *yybottom; + yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); - for (; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } YYFPRINTF (stderr, "\n"); } @@ -1003,11 +1029,11 @@ yy_reduce_print (yyvsp, yyrule) /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { - fprintf (stderr, " $%d = ", yyi + 1); + YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) ); - fprintf (stderr, "\n"); + YYFPRINTF (stderr, "\n"); } } @@ -1287,10 +1313,8 @@ yydestruct (yymsg, yytype, yyvaluep) break; } } - /* Prevent warnings from -Wmissing-prototypes. */ - #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); @@ -1306,11 +1330,10 @@ int yyparse (); #endif /* ! YYPARSE_PARAM */ - -/* The look-ahead symbol. */ +/* The lookahead symbol. */ int yychar; -/* The semantic value of the look-ahead symbol. */ +/* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ @@ -1318,9 +1341,9 @@ int yynerrs; -/*----------. -| yyparse. | -`----------*/ +/*-------------------------. +| yyparse or yypush_parse. | +`-------------------------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ @@ -1344,14 +1367,39 @@ yyparse () #endif #endif { - - int yystate; + + + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + + /* The stacks and their tools: + `yyss': related to states. + `yyvs': related to semantic values. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; + + YYSIZE_T yystacksize; + int yyn; int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ - int yytoken = 0; + /* Lookahead token as an internal (translated) token number. */ + int yytoken; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; @@ -1359,51 +1407,28 @@ yyparse () YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss = yyssa; - yytype_int16 *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; - - - #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) - YYSIZE_T yystacksize = YYINITDEPTH; - - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - - /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; + yytoken = 0; + yyss = yyssa; + yyvs = yyvsa; + yystacksize = YYINITDEPTH; + YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ + yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ - yyssp = yyss; yyvsp = yyvs; @@ -1433,7 +1458,6 @@ yyparse () YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; - /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might @@ -1441,7 +1465,6 @@ yyparse () yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); yyss = yyss1; @@ -1464,9 +1487,8 @@ yyparse () (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); @@ -1477,7 +1499,6 @@ yyparse () yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); @@ -1487,6 +1508,9 @@ yyparse () YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + if (yystate == YYFINAL) + YYACCEPT; + goto yybackup; /*-----------. @@ -1495,16 +1519,16 @@ yyparse () yybackup: /* Do appropriate processing given the current state. Read a - look-ahead token if we need one and don't already have one. */ + lookahead token if we need one and don't already have one. */ - /* First try to decide what to do without reference to look-ahead token. */ + /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; - /* Not known => get a look-ahead token if don't already have one. */ + /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); @@ -1536,20 +1560,16 @@ yybackup: goto yyreduce; } - if (yyn == YYFINAL) - YYACCEPT; - /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; - /* Shift the look-ahead token. */ + /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - /* Discard the shifted token unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; + /* Discard the shifted token. */ + yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; @@ -1589,6 +1609,8 @@ yyreduce: switch (yyn) { case 2: + +/* Line 1464 of yacc.c */ #line 148 "vrmlParser.yxx" { parsed_scene = (yyvsp[(1) - (1)].scene); @@ -1596,6 +1618,8 @@ yyreduce: break; case 3: + +/* Line 1464 of yacc.c */ #line 155 "vrmlParser.yxx" { (yyval.scene) = new VrmlScene; @@ -1603,6 +1627,8 @@ yyreduce: break; case 4: + +/* Line 1464 of yacc.c */ #line 159 "vrmlParser.yxx" { Declaration d; @@ -1613,6 +1639,8 @@ yyreduce: break; case 7: + +/* Line 1464 of yacc.c */ #line 171 "vrmlParser.yxx" { (yyval.nodeRef)._p = (yyvsp[(1) - (1)].node); @@ -1622,6 +1650,8 @@ yyreduce: break; case 8: + +/* Line 1464 of yacc.c */ #line 177 "vrmlParser.yxx" { (yyval.nodeRef)._p = (yyvsp[(3) - (3)].node); @@ -1631,6 +1661,8 @@ yyreduce: break; case 9: + +/* Line 1464 of yacc.c */ #line 183 "vrmlParser.yxx" { (yyval.nodeRef)._p = NULL; @@ -1640,43 +1672,59 @@ yyreduce: break; case 12: + +/* Line 1464 of yacc.c */ #line 196 "vrmlParser.yxx" { beginProto((yyvsp[(2) - (2)].string)); } break; case 13: + +/* Line 1464 of yacc.c */ #line 198 "vrmlParser.yxx" { endProto(); free((yyvsp[(2) - (9)].string));} break; case 14: + +/* Line 1464 of yacc.c */ #line 202 "vrmlParser.yxx" { beginProto((yyvsp[(2) - (2)].string)); } break; case 15: + +/* Line 1464 of yacc.c */ #line 204 "vrmlParser.yxx" { expect(MFSTRING); } break; case 16: + +/* Line 1464 of yacc.c */ #line 205 "vrmlParser.yxx" { endProto(); free((yyvsp[(2) - (8)].string)); } break; case 19: + +/* Line 1464 of yacc.c */ #line 213 "vrmlParser.yxx" { addEventIn((yyvsp[(2) - (3)].string), (yyvsp[(3) - (3)].string)); free((yyvsp[(2) - (3)].string)); free((yyvsp[(3) - (3)].string)); } break; case 20: + +/* Line 1464 of yacc.c */ #line 215 "vrmlParser.yxx" { addEventOut((yyvsp[(2) - (3)].string), (yyvsp[(3) - (3)].string)); free((yyvsp[(2) - (3)].string)); free((yyvsp[(3) - (3)].string)); } break; case 21: + +/* Line 1464 of yacc.c */ #line 218 "vrmlParser.yxx" { int type = fieldType((yyvsp[(2) - (3)].string)); @@ -1685,6 +1733,8 @@ yyreduce: break; case 22: + +/* Line 1464 of yacc.c */ #line 223 "vrmlParser.yxx" { addField((yyvsp[(2) - (5)].string), (yyvsp[(3) - (5)].string), &((yyvsp[(5) - (5)].fv))); @@ -1694,6 +1744,8 @@ yyreduce: break; case 23: + +/* Line 1464 of yacc.c */ #line 229 "vrmlParser.yxx" { int type = fieldType((yyvsp[(2) - (3)].string)); @@ -1702,6 +1754,8 @@ yyreduce: break; case 24: + +/* Line 1464 of yacc.c */ #line 234 "vrmlParser.yxx" { addExposedField((yyvsp[(2) - (5)].string), (yyvsp[(3) - (5)].string), &((yyvsp[(5) - (5)].fv))); @@ -1711,50 +1765,68 @@ yyreduce: break; case 27: + +/* Line 1464 of yacc.c */ #line 247 "vrmlParser.yxx" { addEventIn((yyvsp[(2) - (3)].string), (yyvsp[(3) - (3)].string)); free((yyvsp[(2) - (3)].string)); free((yyvsp[(3) - (3)].string)); } break; case 28: + +/* Line 1464 of yacc.c */ #line 249 "vrmlParser.yxx" { addEventOut((yyvsp[(2) - (3)].string), (yyvsp[(3) - (3)].string)); free((yyvsp[(2) - (3)].string)); free((yyvsp[(3) - (3)].string)); } break; case 29: + +/* Line 1464 of yacc.c */ #line 251 "vrmlParser.yxx" { addField((yyvsp[(2) - (3)].string), (yyvsp[(3) - (3)].string)); free((yyvsp[(2) - (3)].string)); free((yyvsp[(3) - (3)].string)); } break; case 30: + +/* Line 1464 of yacc.c */ #line 253 "vrmlParser.yxx" { addExposedField((yyvsp[(2) - (3)].string), (yyvsp[(3) - (3)].string)); free((yyvsp[(2) - (3)].string)); free((yyvsp[(3) - (3)].string)); } break; case 31: + +/* Line 1464 of yacc.c */ #line 259 "vrmlParser.yxx" { free((yyvsp[(2) - (8)].string)); free((yyvsp[(4) - (8)].string)); free((yyvsp[(6) - (8)].string)); free((yyvsp[(8) - (8)].string)); } break; case 32: + +/* Line 1464 of yacc.c */ #line 263 "vrmlParser.yxx" { enterNode((yyvsp[(1) - (1)].string)); } break; case 33: + +/* Line 1464 of yacc.c */ #line 264 "vrmlParser.yxx" { (yyval.node) = exitNode(); free((yyvsp[(1) - (5)].string));} break; case 36: + +/* Line 1464 of yacc.c */ #line 273 "vrmlParser.yxx" { enterField((yyvsp[(1) - (1)].string)); } break; case 37: + +/* Line 1464 of yacc.c */ #line 275 "vrmlParser.yxx" { storeField((yyvsp[(3) - (3)].fv)); @@ -1764,16 +1836,22 @@ yyreduce: break; case 40: + +/* Line 1464 of yacc.c */ #line 284 "vrmlParser.yxx" { inScript(); free((yyvsp[(2) - (3)].string)); free((yyvsp[(3) - (3)].string)); } break; case 41: + +/* Line 1464 of yacc.c */ #line 285 "vrmlParser.yxx" { inScript(); free((yyvsp[(2) - (3)].string)); free((yyvsp[(3) - (3)].string)); } break; case 42: + +/* Line 1464 of yacc.c */ #line 286 "vrmlParser.yxx" { inScript(); int type = fieldType((yyvsp[(2) - (3)].string)); @@ -1781,26 +1859,36 @@ yyreduce: break; case 43: + +/* Line 1464 of yacc.c */ #line 289 "vrmlParser.yxx" { free((yyvsp[(2) - (5)].string)); free((yyvsp[(3) - (5)].string)); } break; case 44: + +/* Line 1464 of yacc.c */ #line 291 "vrmlParser.yxx" { inScript(); free((yyvsp[(2) - (5)].string)); free((yyvsp[(3) - (5)].string)); free((yyvsp[(5) - (5)].string)); } break; case 45: + +/* Line 1464 of yacc.c */ #line 293 "vrmlParser.yxx" { inScript(); free((yyvsp[(2) - (5)].string)); free((yyvsp[(3) - (5)].string)); free((yyvsp[(5) - (5)].string)); } break; case 63: + +/* Line 1464 of yacc.c */ #line 315 "vrmlParser.yxx" { (yyval.fv)._sfnode = (yyvsp[(2) - (2)].nodeRef); } break; case 64: + +/* Line 1464 of yacc.c */ #line 317 "vrmlParser.yxx" { (yyval.fv)._sfnode._p = NULL; @@ -1810,16 +1898,22 @@ yyreduce: break; case 65: + +/* Line 1464 of yacc.c */ #line 322 "vrmlParser.yxx" { (yyval.fv)._mf = (yyvsp[(2) - (2)].mfarray); } break; case 66: + +/* Line 1464 of yacc.c */ #line 323 "vrmlParser.yxx" { free((yyvsp[(2) - (2)].string)); } break; case 67: + +/* Line 1464 of yacc.c */ #line 328 "vrmlParser.yxx" { (yyval.mfarray) = (yyvsp[(2) - (3)].mfarray); @@ -1827,6 +1921,8 @@ yyreduce: break; case 68: + +/* Line 1464 of yacc.c */ #line 332 "vrmlParser.yxx" { (yyval.mfarray) = new MFArray; @@ -1837,6 +1933,8 @@ yyreduce: break; case 69: + +/* Line 1464 of yacc.c */ #line 342 "vrmlParser.yxx" { (yyval.mfarray) = new MFArray; @@ -1844,6 +1942,8 @@ yyreduce: break; case 70: + +/* Line 1464 of yacc.c */ #line 346 "vrmlParser.yxx" { VrmlFieldValue v; @@ -1854,8 +1954,9 @@ yyreduce: break; -/* Line 1267 of yacc.c. */ -#line 1859 "y.tab.c" + +/* Line 1464 of yacc.c */ +#line 1960 "y.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -1866,7 +1967,6 @@ yyreduce: *++yyvsp = yyval; - /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ @@ -1931,7 +2031,7 @@ yyerrlab: if (yyerrstatus == 3) { - /* If just tried and failed to reuse look-ahead token after an + /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) @@ -1948,7 +2048,7 @@ yyerrlab: } } - /* Else will try to reuse look-ahead token after shifting the error + /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; @@ -2005,9 +2105,6 @@ yyerrlab1: YY_STACK_PRINT (yyss, yyssp); } - if (yyn == YYFINAL) - YYACCEPT; - *++yyvsp = yylval; @@ -2032,7 +2129,7 @@ yyabortlab: yyresult = 1; goto yyreturn; -#ifndef yyoverflow +#if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -2043,7 +2140,7 @@ yyexhaustedlab: #endif yyreturn: - if (yychar != YYEOF && yychar != YYEMPTY) + if (yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered @@ -2069,6 +2166,8 @@ yyreturn: } + +/* Line 1684 of yacc.c */ #line 354 "vrmlParser.yxx" diff --git a/pandatool/src/vrml/vrmlParser.h.prebuilt b/pandatool/src/vrml/vrmlParser.h.prebuilt index f891c97565..d7f8a48330 100644 --- a/pandatool/src/vrml/vrmlParser.h.prebuilt +++ b/pandatool/src/vrml/vrmlParser.h.prebuilt @@ -1,24 +1,22 @@ -/* A Bison parser, made by GNU Bison 2.3. */ +/* A Bison parser, made by GNU Bison 2.4.2. */ /* Skeleton interface for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify + + Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -29,10 +27,11 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ + /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE @@ -112,22 +111,28 @@ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 116 "vrmlParser.yxx" { + +/* Line 1685 of yacc.c */ +#line 116 "vrmlParser.yxx" + char *string; VrmlFieldValue fv; VrmlNode *node; MFArray *mfarray; SFNodeRef nodeRef; VrmlScene *scene; -} -/* Line 1529 of yacc.c. */ -#line 126 "y.tab.h" - YYSTYPE; + + + +/* Line 1685 of yacc.c */ +#line 130 "y.tab.h" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE vrmlyylval; + diff --git a/pandatool/src/xfile/xLexer.cxx.prebuilt b/pandatool/src/xfile/xLexer.cxx.prebuilt index 3cb949d010..b8e528bd9e 100644 --- a/pandatool/src/xfile/xLexer.cxx.prebuilt +++ b/pandatool/src/xfile/xLexer.cxx.prebuilt @@ -1,2631 +1,2638 @@ -#line 2 "lex.yy.c" - -#line 4 "lex.yy.c" - -#define YY_INT_ALIGNED short int - -/* A lexical scanner generated by flex */ - -#define yy_create_buffer xyy_create_buffer -#define yy_delete_buffer xyy_delete_buffer -#define yy_flex_debug xyy_flex_debug -#define yy_init_buffer xyy_init_buffer -#define yy_flush_buffer xyy_flush_buffer -#define yy_load_buffer_state xyy_load_buffer_state -#define yy_switch_to_buffer xyy_switch_to_buffer -#define yyin xyyin -#define yyleng xyyleng -#define yylex xyylex -#define yylineno xyylineno -#define yyout xyyout -#define yyrestart xyyrestart -#define yytext xyytext -#define yywrap xyywrap -#define yyalloc xyyalloc -#define yyrealloc xyyrealloc -#define yyfree xyyfree - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 35 -#if YY_FLEX_SUBMINOR_VERSION > 0 -#define FLEX_BETA -#endif - -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ -#include -#include -#include -#include - -/* end standard C headers. */ - -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have . Non-C99 systems may or may not. */ - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif - -#include -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; -#endif /* ! C99 */ - -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - -#endif /* ! FLEXINT_H */ - -#ifdef __cplusplus - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define YY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef YY_USE_CONST -#define yyconst const -#else -#define yyconst -#endif - -/* Returned upon end-of-file. */ -#define YY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. - */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN (yy_start) = 1 + 2 * - -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START (((yy_start) - 1) / 2) -#define YYSTATE YY_START - -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE xyyrestart(xyyin ) - -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#ifndef YY_BUF_SIZE -#define YY_BUF_SIZE 16384 -#endif - -/* The state buf must be large enough to hold one state per character in the main buffer. - */ -#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) - -#ifndef YY_TYPEDEF_YY_BUFFER_STATE -#define YY_TYPEDEF_YY_BUFFER_STATE -typedef struct yy_buffer_state *YY_BUFFER_STATE; -#endif - -extern int xyyleng; - -extern FILE *xyyin, *xyyout; - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - - #define YY_LESS_LINENO(n) - -/* Return all but the first "n" matched characters back to the input stream. */ -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up xyytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - *yy_cp = (yy_hold_char); \ - YY_RESTORE_YY_MORE_OFFSET \ - (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up xyytext again */ \ - } \ - while ( 0 ) - -#define unput(c) yyunput( c, (yytext_ptr) ) - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - -#ifndef YY_STRUCT_YY_BUFFER_STATE -#define YY_STRUCT_YY_BUFFER_STATE -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - yy_size_t yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - int yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - int yy_bs_lineno; /**< The line count. */ - int yy_bs_column; /**< The column count. */ - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; - -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via xyyrestart()), so that the user can continue scanning by - * just pointing xyyin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - - }; -#endif /* !YY_STRUCT_YY_BUFFER_STATE */ - -/* Stack of input buffers. */ -static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ -static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ -static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - * - * Returns the top of the stack, or NULL. - */ -#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ - ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ - : NULL) - -/* Same as previous macro, but useful when we know that the buffer stack is not - * NULL or when we need an lvalue. For internal use only. - */ -#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] - -/* yy_hold_char holds the character lost when xyytext is formed. */ -static char yy_hold_char; -static int yy_n_chars; /* number of characters read into yy_ch_buf */ -int xyyleng; - -/* Points to current character in buffer. */ -static char *yy_c_buf_p = (char *) 0; -static int yy_init = 0; /* whether we need to initialize */ -static int yy_start = 0; /* start state number */ - -/* Flag which is used to allow xyywrap()'s to do buffer switches - * instead of setting up a fresh xyyin. A bit of a hack ... - */ -static int yy_did_buffer_switch_on_eof; - -void xyyrestart (FILE *input_file ); -void xyy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); -YY_BUFFER_STATE xyy_create_buffer (FILE *file,int size ); -void xyy_delete_buffer (YY_BUFFER_STATE b ); -void xyy_flush_buffer (YY_BUFFER_STATE b ); -void xyypush_buffer_state (YY_BUFFER_STATE new_buffer ); -void xyypop_buffer_state (void ); - -static void xyyensure_buffer_stack (void ); -static void xyy_load_buffer_state (void ); -static void xyy_init_buffer (YY_BUFFER_STATE b,FILE *file ); - -#define YY_FLUSH_BUFFER xyy_flush_buffer(YY_CURRENT_BUFFER ) - -YY_BUFFER_STATE xyy_scan_buffer (char *base,yy_size_t size ); -YY_BUFFER_STATE xyy_scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE xyy_scan_bytes (yyconst char *bytes,int len ); - -void *xyyalloc (yy_size_t ); -void *xyyrealloc (void *,yy_size_t ); -void xyyfree (void * ); - -#define yy_new_buffer xyy_create_buffer - -#define yy_set_interactive(is_interactive) \ - { \ - if ( ! YY_CURRENT_BUFFER ){ \ - xyyensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - xyy_create_buffer(xyyin,YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ - } - -#define yy_set_bol(at_bol) \ - { \ - if ( ! YY_CURRENT_BUFFER ){\ - xyyensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - xyy_create_buffer(xyyin,YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ - } - -#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) - -typedef unsigned char YY_CHAR; - -FILE *xyyin = (FILE *) 0, *xyyout = (FILE *) 0; - -typedef int yy_state_type; - -extern int xyylineno; - -int xyylineno = 1; - -extern char *xyytext; -#define yytext_ptr xyytext - -static yy_state_type yy_get_previous_state (void ); -static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); -static int yy_get_next_buffer (void ); -static void yy_fatal_error (yyconst char msg[] ); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up xyytext. - */ -#define YY_DO_BEFORE_ACTION \ - (yytext_ptr) = yy_bp; \ - xyyleng = (size_t) (yy_cp - yy_bp); \ - (yy_hold_char) = *yy_cp; \ - *yy_cp = '\0'; \ - (yy_c_buf_p) = yy_cp; - -#define YY_NUM_RULES 35 -#define YY_END_OF_BUFFER 36 -/* This struct is not used in this scanner, - but its presence is necessary. */ -struct yy_trans_info - { - flex_int32_t yy_verify; - flex_int32_t yy_nxt; - }; -static yyconst flex_int16_t yy_acclist[200] = - { 0, - 36, 34, 35, 2, 34, 35, 1, 35, 30, 34, - 35, 4, 34, 35, 32, 34, 35, 34, 35, 10, - 34, 35, 32, 34, 35, 9, 34, 35, 34, 35, - 26, 34, 35, 11, 34, 35, 31, 34, 35, 32, - 34, 35, 32, 34, 35, 32, 34, 35, 32, 34, - 35, 32, 34, 35, 32, 34, 35, 32, 34, 35, - 32, 34, 35, 32, 34, 35, 7, 34, 35, 8, - 34, 35, 5, 34, 35, 6, 34, 35, 1, 4, - 32, 26, 32, 33, 32, 33, 32, 26, 32, 3, - 27,16412, 26, 27,16412, 33, 33, 26, 32, 32, - - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 33, 32, 33, 32, 33, 32, 33, - 32, 32, 29, 3, 27, 33, 33, 33, 33, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 8220, 32, 13, 32, 14, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 25, 32, 32, 32, 29, 29, 12, 32, 32, 32, - 17, 32, 19, 32, 32, 32, 24, 32, 32, 22, - 32, 32, 32, 16, 32, 18, 32, 20, 32, 32, - 32, 29, 15, 32, 32, 23, 32, 21, 32 - - } ; - -static yyconst flex_int16_t yy_accept[142] = - { 0, - 1, 1, 1, 2, 4, 7, 9, 12, 15, 18, - 20, 23, 26, 29, 31, 34, 37, 40, 43, 46, - 49, 52, 55, 58, 61, 64, 67, 70, 73, 76, - 79, 80, 81, 82, 82, 83, 85, 87, 88, 90, - 90, 91, 93, 96, 97, 98, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 115, 117, 119, 121, 122, 123, 124, 124, - 125, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 145, 145, 145, 145, 145, 146, 147, 149, - - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 163, 164, 165, 166, 167, 169, 170, 171, 173, - 175, 176, 177, 179, 180, 182, 183, 183, 184, 186, - 188, 190, 191, 192, 192, 193, 195, 196, 198, 200, - 200 - } ; - -static yyconst flex_int32_t yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 5, 1, 6, 7, 1, 1, 1, 1, 8, - 8, 1, 9, 10, 11, 12, 13, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 1, 15, 16, - 1, 1, 1, 1, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 8, 8, 26, 27, 28, 29, 30, - 8, 31, 32, 33, 34, 8, 35, 8, 36, 8, - 37, 1, 38, 1, 8, 1, 39, 40, 41, 42, - - 43, 44, 45, 46, 47, 8, 8, 48, 49, 50, - 51, 52, 8, 53, 54, 55, 56, 8, 57, 8, - 58, 8, 59, 1, 60, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1 - } ; - -static yyconst flex_int32_t yy_meta[61] = - { 0, - 1, 2, 3, 1, 2, 1, 1, 4, 1, 2, - 4, 4, 1, 4, 2, 1, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 1, 1 - } ; - -static yyconst flex_int16_t yy_base[151] = - { 0, - 0, 0, 336, 370, 370, 0, 370, 0, 0, 49, - 370, 53, 320, 290, 64, 370, 370, 31, 32, 48, - 42, 44, 53, 60, 63, 54, 370, 370, 370, 370, - 0, 0, 0, 248, 104, 0, 86, 215, 110, 121, - 0, 135, 146, 0, 116, 157, 171, 54, 56, 100, - 99, 107, 114, 118, 117, 122, 129, 139, 144, 145, - 146, 0, 0, 182, 190, 193, 207, 228, 202, 0, - 201, 239, 0, 0, 212, 220, 167, 176, 174, 194, - 217, 214, 229, 219, 227, 224, 226, 241, 240, 240, - 252, 175, 196, 206, 177, 274, 370, 228, 0, 0, - - 240, 243, 251, 239, 242, 247, 263, 259, 259, 263, - 0, 165, 294, 296, 311, 0, 272, 281, 0, 0, - 295, 295, 0, 302, 0, 300, 319, 300, 0, 0, - 0, 294, 308, 124, 333, 0, 310, 0, 0, 370, - 354, 358, 130, 129, 361, 125, 97, 365, 92, 83 - } ; - -static yyconst flex_int16_t yy_def[151] = - { 0, - 140, 1, 140, 140, 140, 141, 140, 142, 143, 140, - 140, 144, 140, 140, 145, 140, 140, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 140, 140, 140, 140, - 141, 142, 143, 140, 140, 146, 147, 143, 144, 140, - 148, 140, 140, 149, 150, 140, 145, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 146, 146, 147, 147, 143, 143, 140, 140, 148, - 140, 140, 149, 149, 150, 150, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 140, 140, 140, 140, 140, 140, 143, 143, 143, - - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 140, 140, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 140, 143, 143, 143, - 143, 143, 143, 140, 140, 143, 143, 143, 143, 0, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140 - } ; - -static yyconst flex_int16_t yy_nxt[431] = - { 0, - 4, 5, 6, 5, 5, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 9, 22, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 23, 24, 25, 26, 9, 27, 28, 18, 19, - 20, 21, 9, 22, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 23, 24, 25, 26, 9, 29, 30, - 34, 48, 35, 37, 38, 42, 39, 49, 43, 54, - 52, 50, 55, 42, 45, 46, 53, 47, 42, 51, - 58, 59, 61, 48, 77, 56, 74, 57, 78, 49, - 60, 54, 52, 50, 55, 73, 64, 62, 53, 65, - - 63, 51, 58, 59, 61, 42, 77, 56, 43, 57, - 78, 42, 60, 42, 43, 46, 79, 35, 42, 42, - 37, 67, 68, 39, 42, 68, 75, 73, 62, 76, - 68, 80, 36, 33, 40, 68, 42, 135, 79, 42, - 81, 69, 82, 71, 42, 71, 83, 42, 72, 42, - 43, 84, 85, 80, 71, 42, 71, 86, 68, 72, - 42, 68, 81, 69, 82, 87, 68, 88, 83, 89, - 40, 68, 42, 84, 85, 43, 90, 69, 113, 86, - 42, 45, 46, 98, 47, 42, 93, 87, 94, 88, - 96, 89, 64, 62, 68, 65, 99, 68, 90, 69, - - 64, 62, 68, 65, 100, 98, 66, 68, 68, 114, - 95, 68, 95, 91, 72, 96, 68, 115, 99, 94, - 66, 68, 75, 73, 101, 76, 100, 91, 66, 68, - 75, 73, 68, 76, 102, 91, 92, 68, 92, 93, - 42, 94, 68, 42, 103, 104, 101, 105, 42, 91, - 97, 106, 72, 42, 107, 108, 102, 109, 110, 111, - 95, 40, 112, 116, 117, 113, 103, 104, 118, 105, - 119, 120, 121, 106, 122, 68, 107, 108, 68, 109, - 110, 111, 123, 68, 124, 116, 117, 96, 68, 125, - 118, 126, 119, 120, 121, 68, 122, 68, 68, 128, - - 68, 129, 41, 68, 123, 68, 124, 113, 68, 114, - 68, 125, 68, 126, 130, 68, 127, 131, 132, 133, - 68, 128, 136, 129, 114, 68, 137, 134, 138, 134, - 139, 127, 135, 40, 68, 140, 130, 68, 127, 131, - 132, 133, 68, 140, 136, 140, 135, 68, 137, 140, - 138, 140, 139, 127, 31, 31, 140, 31, 32, 32, - 140, 32, 44, 140, 44, 70, 70, 140, 70, 3, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140 - } ; - -static yyconst flex_int16_t yy_chk[431] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 10, 18, 10, 12, 12, 15, 12, 19, 15, 22, - 21, 20, 23, 15, 15, 15, 21, 15, 15, 20, - 24, 25, 26, 18, 48, 23, 150, 23, 49, 19, - 25, 22, 21, 20, 23, 149, 37, 37, 21, 37, - - 147, 20, 24, 25, 26, 35, 48, 23, 35, 23, - 49, 39, 25, 35, 39, 35, 50, 35, 35, 39, - 39, 39, 40, 39, 39, 40, 45, 45, 146, 45, - 40, 51, 144, 143, 40, 40, 42, 134, 50, 42, - 52, 40, 53, 42, 42, 42, 54, 43, 42, 42, - 43, 55, 56, 51, 43, 43, 43, 57, 46, 43, - 43, 46, 52, 40, 53, 58, 46, 59, 54, 60, - 46, 46, 47, 55, 56, 47, 61, 46, 112, 57, - 47, 47, 47, 77, 47, 47, 92, 58, 92, 59, - 95, 60, 64, 64, 66, 64, 78, 66, 61, 46, - - 65, 65, 66, 65, 79, 77, 66, 66, 67, 93, - 69, 67, 69, 66, 71, 69, 67, 94, 78, 94, - 67, 67, 75, 75, 80, 75, 79, 67, 38, 68, - 76, 76, 68, 76, 81, 66, 68, 68, 68, 68, - 72, 68, 68, 72, 82, 83, 80, 84, 72, 67, - 72, 85, 72, 72, 86, 87, 81, 88, 89, 90, - 91, 34, 91, 98, 101, 91, 82, 83, 102, 84, - 103, 104, 105, 85, 106, 96, 86, 87, 96, 88, - 89, 90, 107, 96, 108, 98, 101, 96, 96, 109, - 102, 110, 103, 104, 105, 113, 106, 114, 113, 117, - - 114, 118, 14, 113, 107, 114, 108, 113, 113, 114, - 114, 109, 115, 110, 121, 115, 114, 122, 124, 126, - 115, 117, 128, 118, 115, 115, 132, 127, 133, 127, - 137, 115, 127, 13, 135, 3, 121, 135, 114, 122, - 124, 126, 135, 0, 128, 0, 135, 135, 132, 0, - 133, 0, 137, 115, 141, 141, 0, 141, 142, 142, - 0, 142, 145, 0, 145, 148, 148, 0, 148, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140 - } ; - -extern int xyy_flex_debug; -int xyy_flex_debug = 0; - -static yy_state_type *yy_state_buf=0, *yy_state_ptr=0; -static char *yy_full_match; -static int yy_lp; -static int yy_looking_for_trail_begin = 0; -static int yy_full_lp; -static int *yy_full_state; -#define YY_TRAILING_MASK 0x2000 -#define YY_TRAILING_HEAD_MASK 0x4000 -#define REJECT \ -{ \ -*yy_cp = (yy_hold_char); /* undo effects of setting up xyytext */ \ -yy_cp = (yy_full_match); /* restore poss. backed-over text */ \ -(yy_lp) = (yy_full_lp); /* restore orig. accepting pos. */ \ -(yy_state_ptr) = (yy_full_state); /* restore orig. state */ \ -yy_current_state = *(yy_state_ptr); /* restore curr. state */ \ -++(yy_lp); \ -goto find_rule; \ -} - -#define yymore() yymore_used_but_not_detected -#define YY_MORE_ADJ 0 -#define YY_RESTORE_YY_MORE_OFFSET -char *xyytext; -#line 1 "xLexer.lxx" -/* -// Filename: xLexer.lxx -// Created by: drose (03Oct04) -// -//////////////////////////////////////////////////////////////////// -*/ -#line 9 "xLexer.lxx" -#include "xLexerDefs.h" -#include "xParserDefs.h" -#include "xParser.h" -#include "indent.h" -#include "string_utils.h" -#include "config_xfile.h" - -static int yyinput(void); // declared by flex. -extern "C" int xyywrap(); - -//////////////////////////////////////////////////////////////////// -// Static variables -//////////////////////////////////////////////////////////////////// - -// We'll increment line_number and col_number as we parse the file, so -// that we can report the position of an error. -int x_line_number = 0; -int x_col_number = 0; - -// current_line holds as much of the current line as will fit. Its -// only purpose is for printing it out to report an error to the user. -static const int max_error_width = 1024; -char x_current_line[max_error_width + 1]; - -static int error_count = 0; -static int warning_count = 0; - -// This is the pointer to the current input stream. -static istream *inp = NULL; - -// This is the name of the x file we're parsing. We keep it so we -// can print it out for error messages. -static string x_filename; - - -//////////////////////////////////////////////////////////////////// -// Defining the interface to the lexer. -//////////////////////////////////////////////////////////////////// - -void -x_init_lexer(istream &in, const string &filename) { - inp = ∈ - x_filename = filename; - x_line_number = 0; - x_col_number = 0; - error_count = 0; - warning_count = 0; -} - -int -x_error_count() { - return error_count; -} - -int -x_warning_count() { - return warning_count; -} - - -//////////////////////////////////////////////////////////////////// -// Internal support functions. -//////////////////////////////////////////////////////////////////// - -int -xyywrap(void) { - return 1; -} - -void -xyyerror(const string &msg) { - xyyerror(msg, x_line_number, x_col_number, x_current_line); -} - -void -xyyerror(const string &msg, int line_number, int col_number, - const string ¤t_line) { - xfile_cat.error(false) << "\nError"; - if (!x_filename.empty()) { - xfile_cat.error(false) << " in " << x_filename; - } - xfile_cat.error(false) - << " at line " << line_number << ", column " << col_number << ":\n" - << current_line << "\n"; - indent(xfile_cat.error(false), col_number-1) - << "^\n" << msg << "\n\n"; - - error_count++; -} - -void -xyywarning(const string &msg) { - xfile_cat.warning(false) << "\nWarning"; - if (!x_filename.empty()) { - xfile_cat.warning(false) << " in " << x_filename; - } - xfile_cat.warning(false) - << " at line " << x_line_number << ", column " << x_col_number << ":\n" - << x_current_line << "\n"; - indent(xfile_cat.warning(false), x_col_number-1) - << "^\n" << msg << "\n\n"; - - warning_count++; -} - -// Now define a function to take input from an istream instead of a -// stdio FILE pointer. This is flex-specific. -static void -input_chars(char *buffer, int &result, int max_size) { - nassertv(inp != NULL); - if (*inp) { - inp->read(buffer, max_size); - result = inp->gcount(); - if (result >= 0 && result < max_size) { - // Truncate at the end of the read. - buffer[result] = '\0'; - } - - if (x_line_number == 0) { - // This is a special case. If we are reading the very first bit - // from the stream, copy it into the x_current_line array. This - // is because the \n.* rule below, which fills x_current_line - // normally, doesn't catch the first line. - strncpy(x_current_line, xyytext, max_error_width); - x_current_line[max_error_width] = '\0'; - x_line_number++; - x_col_number = 0; - - // Truncate it at the newline. - char *end = strchr(x_current_line, '\n'); - if (end != NULL) { - *end = '\0'; - } - } - - } else { - // End of file or I/O error. - result = 0; - } -} -#undef YY_INPUT -#define YY_INPUT(buffer, result, max_size) input_chars(buffer, result, max_size) - -// read_char reads and returns a single character, incrementing the -// supplied line and column numbers as appropriate. A convenience -// function for the scanning functions below. -static int -read_char(int &line, int &col) { - int c = yyinput(); - if (c == '\n') { - line++; - col = 0; - } else { - col++; - } - return c; -} - -// scan_quoted_string reads a string delimited by quotation marks and -// returns it. -static string -scan_quoted_string(char quote_mark) { - string result; - - // We don't touch the current line number and column number during - // scanning, so that if we detect an error while scanning the string - // (e.g. an unterminated string), we'll report the error as - // occurring at the start of the string, not at the end--somewhat - // more convenient for the user. - - // Instead of adjusting the global x_line_number and x_col_number - // variables, we'll operate on our own local variables for the - // interim. - int line = x_line_number; - int col = x_col_number; - - int c; - c = read_char(line, col); - while (c != quote_mark && c != EOF) { - // A newline is not allowed within a string unless it is escaped. - if (c == '\n') { - c = EOF; - break; - - } else if (c == '\\') { - // Backslash escapes the following character. We also respect - // some C conventions. - c = read_char(line, col); - switch (c) { - case 'a': - result += '\a'; - c = read_char(line, col); - break; - - case 'n': - result += '\n'; - c = read_char(line, col); - break; - - case 'r': - result += '\r'; - c = read_char(line, col); - break; - - case 't': - result += '\t'; - c = read_char(line, col); - break; - - case 'x': - { - int hex = 0; - c = read_char(line, col); - for (int i = 0; i < 2 && isxdigit(c); i++) { - hex = hex * 16 + (isdigit(c) ? c - '0' : tolower(c) - 'a' + 10); - c = read_char(line, col); - } - - result += hex; - } - break; - - case '0': - { - int oct = 0; - c = read_char(line, col); - for (int i = 0; i < 3 && (c >= '0' && c < '7'); i++) { - oct = oct * 8 + (c - '0'); - c = read_char(line, col); - } - - result += oct; - } - break; - - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - int dec = 0; - c = read_char(line, col); - for (int i = 0; i < 3 && isdigit(c); i++) { - dec = dec * 10 + (c - '0'); - c = read_char(line, col); - } - - result += dec; - } - break; - - case EOF: - break; - - default: - result += c; - c = read_char(line, col); - } - - } else { - result += c; - c = read_char(line, col); - } - } - - if (c == EOF) { - xyyerror("This quotation mark is unterminated."); - } - - x_line_number = line; - x_col_number = col; - - return result; -} - -// scan_guid_string reads a string of hexadecimal digits delimited by -// angle brackets and returns the corresponding string. -static string -scan_guid_string() { - // We don't touch the current line number and column number during - // scanning, so that if we detect an error while scanning the string - // (e.g. an unterminated string), we'll report the error as - // occurring at the start of the string, not at the end--somewhat - // more convenient for the user. - - // Instead of adjusting the global x_line_number and x_col_number - // variables, we'll operate on our own local variables for the - // interim. - int line = x_line_number; - int col = x_col_number; - - int num_digits = 0; - int num_hyphens = 0; - - string result; - - int c; - c = read_char(line, col); - while (c != '>' && c != EOF) { - if (isxdigit(c)) { - num_digits++; - - } else if (c == '-') { - num_hyphens++; - - } else { - x_line_number = line; - x_col_number = col; - xyyerror("Invalid character in GUID."); - return string(); - } - - result += c; - - c = read_char(line, col); - } - - if (c == EOF) { - xyyerror("This GUID string is unterminated."); - return string(); - - } else if (num_digits != 32) { - xyyerror("Incorrect number of hex digits in GUID."); - return string(); - - } else if (num_hyphens != 4) { - xyyerror("Incorrect number of hyphens in GUID."); - return string(); - } - - x_line_number = line; - x_col_number = col; - - return result; -} - -// Parses the text into a list of integers and returns them. -static PTA_int -scan_int_list(const string &text) { - PTA_int result; - - vector_string words; - tokenize(text, words, ",;"); - - vector_string::const_iterator wi; - for (wi = words.begin(); wi != words.end(); ++wi) { - string trimmed = trim(*wi); - if (!trimmed.empty()) { - int number = 0; - string_to_int(trimmed, number); - result.push_back(number); - } - } - - return result; -} - -// Parses the text into a list of doubles and returns them. -static PTA_double -scan_double_list(const string &text) { - PTA_double result; - - vector_string words; - tokenize(text, words, ",;"); - - vector_string::const_iterator wi; - for (wi = words.begin(); wi != words.end(); ++wi) { - string trimmed = trim(*wi); - if (!trimmed.empty()) { - double number = 0.0; - string_to_double(trimmed, number); - result.push_back(number); - } - } - - return result; -} - - - -// accept() is called below as each piece is pulled off and -// accepted by the lexer; it increments the current column number. -inline void accept() { - x_col_number += xyyleng; -} - -#line 1045 "lex.yy.c" - -#define INITIAL 0 - -#ifndef YY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -#endif - -#ifndef YY_EXTRA_TYPE -#define YY_EXTRA_TYPE void * -#endif - -static int yy_init_globals (void ); - -/* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - -int xyylex_destroy (void ); - -int xyyget_debug (void ); - -void xyyset_debug (int debug_flag ); - -YY_EXTRA_TYPE xyyget_extra (void ); - -void xyyset_extra (YY_EXTRA_TYPE user_defined ); - -FILE *xyyget_in (void ); - -void xyyset_in (FILE * in_str ); - -FILE *xyyget_out (void ); - -void xyyset_out (FILE * out_str ); - -int xyyget_leng (void ); - -char *xyyget_text (void ); - -int xyyget_lineno (void ); - -void xyyset_lineno (int line_number ); - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int xyywrap (void ); -#else -extern int xyywrap (void ); -#endif -#endif - - static void yyunput (int c,char *buf_ptr ); - -#ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int ); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * ); -#endif - -#ifndef YY_NO_INPUT - -#ifdef __cplusplus -static int yyinput (void ); -#else -static int input (void ); -#endif - -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Copy whatever the last rule matched to the standard output. */ -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO fwrite( xyytext, xyyleng, 1, xyyout ) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ - { \ - int c = '*'; \ - unsigned n; \ - for ( n = 0; n < max_size && \ - (c = getc( xyyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( xyyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else \ - { \ - errno=0; \ - while ( (result = fread(buf, 1, max_size, xyyin))==0 && ferror(xyyin)) \ - { \ - if( errno != EINTR) \ - { \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - break; \ - } \ - errno=0; \ - clearerr(xyyin); \ - } \ - }\ -\ - -#endif - -/* No semi-colon after return; correct usage is to write "yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef yyterminate -#define yyterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) -#endif - -/* end tables serialization structures and prototypes */ - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL_IS_OURS 1 - -extern int xyylex (void); - -#define YY_DECL int xyylex (void) -#endif /* !YY_DECL */ - -/* Code executed at the beginning of each rule, after xyytext and xyyleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK break; -#endif - -#define YY_RULE_SETUP \ - YY_USER_ACTION - -/** The main scanner function which does all the work. - */ -YY_DECL -{ - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; - -#line 407 "xLexer.lxx" - - - - - -#line 1233 "lex.yy.c" - - if ( !(yy_init) ) - { - (yy_init) = 1; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - /* Create the reject buffer large enough to save one state per allowed character. */ - if ( ! (yy_state_buf) ) - (yy_state_buf) = (yy_state_type *)xyyalloc(YY_STATE_BUF_SIZE ); - if ( ! (yy_state_buf) ) - YY_FATAL_ERROR( "out of dynamic memory in xyylex()" ); - - if ( ! (yy_start) ) - (yy_start) = 1; /* first start state */ - - if ( ! xyyin ) - xyyin = stdin; - - if ( ! xyyout ) - xyyout = stdout; - - if ( ! YY_CURRENT_BUFFER ) { - xyyensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - xyy_create_buffer(xyyin,YY_BUF_SIZE ); - } - - xyy_load_buffer_state( ); - } - - while ( 1 ) /* loops until end-of-file is reached */ - { - yy_cp = (yy_c_buf_p); - - /* Support of xyytext. */ - *yy_cp = (yy_hold_char); - - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - - yy_current_state = (yy_start); - - (yy_state_ptr) = (yy_state_buf); - *(yy_state_ptr)++ = yy_current_state; - -yy_match: - do - { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 141 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - *(yy_state_ptr)++ = yy_current_state; - ++yy_cp; - } - while ( yy_base[yy_current_state] != 370 ); - -yy_find_action: - yy_current_state = *--(yy_state_ptr); - (yy_lp) = yy_accept[yy_current_state]; -find_rule: /* we branch to this label when backing up */ - for ( ; ; ) /* until we find what rule we matched */ - { - if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] ) - { - yy_act = yy_acclist[(yy_lp)]; - if ( yy_act & YY_TRAILING_HEAD_MASK || - (yy_looking_for_trail_begin) ) - { - if ( yy_act == (yy_looking_for_trail_begin) ) - { - (yy_looking_for_trail_begin) = 0; - yy_act &= ~YY_TRAILING_HEAD_MASK; - break; - } - } - else if ( yy_act & YY_TRAILING_MASK ) - { - (yy_looking_for_trail_begin) = yy_act & ~YY_TRAILING_MASK; - (yy_looking_for_trail_begin) |= YY_TRAILING_HEAD_MASK; - } - else - { - (yy_full_match) = yy_cp; - (yy_full_state) = (yy_state_ptr); - (yy_full_lp) = (yy_lp); - break; - } - ++(yy_lp); - goto find_rule; - } - --yy_cp; - yy_current_state = *--(yy_state_ptr); - (yy_lp) = yy_accept[yy_current_state]; - } - - YY_DO_BEFORE_ACTION; - -do_action: /* This label is used only to access EOF actions. */ - - switch ( yy_act ) - { /* beginning of action switch */ -case 1: -/* rule 1 can match eol */ -YY_RULE_SETUP -#line 412 "xLexer.lxx" -{ - // New line. Save a copy of the line so we can print it out for the - // benefit of the user in case we get an error. - - strncpy(x_current_line, xyytext+1, max_error_width); - x_current_line[max_error_width] = '\0'; - x_line_number++; - x_col_number=0; - - // Return the whole line to the lexer, except the newline character, - // which we eat. - yyless(1); -} - YY_BREAK -case 2: -YY_RULE_SETUP -#line 426 "xLexer.lxx" -{ - // Eat whitespace. - accept(); -} - YY_BREAK -case 3: -YY_RULE_SETUP -#line 431 "xLexer.lxx" -{ - // Eat C++-style comments. - accept(); -} - YY_BREAK -case 4: -YY_RULE_SETUP -#line 436 "xLexer.lxx" -{ - // Eat sh-style comments. - accept(); -} - YY_BREAK -case 5: -YY_RULE_SETUP -#line 441 "xLexer.lxx" -{ - accept(); - return TOKEN_OBRACE; -} - YY_BREAK -case 6: -YY_RULE_SETUP -#line 446 "xLexer.lxx" -{ - accept(); - return TOKEN_CBRACE; -} - YY_BREAK -case 7: -YY_RULE_SETUP -#line 451 "xLexer.lxx" -{ - accept(); - return TOKEN_OBRACKET; -} - YY_BREAK -case 8: -YY_RULE_SETUP -#line 456 "xLexer.lxx" -{ - accept(); - return TOKEN_CBRACKET; -} - YY_BREAK -case 9: -YY_RULE_SETUP -#line 461 "xLexer.lxx" -{ - accept(); - return TOKEN_DOT; -} - YY_BREAK -case 10: -YY_RULE_SETUP -#line 466 "xLexer.lxx" -{ - accept(); - return TOKEN_COMMA; -} - YY_BREAK -case 11: -YY_RULE_SETUP -#line 471 "xLexer.lxx" -{ - accept(); - return TOKEN_SEMICOLON; -} - YY_BREAK -case 12: -YY_RULE_SETUP -#line 476 "xLexer.lxx" -{ - accept(); - return TOKEN_ARRAY; -} - YY_BREAK -case 13: -YY_RULE_SETUP -#line 481 "xLexer.lxx" -{ - accept(); - return TOKEN_UCHAR; -} - YY_BREAK -case 14: -YY_RULE_SETUP -#line 486 "xLexer.lxx" -{ - accept(); - return TOKEN_CHAR; -} - YY_BREAK -case 15: -YY_RULE_SETUP -#line 491 "xLexer.lxx" -{ - accept(); - return TOKEN_CSTRING; -} - YY_BREAK -case 16: -YY_RULE_SETUP -#line 496 "xLexer.lxx" -{ - accept(); - return TOKEN_DOUBLE; -} - YY_BREAK -case 17: -YY_RULE_SETUP -#line 501 "xLexer.lxx" -{ - accept(); - return TOKEN_DWORD; -} - YY_BREAK -case 18: -YY_RULE_SETUP -#line 506 "xLexer.lxx" -{ - accept(); - return TOKEN_SDWORD; -} - YY_BREAK -case 19: -YY_RULE_SETUP -#line 511 "xLexer.lxx" -{ - accept(); - return TOKEN_FLOAT; -} - YY_BREAK -case 20: -YY_RULE_SETUP -#line 516 "xLexer.lxx" -{ - accept(); - return TOKEN_LPSTR; -} - YY_BREAK -case 21: -YY_RULE_SETUP -#line 521 "xLexer.lxx" -{ - accept(); - return TOKEN_TEMPLATE; -} - YY_BREAK -case 22: -YY_RULE_SETUP -#line 526 "xLexer.lxx" -{ - accept(); - return TOKEN_UCHAR; -} - YY_BREAK -case 23: -YY_RULE_SETUP -#line 531 "xLexer.lxx" -{ - accept(); - return TOKEN_UNICODE; -} - YY_BREAK -case 24: -YY_RULE_SETUP -#line 536 "xLexer.lxx" -{ - accept(); - return TOKEN_SWORD; -} - YY_BREAK -case 25: -YY_RULE_SETUP -#line 541 "xLexer.lxx" -{ - accept(); - return TOKEN_WORD; -} - YY_BREAK -case 26: -YY_RULE_SETUP -#line 546 "xLexer.lxx" -{ - // A signed or unsigned integer number. - accept(); - xyylval.u.number = atol(xyytext); - xyylval.str = trim_right(xyytext); - - return TOKEN_INTEGER; -} - YY_BREAK -case 27: -YY_RULE_SETUP -#line 555 "xLexer.lxx" -{ - // An integer as part of a semicolon- or comma-delimited list. - accept(); - xyylval.int_list = scan_int_list(xyytext); - - return TOKEN_INTEGER_LIST; -} - YY_BREAK -case 28: -YY_RULE_SETUP -#line 563 "xLexer.lxx" -{ - // This rule is used to match an integer list that is followed by a - // floating-point number. It's designed to prevent "0;0.5" from - // being interpreted as "0;0" followed by ".5". - accept(); - xyylval.int_list = scan_int_list(xyytext); - - return TOKEN_INTEGER_LIST; -} - YY_BREAK -case 29: -YY_RULE_SETUP -#line 573 "xLexer.lxx" -{ - // A floating-point number as part of a semicolon- or comma-delimited list. - accept(); - xyylval.double_list = scan_double_list(xyytext); - - return TOKEN_REALNUM_LIST; -} - YY_BREAK -case 30: -YY_RULE_SETUP -#line 581 "xLexer.lxx" -{ - // Quoted string. - accept(); - xyylval.str = scan_quoted_string('"'); - return TOKEN_STRING; -} - YY_BREAK -case 31: -YY_RULE_SETUP -#line 588 "xLexer.lxx" -{ - // Long GUID string. - accept(); - xyylval.str = scan_guid_string(); - - if (!xyylval.guid.parse_string(xyylval.str)) { - xyyerror("Malformed GUID."); - } - - return TOKEN_GUID; -} - YY_BREAK -case 32: -YY_RULE_SETUP -#line 600 "xLexer.lxx" -{ - // Identifier. - accept(); - xyylval.str = xyytext; - return TOKEN_NAME; -} - YY_BREAK -case 33: -YY_RULE_SETUP -#line 607 "xLexer.lxx" -{ - // Identifier with leading digit. - accept(); - xyylval.str = xyytext; - return TOKEN_NAME; -} - YY_BREAK -case 34: -YY_RULE_SETUP -#line 614 "xLexer.lxx" -{ - // Any other character is invalid. - accept(); - xyyerror("Invalid character '" + string(xyytext) + "'."); -} - YY_BREAK -case 35: -YY_RULE_SETUP -#line 619 "xLexer.lxx" -ECHO; - YY_BREAK -#line 1661 "lex.yy.c" - case YY_STATE_EOF(INITIAL): - yyterminate(); - - case YY_END_OF_BUFFER: - { - /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = (yy_hold_char); - YY_RESTORE_YY_MORE_OFFSET - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed xyyin at a new source and called - * xyylex(). If so, then we have to assure - * consistency between YY_CURRENT_BUFFER and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - YY_CURRENT_BUFFER_LVALUE->yy_input_file = xyyin; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; - } - - /* Note that here we test for yy_c_buf_p "<=" to the position - * of the first EOB in the buffer, since yy_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) - { /* This was really a NUL. */ - yy_state_type yy_next_state; - - (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( ); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * yy_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - yy_next_state = yy_try_NUL_trans( yy_current_state ); - - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - - if ( yy_next_state ) - { - /* Consume the NUL. */ - yy_cp = ++(yy_c_buf_p); - yy_current_state = yy_next_state; - goto yy_match; - } - - else - { - yy_cp = (yy_c_buf_p); - goto yy_find_action; - } - } - - else switch ( yy_get_next_buffer( ) ) - { - case EOB_ACT_END_OF_FILE: - { - (yy_did_buffer_switch_on_eof) = 0; - - if ( xyywrap( ) ) - { - /* Note: because we've taken care in - * yy_get_next_buffer() to have set up - * xyytext, we can now set up - * yy_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; - - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! (yy_did_buffer_switch_on_eof) ) - YY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - (yy_c_buf_p) = - (yytext_ptr) + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( ); - - yy_cp = (yy_c_buf_p); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - goto yy_match; - - case EOB_ACT_LAST_MATCH: - (yy_c_buf_p) = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; - - yy_current_state = yy_get_previous_state( ); - - yy_cp = (yy_c_buf_p); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - goto yy_find_action; - } - break; - } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ -} /* end of xyylex */ - -/* yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ -static int yy_get_next_buffer (void) -{ - register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - register char *source = (yytext_ptr); - register int number_to_move, i; - int ret_val; - - if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) - { - /* We matched a single character, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } - } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; - - else - { - int num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ - - YY_FATAL_ERROR( -"input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); - - } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - (yy_n_chars), (size_t) num_to_read ); - - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - if ( (yy_n_chars) == 0 ) - { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - xyyrestart(xyyin ); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = - YY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { - /* Extend the array by 50%, plus the number we really need. */ - yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) xyyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); - if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); - } - - (yy_n_chars) += number_to_move; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; - - (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; - - return ret_val; -} - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - - static yy_state_type yy_get_previous_state (void) -{ - register yy_state_type yy_current_state; - register char *yy_cp; - - yy_current_state = (yy_start); - - (yy_state_ptr) = (yy_state_buf); - *(yy_state_ptr)++ = yy_current_state; - - for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) - { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 141 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - *(yy_state_ptr)++ = yy_current_state; - } - - return yy_current_state; -} - -/* yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = yy_try_NUL_trans( current_state ); - */ - static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) -{ - register int yy_is_jam; - - register YY_CHAR yy_c = 1; - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 141 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 140); - if ( ! yy_is_jam ) - *(yy_state_ptr)++ = yy_current_state; - - return yy_is_jam ? 0 : yy_current_state; -} - - static void yyunput (int c, register char * yy_bp ) -{ - register char *yy_cp; - - yy_cp = (yy_c_buf_p); - - /* undo effects of setting up xyytext */ - *yy_cp = (yy_hold_char); - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - { /* need to shift things up to make room */ - /* +2 for EOB chars. */ - register int number_to_move = (yy_n_chars) + 2; - register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ - YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; - register char *source = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; - - while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - *--dest = *--source; - - yy_cp += (int) (dest - source); - yy_bp += (int) (dest - source); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - YY_FATAL_ERROR( "flex scanner push-back overflow" ); - } - - *--yy_cp = (char) c; - - (yytext_ptr) = yy_bp; - (yy_hold_char) = *yy_cp; - (yy_c_buf_p) = yy_cp; -} - -#ifndef YY_NO_INPUT -#ifdef __cplusplus - static int yyinput (void) -#else - static int input (void) -#endif - -{ - int c; - - *(yy_c_buf_p) = (yy_hold_char); - - if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) - { - /* yy_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) - /* This was really a NUL. */ - *(yy_c_buf_p) = '\0'; - - else - { /* need more input */ - int offset = (yy_c_buf_p) - (yytext_ptr); - ++(yy_c_buf_p); - - switch ( yy_get_next_buffer( ) ) - { - case EOB_ACT_LAST_MATCH: - /* This happens because yy_g_n_b() - * sees that we've accumulated a - * token and flags that we need to - * try matching the token before - * proceeding. But for input(), - * there's no matching to consider. - * So convert the EOB_ACT_LAST_MATCH - * to EOB_ACT_END_OF_FILE. - */ - - /* Reset buffer status. */ - xyyrestart(xyyin ); - - /*FALLTHROUGH*/ - - case EOB_ACT_END_OF_FILE: - { - if ( xyywrap( ) ) - return EOF; - - if ( ! (yy_did_buffer_switch_on_eof) ) - YY_NEW_FILE; -#ifdef __cplusplus - return yyinput(); -#else - return input(); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - (yy_c_buf_p) = (yytext_ptr) + offset; - break; - } - } - } - - c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ - *(yy_c_buf_p) = '\0'; /* preserve xyytext */ - (yy_hold_char) = *++(yy_c_buf_p); - - return c; -} -#endif /* ifndef YY_NO_INPUT */ - -/** Immediately switch to a different input stream. - * @param input_file A readable stream. - * - * @note This function does not reset the start condition to @c INITIAL . - */ - void xyyrestart (FILE * input_file ) -{ - - if ( ! YY_CURRENT_BUFFER ){ - xyyensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - xyy_create_buffer(xyyin,YY_BUF_SIZE ); - } - - xyy_init_buffer(YY_CURRENT_BUFFER,input_file ); - xyy_load_buffer_state( ); -} - -/** Switch to a different input buffer. - * @param new_buffer The new input buffer. - * - */ - void xyy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) -{ - - /* TODO. We should be able to replace this entire function body - * with - * xyypop_buffer_state(); - * xyypush_buffer_state(new_buffer); - */ - xyyensure_buffer_stack (); - if ( YY_CURRENT_BUFFER == new_buffer ) - return; - - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(yy_c_buf_p) = (yy_hold_char); - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - YY_CURRENT_BUFFER_LVALUE = new_buffer; - xyy_load_buffer_state( ); - - /* We don't actually know whether we did this switch during - * EOF (xyywrap()) processing, but the only time this flag - * is looked at is after xyywrap() is called, so it's safe - * to go ahead and always set it. - */ - (yy_did_buffer_switch_on_eof) = 1; -} - -static void xyy_load_buffer_state (void) -{ - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; - xyyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; - (yy_hold_char) = *(yy_c_buf_p); -} - -/** Allocate and initialize an input buffer state. - * @param file A readable stream. - * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. - * - * @return the allocated buffer state. - */ - YY_BUFFER_STATE xyy_create_buffer (FILE * file, int size ) -{ - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) xyyalloc(sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in xyy_create_buffer()" ); - - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->yy_ch_buf = (char *) xyyalloc(b->yy_buf_size + 2 ); - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in xyy_create_buffer()" ); - - b->yy_is_our_buffer = 1; - - xyy_init_buffer(b,file ); - - return b; -} - -/** Destroy the buffer. - * @param b a buffer created with xyy_create_buffer() - * - */ - void xyy_delete_buffer (YY_BUFFER_STATE b ) -{ - - if ( ! b ) - return; - - if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ - YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; - - if ( b->yy_is_our_buffer ) - xyyfree((void *) b->yy_ch_buf ); - - xyyfree((void *) b ); -} - -#ifndef __cplusplus -extern int isatty (int ); -#endif /* __cplusplus */ - -/* Initializes or reinitializes a buffer. - * This function is sometimes called more than once on the same buffer, - * such as during a xyyrestart() or at EOF. - */ - static void xyy_init_buffer (YY_BUFFER_STATE b, FILE * file ) - -{ - int oerrno = errno; - - xyy_flush_buffer(b ); - - b->yy_input_file = file; - b->yy_fill_buffer = 1; - - /* If b is the current buffer, then xyy_init_buffer was _probably_ - * called from xyyrestart() or through yy_get_next_buffer. - * In that case, we don't want to reset the lineno or column. - */ - if (b != YY_CURRENT_BUFFER){ - b->yy_bs_lineno = 1; - b->yy_bs_column = 0; - } - - b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; - - errno = oerrno; -} - -/** Discard all buffered characters. On the next scan, YY_INPUT will be called. - * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. - * - */ - void xyy_flush_buffer (YY_BUFFER_STATE b ) -{ - if ( ! b ) - return; - - b->yy_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->yy_buf_pos = &b->yy_ch_buf[0]; - - b->yy_at_bol = 1; - b->yy_buffer_status = YY_BUFFER_NEW; - - if ( b == YY_CURRENT_BUFFER ) - xyy_load_buffer_state( ); -} - -/** Pushes the new state onto the stack. The new state becomes - * the current state. This function will allocate the stack - * if necessary. - * @param new_buffer The new state. - * - */ -void xyypush_buffer_state (YY_BUFFER_STATE new_buffer ) -{ - if (new_buffer == NULL) - return; - - xyyensure_buffer_stack(); - - /* This block is copied from xyy_switch_to_buffer. */ - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(yy_c_buf_p) = (yy_hold_char); - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - /* Only push if top exists. Otherwise, replace top. */ - if (YY_CURRENT_BUFFER) - (yy_buffer_stack_top)++; - YY_CURRENT_BUFFER_LVALUE = new_buffer; - - /* copied from xyy_switch_to_buffer. */ - xyy_load_buffer_state( ); - (yy_did_buffer_switch_on_eof) = 1; -} - -/** Removes and deletes the top of the stack, if present. - * The next element becomes the new top. - * - */ -void xyypop_buffer_state (void) -{ - if (!YY_CURRENT_BUFFER) - return; - - xyy_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - if ((yy_buffer_stack_top) > 0) - --(yy_buffer_stack_top); - - if (YY_CURRENT_BUFFER) { - xyy_load_buffer_state( ); - (yy_did_buffer_switch_on_eof) = 1; - } -} - -/* Allocates the stack if it does not exist. - * Guarantees space for at least one push. - */ -static void xyyensure_buffer_stack (void) -{ - int num_to_alloc; - - if (!(yy_buffer_stack)) { - - /* First allocation is just for 2 elements, since we don't know if this - * scanner will even need a stack. We use 2 instead of 1 to avoid an - * immediate realloc on the next call. - */ - num_to_alloc = 1; - (yy_buffer_stack) = (struct yy_buffer_state**)xyyalloc - (num_to_alloc * sizeof(struct yy_buffer_state*) - ); - if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in xyyensure_buffer_stack()" ); - - memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - - (yy_buffer_stack_max) = num_to_alloc; - (yy_buffer_stack_top) = 0; - return; - } - - if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ - - /* Increase the buffer to prepare for a possible push. */ - int grow_size = 8 /* arbitrary grow size */; - - num_to_alloc = (yy_buffer_stack_max) + grow_size; - (yy_buffer_stack) = (struct yy_buffer_state**)xyyrealloc - ((yy_buffer_stack), - num_to_alloc * sizeof(struct yy_buffer_state*) - ); - if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in xyyensure_buffer_stack()" ); - - /* zero only the new slots.*/ - memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); - (yy_buffer_stack_max) = num_to_alloc; - } -} - -/** Setup the input buffer state to scan directly from a user-specified character buffer. - * @param base the character buffer - * @param size the size in bytes of the character buffer - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE xyy_scan_buffer (char * base, yy_size_t size ) -{ - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return 0; - - b = (YY_BUFFER_STATE) xyyalloc(sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in xyy_scan_buffer()" ); - - b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ - b->yy_buf_pos = b->yy_ch_buf = base; - b->yy_is_our_buffer = 0; - b->yy_input_file = 0; - b->yy_n_chars = b->yy_buf_size; - b->yy_is_interactive = 0; - b->yy_at_bol = 1; - b->yy_fill_buffer = 0; - b->yy_buffer_status = YY_BUFFER_NEW; - - xyy_switch_to_buffer(b ); - - return b; -} - -/** Setup the input buffer state to scan a string. The next call to xyylex() will - * scan from a @e copy of @a str. - * @param yystr a NUL-terminated string to scan - * - * @return the newly allocated buffer state object. - * @note If you want to scan bytes that may contain NUL values, then use - * xyy_scan_bytes() instead. - */ -YY_BUFFER_STATE xyy_scan_string (yyconst char * yystr ) -{ - - return xyy_scan_bytes(yystr,strlen(yystr) ); -} - -/** Setup the input buffer state to scan the given bytes. The next call to xyylex() will - * scan from a @e copy of @a bytes. - * @param bytes the byte buffer to scan - * @param len the number of bytes in the buffer pointed to by @a bytes. - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE xyy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) -{ - YY_BUFFER_STATE b; - char *buf; - yy_size_t n; - int i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = _yybytes_len + 2; - buf = (char *) xyyalloc(n ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in xyy_scan_bytes()" ); - - for ( i = 0; i < _yybytes_len; ++i ) - buf[i] = yybytes[i]; - - buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - - b = xyy_scan_buffer(buf,n ); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in xyy_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->yy_is_our_buffer = 1; - - return b; -} - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -static void yy_fatal_error (yyconst char* msg ) -{ - (void) fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); -} - -/* Redefine yyless() so it works in section 3 code. */ - -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up xyytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - xyytext[xyyleng] = (yy_hold_char); \ - (yy_c_buf_p) = xyytext + yyless_macro_arg; \ - (yy_hold_char) = *(yy_c_buf_p); \ - *(yy_c_buf_p) = '\0'; \ - xyyleng = yyless_macro_arg; \ - } \ - while ( 0 ) - -/* Accessor methods (get/set functions) to struct members. */ - -/** Get the current line number. - * - */ -int xyyget_lineno (void) -{ - - return xyylineno; -} - -/** Get the input stream. - * - */ -FILE *xyyget_in (void) -{ - return xyyin; -} - -/** Get the output stream. - * - */ -FILE *xyyget_out (void) -{ - return xyyout; -} - -/** Get the length of the current token. - * - */ -int xyyget_leng (void) -{ - return xyyleng; -} - -/** Get the current token. - * - */ - -char *xyyget_text (void) -{ - return xyytext; -} - -/** Set the current line number. - * @param line_number - * - */ -void xyyset_lineno (int line_number ) -{ - - xyylineno = line_number; -} - -/** Set the input stream. This does not discard the current - * input buffer. - * @param in_str A readable stream. - * - * @see xyy_switch_to_buffer - */ -void xyyset_in (FILE * in_str ) -{ - xyyin = in_str ; -} - -void xyyset_out (FILE * out_str ) -{ - xyyout = out_str ; -} - -int xyyget_debug (void) -{ - return xyy_flex_debug; -} - -void xyyset_debug (int bdebug ) -{ - xyy_flex_debug = bdebug ; -} - -static int yy_init_globals (void) -{ - /* Initialization is the same as for the non-reentrant scanner. - * This function is called from xyylex_destroy(), so don't allocate here. - */ - - (yy_buffer_stack) = 0; - (yy_buffer_stack_top) = 0; - (yy_buffer_stack_max) = 0; - (yy_c_buf_p) = (char *) 0; - (yy_init) = 0; - (yy_start) = 0; - - (yy_state_buf) = 0; - (yy_state_ptr) = 0; - (yy_full_match) = 0; - (yy_lp) = 0; - -/* Defined in main.c */ -#ifdef YY_STDINIT - xyyin = stdin; - xyyout = stdout; -#else - xyyin = (FILE *) 0; - xyyout = (FILE *) 0; -#endif - - /* For future reference: Set errno on error, since we are called by - * xyylex_init() - */ - return 0; -} - -/* xyylex_destroy is for both reentrant and non-reentrant scanners. */ -int xyylex_destroy (void) -{ - - /* Pop the buffer stack, destroying each element. */ - while(YY_CURRENT_BUFFER){ - xyy_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - xyypop_buffer_state(); - } - - /* Destroy the stack itself. */ - xyyfree((yy_buffer_stack) ); - (yy_buffer_stack) = NULL; - - xyyfree ( (yy_state_buf) ); - (yy_state_buf) = NULL; - - /* Reset the globals. This is important in a non-reentrant scanner so the next time - * xyylex() is called, initialization will occur. */ - yy_init_globals( ); - - return 0; -} - -/* - * Internal utility routines. - */ - -#ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) -{ - register int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; -} -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * s ) -{ - register int n; - for ( n = 0; s[n]; ++n ) - ; - - return n; -} -#endif - -void *xyyalloc (yy_size_t size ) -{ - return (void *) malloc( size ); -} - -void *xyyrealloc (void * ptr, yy_size_t size ) -{ - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return (void *) realloc( (char *) ptr, size ); -} - -void xyyfree (void * ptr ) -{ - free( (char *) ptr ); /* see xyyrealloc() for (char *) cast */ -} - -#define YYTABLES_NAME "yytables" - -#line 619 "xLexer.lxx" +#line 2 "lex.yy.c" + +#line 4 "lex.yy.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define yy_create_buffer xyy_create_buffer +#define yy_delete_buffer xyy_delete_buffer +#define yy_flex_debug xyy_flex_debug +#define yy_init_buffer xyy_init_buffer +#define yy_flush_buffer xyy_flush_buffer +#define yy_load_buffer_state xyy_load_buffer_state +#define yy_switch_to_buffer xyy_switch_to_buffer +#define yyin xyyin +#define yyleng xyyleng +#define yylex xyylex +#define yylineno xyylineno +#define yyout xyyout +#define yyrestart xyyrestart +#define yytext xyytext +#define yywrap xyywrap +#define yyalloc xyyalloc +#define yyrealloc xyyrealloc +#define yyfree xyyfree + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 35 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE xyyrestart(xyyin ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +extern int xyyleng; + +extern FILE *xyyin, *xyyout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up xyytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up xyytext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, (yytext_ptr) ) + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via xyyrestart()), so that the user can continue scanning by + * just pointing xyyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when xyytext is formed. */ +static char yy_hold_char; +static int yy_n_chars; /* number of characters read into yy_ch_buf */ +int xyyleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = (char *) 0; +static int yy_init = 0; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow xyywrap()'s to do buffer switches + * instead of setting up a fresh xyyin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void xyyrestart (FILE *input_file ); +void xyy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE xyy_create_buffer (FILE *file,int size ); +void xyy_delete_buffer (YY_BUFFER_STATE b ); +void xyy_flush_buffer (YY_BUFFER_STATE b ); +void xyypush_buffer_state (YY_BUFFER_STATE new_buffer ); +void xyypop_buffer_state (void ); + +static void xyyensure_buffer_stack (void ); +static void xyy_load_buffer_state (void ); +static void xyy_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER xyy_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE xyy_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE xyy_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE xyy_scan_bytes (yyconst char *bytes,int len ); + +void *xyyalloc (yy_size_t ); +void *xyyrealloc (void *,yy_size_t ); +void xyyfree (void * ); + +#define yy_new_buffer xyy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + xyyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + xyy_create_buffer(xyyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + xyyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + xyy_create_buffer(xyyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +typedef unsigned char YY_CHAR; + +FILE *xyyin = (FILE *) 0, *xyyout = (FILE *) 0; + +typedef int yy_state_type; + +extern int xyylineno; + +int xyylineno = 1; + +extern char *xyytext; +#define yytext_ptr xyytext + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (yyconst char msg[] ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up xyytext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + xyyleng = (size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 35 +#define YY_END_OF_BUFFER 36 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_acclist[200] = + { 0, + 36, 34, 35, 2, 34, 35, 1, 35, 30, 34, + 35, 4, 34, 35, 32, 34, 35, 34, 35, 10, + 34, 35, 32, 34, 35, 9, 34, 35, 34, 35, + 26, 34, 35, 11, 34, 35, 31, 34, 35, 32, + 34, 35, 32, 34, 35, 32, 34, 35, 32, 34, + 35, 32, 34, 35, 32, 34, 35, 32, 34, 35, + 32, 34, 35, 32, 34, 35, 7, 34, 35, 8, + 34, 35, 5, 34, 35, 6, 34, 35, 1, 4, + 32, 26, 32, 33, 32, 33, 32, 26, 32, 3, + 27,16412, 26, 27,16412, 33, 33, 26, 32, 32, + + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 33, 32, 33, 32, 33, 32, 33, + 32, 32, 29, 3, 27, 33, 33, 33, 33, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 8220, 32, 13, 32, 14, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 25, 32, 32, 32, 29, 29, 12, 32, 32, 32, + 17, 32, 19, 32, 32, 32, 24, 32, 32, 22, + 32, 32, 32, 16, 32, 18, 32, 20, 32, 32, + 32, 29, 15, 32, 32, 23, 32, 21, 32 + + } ; + +static yyconst flex_int16_t yy_accept[142] = + { 0, + 1, 1, 1, 2, 4, 7, 9, 12, 15, 18, + 20, 23, 26, 29, 31, 34, 37, 40, 43, 46, + 49, 52, 55, 58, 61, 64, 67, 70, 73, 76, + 79, 80, 81, 82, 82, 83, 85, 87, 88, 90, + 90, 91, 93, 96, 97, 98, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 115, 117, 119, 121, 122, 123, 124, 124, + 125, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 145, 145, 145, 145, 145, 146, 147, 149, + + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 163, 164, 165, 166, 167, 169, 170, 171, 173, + 175, 176, 177, 179, 180, 182, 183, 183, 184, 186, + 188, 190, 191, 192, 192, 193, 195, 196, 198, 200, + 200 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 5, 1, 6, 7, 1, 1, 1, 1, 8, + 8, 1, 9, 10, 11, 12, 13, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 1, 15, 16, + 1, 1, 1, 1, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 8, 8, 26, 27, 28, 29, 30, + 8, 31, 32, 33, 34, 8, 35, 8, 36, 8, + 37, 1, 38, 1, 8, 1, 39, 40, 41, 42, + + 43, 44, 45, 46, 47, 8, 8, 48, 49, 50, + 51, 52, 8, 53, 54, 55, 56, 8, 57, 8, + 58, 8, 59, 1, 60, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[61] = + { 0, + 1, 2, 3, 1, 2, 1, 1, 4, 1, 2, + 4, 4, 1, 4, 2, 1, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 1, 1 + } ; + +static yyconst flex_int16_t yy_base[151] = + { 0, + 0, 0, 336, 370, 370, 0, 370, 0, 0, 49, + 370, 53, 320, 290, 64, 370, 370, 31, 32, 48, + 42, 44, 53, 60, 63, 54, 370, 370, 370, 370, + 0, 0, 0, 248, 104, 0, 86, 215, 110, 121, + 0, 135, 146, 0, 116, 157, 171, 54, 56, 100, + 99, 107, 114, 118, 117, 122, 129, 139, 144, 145, + 146, 0, 0, 182, 190, 193, 207, 228, 202, 0, + 201, 239, 0, 0, 212, 220, 167, 176, 174, 194, + 217, 214, 229, 219, 227, 224, 226, 241, 240, 240, + 252, 175, 196, 206, 177, 274, 370, 228, 0, 0, + + 240, 243, 251, 239, 242, 247, 263, 259, 259, 263, + 0, 165, 294, 296, 311, 0, 272, 281, 0, 0, + 295, 295, 0, 302, 0, 300, 319, 300, 0, 0, + 0, 294, 308, 124, 333, 0, 310, 0, 0, 370, + 354, 358, 130, 129, 361, 125, 97, 365, 92, 83 + } ; + +static yyconst flex_int16_t yy_def[151] = + { 0, + 140, 1, 140, 140, 140, 141, 140, 142, 143, 140, + 140, 144, 140, 140, 145, 140, 140, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 140, 140, 140, 140, + 141, 142, 143, 140, 140, 146, 147, 143, 144, 140, + 148, 140, 140, 149, 150, 140, 145, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 146, 146, 147, 147, 143, 143, 140, 140, 148, + 140, 140, 149, 149, 150, 150, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 140, 140, 140, 140, 140, 140, 143, 143, 143, + + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 140, 140, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 140, 143, 143, 143, + 143, 143, 143, 140, 140, 143, 143, 143, 143, 0, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140 + } ; + +static yyconst flex_int16_t yy_nxt[431] = + { 0, + 4, 5, 6, 5, 5, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 9, 22, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 23, 24, 25, 26, 9, 27, 28, 18, 19, + 20, 21, 9, 22, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 23, 24, 25, 26, 9, 29, 30, + 34, 48, 35, 37, 38, 42, 39, 49, 43, 54, + 52, 50, 55, 42, 45, 46, 53, 47, 42, 51, + 58, 59, 61, 48, 77, 56, 74, 57, 78, 49, + 60, 54, 52, 50, 55, 73, 64, 62, 53, 65, + + 63, 51, 58, 59, 61, 42, 77, 56, 43, 57, + 78, 42, 60, 42, 43, 46, 79, 35, 42, 42, + 37, 67, 68, 39, 42, 68, 75, 73, 62, 76, + 68, 80, 36, 33, 40, 68, 42, 135, 79, 42, + 81, 69, 82, 71, 42, 71, 83, 42, 72, 42, + 43, 84, 85, 80, 71, 42, 71, 86, 68, 72, + 42, 68, 81, 69, 82, 87, 68, 88, 83, 89, + 40, 68, 42, 84, 85, 43, 90, 69, 113, 86, + 42, 45, 46, 98, 47, 42, 93, 87, 94, 88, + 96, 89, 64, 62, 68, 65, 99, 68, 90, 69, + + 64, 62, 68, 65, 100, 98, 66, 68, 68, 114, + 95, 68, 95, 91, 72, 96, 68, 115, 99, 94, + 66, 68, 75, 73, 101, 76, 100, 91, 66, 68, + 75, 73, 68, 76, 102, 91, 92, 68, 92, 93, + 42, 94, 68, 42, 103, 104, 101, 105, 42, 91, + 97, 106, 72, 42, 107, 108, 102, 109, 110, 111, + 95, 40, 112, 116, 117, 113, 103, 104, 118, 105, + 119, 120, 121, 106, 122, 68, 107, 108, 68, 109, + 110, 111, 123, 68, 124, 116, 117, 96, 68, 125, + 118, 126, 119, 120, 121, 68, 122, 68, 68, 128, + + 68, 129, 41, 68, 123, 68, 124, 113, 68, 114, + 68, 125, 68, 126, 130, 68, 127, 131, 132, 133, + 68, 128, 136, 129, 114, 68, 137, 134, 138, 134, + 139, 127, 135, 40, 68, 140, 130, 68, 127, 131, + 132, 133, 68, 140, 136, 140, 135, 68, 137, 140, + 138, 140, 139, 127, 31, 31, 140, 31, 32, 32, + 140, 32, 44, 140, 44, 70, 70, 140, 70, 3, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140 + } ; + +static yyconst flex_int16_t yy_chk[431] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 10, 18, 10, 12, 12, 15, 12, 19, 15, 22, + 21, 20, 23, 15, 15, 15, 21, 15, 15, 20, + 24, 25, 26, 18, 48, 23, 150, 23, 49, 19, + 25, 22, 21, 20, 23, 149, 37, 37, 21, 37, + + 147, 20, 24, 25, 26, 35, 48, 23, 35, 23, + 49, 39, 25, 35, 39, 35, 50, 35, 35, 39, + 39, 39, 40, 39, 39, 40, 45, 45, 146, 45, + 40, 51, 144, 143, 40, 40, 42, 134, 50, 42, + 52, 40, 53, 42, 42, 42, 54, 43, 42, 42, + 43, 55, 56, 51, 43, 43, 43, 57, 46, 43, + 43, 46, 52, 40, 53, 58, 46, 59, 54, 60, + 46, 46, 47, 55, 56, 47, 61, 46, 112, 57, + 47, 47, 47, 77, 47, 47, 92, 58, 92, 59, + 95, 60, 64, 64, 66, 64, 78, 66, 61, 46, + + 65, 65, 66, 65, 79, 77, 66, 66, 67, 93, + 69, 67, 69, 66, 71, 69, 67, 94, 78, 94, + 67, 67, 75, 75, 80, 75, 79, 67, 38, 68, + 76, 76, 68, 76, 81, 66, 68, 68, 68, 68, + 72, 68, 68, 72, 82, 83, 80, 84, 72, 67, + 72, 85, 72, 72, 86, 87, 81, 88, 89, 90, + 91, 34, 91, 98, 101, 91, 82, 83, 102, 84, + 103, 104, 105, 85, 106, 96, 86, 87, 96, 88, + 89, 90, 107, 96, 108, 98, 101, 96, 96, 109, + 102, 110, 103, 104, 105, 113, 106, 114, 113, 117, + + 114, 118, 14, 113, 107, 114, 108, 113, 113, 114, + 114, 109, 115, 110, 121, 115, 114, 122, 124, 126, + 115, 117, 128, 118, 115, 115, 132, 127, 133, 127, + 137, 115, 127, 13, 135, 3, 121, 135, 114, 122, + 124, 126, 135, 0, 128, 0, 135, 135, 132, 0, + 133, 0, 137, 115, 141, 141, 0, 141, 142, 142, + 0, 142, 145, 0, 145, 148, 148, 0, 148, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140 + } ; + +extern int xyy_flex_debug; +int xyy_flex_debug = 0; + +static yy_state_type *yy_state_buf=0, *yy_state_ptr=0; +static char *yy_full_match; +static int yy_lp; +static int yy_looking_for_trail_begin = 0; +static int yy_full_lp; +static int *yy_full_state; +#define YY_TRAILING_MASK 0x2000 +#define YY_TRAILING_HEAD_MASK 0x4000 +#define REJECT \ +{ \ +*yy_cp = (yy_hold_char); /* undo effects of setting up xyytext */ \ +yy_cp = (yy_full_match); /* restore poss. backed-over text */ \ +(yy_lp) = (yy_full_lp); /* restore orig. accepting pos. */ \ +(yy_state_ptr) = (yy_full_state); /* restore orig. state */ \ +yy_current_state = *(yy_state_ptr); /* restore curr. state */ \ +++(yy_lp); \ +goto find_rule; \ +} + +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *xyytext; +#line 1 "xLexer.lxx" +/* +// Filename: xLexer.lxx +// Created by: drose (03Oct04) +// +//////////////////////////////////////////////////////////////////// +*/ +#line 9 "xLexer.lxx" +#include "xLexerDefs.h" +#include "xParserDefs.h" +#include "xParser.h" +#include "indent.h" +#include "string_utils.h" +#include "config_xfile.h" + +static int yyinput(void); // declared by flex. +extern "C" int xyywrap(); + +//////////////////////////////////////////////////////////////////// +// Static variables +//////////////////////////////////////////////////////////////////// + +// We'll increment line_number and col_number as we parse the file, so +// that we can report the position of an error. +int x_line_number = 0; +int x_col_number = 0; + +// current_line holds as much of the current line as will fit. Its +// only purpose is for printing it out to report an error to the user. +static const int max_error_width = 1024; +char x_current_line[max_error_width + 1]; + +static int error_count = 0; +static int warning_count = 0; + +// This is the pointer to the current input stream. +static istream *input_p = NULL; + +// This is the name of the x file we're parsing. We keep it so we +// can print it out for error messages. +static string x_filename; + + +//////////////////////////////////////////////////////////////////// +// Defining the interface to the lexer. +//////////////////////////////////////////////////////////////////// + +void +x_init_lexer(istream &in, const string &filename) { + input_p = ∈ + x_filename = filename; + x_line_number = 0; + x_col_number = 0; + error_count = 0; + warning_count = 0; +} + +int +x_error_count() { + return error_count; +} + +int +x_warning_count() { + return warning_count; +} + + +//////////////////////////////////////////////////////////////////// +// Internal support functions. +//////////////////////////////////////////////////////////////////// + +int +xyywrap(void) { + return 1; +} + +void +xyyerror(const string &msg) { + xyyerror(msg, x_line_number, x_col_number, x_current_line); +} + +void +xyyerror(const string &msg, int line_number, int col_number, + const string ¤t_line) { + xfile_cat.error(false) << "\nError"; + if (!x_filename.empty()) { + xfile_cat.error(false) << " in " << x_filename; + } + xfile_cat.error(false) + << " at line " << line_number << ", column " << col_number << ":\n" + << current_line << "\n"; + indent(xfile_cat.error(false), col_number-1) + << "^\n" << msg << "\n\n"; + + error_count++; +} + +void +xyywarning(const string &msg) { + xfile_cat.warning(false) << "\nWarning"; + if (!x_filename.empty()) { + xfile_cat.warning(false) << " in " << x_filename; + } + xfile_cat.warning(false) + << " at line " << x_line_number << ", column " << x_col_number << ":\n" + << x_current_line << "\n"; + indent(xfile_cat.warning(false), x_col_number-1) + << "^\n" << msg << "\n\n"; + + warning_count++; +} + +// Now define a function to take input from an istream instead of a +// stdio FILE pointer. This is flex-specific. +static void +input_chars(char *buffer, int &result, int max_size) { + nassertv(input_p != NULL); + if (*input_p) { + input_p->read(buffer, max_size); + result = input_p->gcount(); + if (result >= 0 && result < max_size) { + // Truncate at the end of the read. + buffer[result] = '\0'; + } + + if (x_line_number == 0) { + // This is a special case. If we are reading the very first bit + // from the stream, copy it into the x_current_line array. This + // is because the \n.* rule below, which fills x_current_line + // normally, doesn't catch the first line. + strncpy(x_current_line, xyytext, max_error_width); + x_current_line[max_error_width] = '\0'; + x_line_number++; + x_col_number = 0; + + // Truncate it at the newline. + char *end = strchr(x_current_line, '\n'); + if (end != NULL) { + *end = '\0'; + } + } + + } else { + // End of file or I/O error. + result = 0; + } +} +#undef YY_INPUT + +// Define this macro carefully, since different flex versions call it +// with a different type for result. +#define YY_INPUT(buffer, result, max_size) { \ + int int_result; \ + input_chars((buffer), int_result, (max_size)); \ + (result) = int_result; \ +} + +// read_char reads and returns a single character, incrementing the +// supplied line and column numbers as appropriate. A convenience +// function for the scanning functions below. +static int +read_char(int &line, int &col) { + int c = yyinput(); + if (c == '\n') { + line++; + col = 0; + } else { + col++; + } + return c; +} + +// scan_quoted_string reads a string delimited by quotation marks and +// returns it. +static string +scan_quoted_string(char quote_mark) { + string result; + + // We don't touch the current line number and column number during + // scanning, so that if we detect an error while scanning the string + // (e.g. an unterminated string), we'll report the error as + // occurring at the start of the string, not at the end--somewhat + // more convenient for the user. + + // Instead of adjusting the global x_line_number and x_col_number + // variables, we'll operate on our own local variables for the + // interim. + int line = x_line_number; + int col = x_col_number; + + int c; + c = read_char(line, col); + while (c != quote_mark && c != EOF) { + // A newline is not allowed within a string unless it is escaped. + if (c == '\n') { + c = EOF; + break; + + } else if (c == '\\') { + // Backslash escapes the following character. We also respect + // some C conventions. + c = read_char(line, col); + switch (c) { + case 'a': + result += '\a'; + c = read_char(line, col); + break; + + case 'n': + result += '\n'; + c = read_char(line, col); + break; + + case 'r': + result += '\r'; + c = read_char(line, col); + break; + + case 't': + result += '\t'; + c = read_char(line, col); + break; + + case 'x': + { + int hex = 0; + c = read_char(line, col); + for (int i = 0; i < 2 && isxdigit(c); i++) { + hex = hex * 16 + (isdigit(c) ? c - '0' : tolower(c) - 'a' + 10); + c = read_char(line, col); + } + + result += hex; + } + break; + + case '0': + { + int oct = 0; + c = read_char(line, col); + for (int i = 0; i < 3 && (c >= '0' && c < '7'); i++) { + oct = oct * 8 + (c - '0'); + c = read_char(line, col); + } + + result += oct; + } + break; + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + int dec = 0; + c = read_char(line, col); + for (int i = 0; i < 3 && isdigit(c); i++) { + dec = dec * 10 + (c - '0'); + c = read_char(line, col); + } + + result += dec; + } + break; + + case EOF: + break; + + default: + result += c; + c = read_char(line, col); + } + + } else { + result += c; + c = read_char(line, col); + } + } + + if (c == EOF) { + xyyerror("This quotation mark is unterminated."); + } + + x_line_number = line; + x_col_number = col; + + return result; +} + +// scan_guid_string reads a string of hexadecimal digits delimited by +// angle brackets and returns the corresponding string. +static string +scan_guid_string() { + // We don't touch the current line number and column number during + // scanning, so that if we detect an error while scanning the string + // (e.g. an unterminated string), we'll report the error as + // occurring at the start of the string, not at the end--somewhat + // more convenient for the user. + + // Instead of adjusting the global x_line_number and x_col_number + // variables, we'll operate on our own local variables for the + // interim. + int line = x_line_number; + int col = x_col_number; + + int num_digits = 0; + int num_hyphens = 0; + + string result; + + int c; + c = read_char(line, col); + while (c != '>' && c != EOF) { + if (isxdigit(c)) { + num_digits++; + + } else if (c == '-') { + num_hyphens++; + + } else { + x_line_number = line; + x_col_number = col; + xyyerror("Invalid character in GUID."); + return string(); + } + + result += c; + + c = read_char(line, col); + } + + if (c == EOF) { + xyyerror("This GUID string is unterminated."); + return string(); + + } else if (num_digits != 32) { + xyyerror("Incorrect number of hex digits in GUID."); + return string(); + + } else if (num_hyphens != 4) { + xyyerror("Incorrect number of hyphens in GUID."); + return string(); + } + + x_line_number = line; + x_col_number = col; + + return result; +} + +// Parses the text into a list of integers and returns them. +static PTA_int +scan_int_list(const string &text) { + PTA_int result; + + vector_string words; + tokenize(text, words, ",;"); + + vector_string::const_iterator wi; + for (wi = words.begin(); wi != words.end(); ++wi) { + string trimmed = trim(*wi); + if (!trimmed.empty()) { + int number = 0; + string_to_int(trimmed, number); + result.push_back(number); + } + } + + return result; +} + +// Parses the text into a list of doubles and returns them. +static PTA_double +scan_double_list(const string &text) { + PTA_double result; + + vector_string words; + tokenize(text, words, ",;"); + + vector_string::const_iterator wi; + for (wi = words.begin(); wi != words.end(); ++wi) { + string trimmed = trim(*wi); + if (!trimmed.empty()) { + double number = 0.0; + string_to_double(trimmed, number); + result.push_back(number); + } + } + + return result; +} + + + +// accept() is called below as each piece is pulled off and +// accepted by the lexer; it increments the current column number. +inline void accept() { + x_col_number += xyyleng; +} + +#line 1052 "lex.yy.c" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int xyylex_destroy (void ); + +int xyyget_debug (void ); + +void xyyset_debug (int debug_flag ); + +YY_EXTRA_TYPE xyyget_extra (void ); + +void xyyset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *xyyget_in (void ); + +void xyyset_in (FILE * in_str ); + +FILE *xyyget_out (void ); + +void xyyset_out (FILE * out_str ); + +int xyyget_leng (void ); + +char *xyyget_text (void ); + +int xyyget_lineno (void ); + +void xyyset_lineno (int line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int xyywrap (void ); +#else +extern int xyywrap (void ); +#endif +#endif + + static void yyunput (int c,char *buf_ptr ); + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO fwrite( xyytext, xyyleng, 1, xyyout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + int n; \ + for ( n = 0; n < max_size && \ + (c = getc( xyyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( xyyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, xyyin))==0 && ferror(xyyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(xyyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int xyylex (void); + +#define YY_DECL int xyylex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after xyytext and xyyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + +#line 414 "xLexer.lxx" + + + + + +#line 1240 "lex.yy.c" + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + /* Create the reject buffer large enough to save one state per allowed character. */ + if ( ! (yy_state_buf) ) + (yy_state_buf) = (yy_state_type *)xyyalloc(YY_STATE_BUF_SIZE ); + if ( ! (yy_state_buf) ) + YY_FATAL_ERROR( "out of dynamic memory in xyylex()" ); + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! xyyin ) + xyyin = stdin; + + if ( ! xyyout ) + xyyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + xyyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + xyy_create_buffer(xyyin,YY_BUF_SIZE ); + } + + xyy_load_buffer_state( ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of xyytext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); + + (yy_state_ptr) = (yy_state_buf); + *(yy_state_ptr)++ = yy_current_state; + +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 141 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + *(yy_state_ptr)++ = yy_current_state; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 370 ); + +yy_find_action: + yy_current_state = *--(yy_state_ptr); + (yy_lp) = yy_accept[yy_current_state]; +find_rule: /* we branch to this label when backing up */ + for ( ; ; ) /* until we find what rule we matched */ + { + if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] ) + { + yy_act = yy_acclist[(yy_lp)]; + if ( yy_act & YY_TRAILING_HEAD_MASK || + (yy_looking_for_trail_begin) ) + { + if ( yy_act == (yy_looking_for_trail_begin) ) + { + (yy_looking_for_trail_begin) = 0; + yy_act &= ~YY_TRAILING_HEAD_MASK; + break; + } + } + else if ( yy_act & YY_TRAILING_MASK ) + { + (yy_looking_for_trail_begin) = yy_act & ~YY_TRAILING_MASK; + (yy_looking_for_trail_begin) |= YY_TRAILING_HEAD_MASK; + } + else + { + (yy_full_match) = yy_cp; + (yy_full_state) = (yy_state_ptr); + (yy_full_lp) = (yy_lp); + break; + } + ++(yy_lp); + goto find_rule; + } + --yy_cp; + yy_current_state = *--(yy_state_ptr); + (yy_lp) = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ +case 1: +/* rule 1 can match eol */ +YY_RULE_SETUP +#line 419 "xLexer.lxx" +{ + // New line. Save a copy of the line so we can print it out for the + // benefit of the user in case we get an error. + + strncpy(x_current_line, xyytext+1, max_error_width); + x_current_line[max_error_width] = '\0'; + x_line_number++; + x_col_number=0; + + // Return the whole line to the lexer, except the newline character, + // which we eat. + yyless(1); +} + YY_BREAK +case 2: +YY_RULE_SETUP +#line 433 "xLexer.lxx" +{ + // Eat whitespace. + accept(); +} + YY_BREAK +case 3: +YY_RULE_SETUP +#line 438 "xLexer.lxx" +{ + // Eat C++-style comments. + accept(); +} + YY_BREAK +case 4: +YY_RULE_SETUP +#line 443 "xLexer.lxx" +{ + // Eat sh-style comments. + accept(); +} + YY_BREAK +case 5: +YY_RULE_SETUP +#line 448 "xLexer.lxx" +{ + accept(); + return TOKEN_OBRACE; +} + YY_BREAK +case 6: +YY_RULE_SETUP +#line 453 "xLexer.lxx" +{ + accept(); + return TOKEN_CBRACE; +} + YY_BREAK +case 7: +YY_RULE_SETUP +#line 458 "xLexer.lxx" +{ + accept(); + return TOKEN_OBRACKET; +} + YY_BREAK +case 8: +YY_RULE_SETUP +#line 463 "xLexer.lxx" +{ + accept(); + return TOKEN_CBRACKET; +} + YY_BREAK +case 9: +YY_RULE_SETUP +#line 468 "xLexer.lxx" +{ + accept(); + return TOKEN_DOT; +} + YY_BREAK +case 10: +YY_RULE_SETUP +#line 473 "xLexer.lxx" +{ + accept(); + return TOKEN_COMMA; +} + YY_BREAK +case 11: +YY_RULE_SETUP +#line 478 "xLexer.lxx" +{ + accept(); + return TOKEN_SEMICOLON; +} + YY_BREAK +case 12: +YY_RULE_SETUP +#line 483 "xLexer.lxx" +{ + accept(); + return TOKEN_ARRAY; +} + YY_BREAK +case 13: +YY_RULE_SETUP +#line 488 "xLexer.lxx" +{ + accept(); + return TOKEN_UCHAR; +} + YY_BREAK +case 14: +YY_RULE_SETUP +#line 493 "xLexer.lxx" +{ + accept(); + return TOKEN_CHAR; +} + YY_BREAK +case 15: +YY_RULE_SETUP +#line 498 "xLexer.lxx" +{ + accept(); + return TOKEN_CSTRING; +} + YY_BREAK +case 16: +YY_RULE_SETUP +#line 503 "xLexer.lxx" +{ + accept(); + return TOKEN_DOUBLE; +} + YY_BREAK +case 17: +YY_RULE_SETUP +#line 508 "xLexer.lxx" +{ + accept(); + return TOKEN_DWORD; +} + YY_BREAK +case 18: +YY_RULE_SETUP +#line 513 "xLexer.lxx" +{ + accept(); + return TOKEN_SDWORD; +} + YY_BREAK +case 19: +YY_RULE_SETUP +#line 518 "xLexer.lxx" +{ + accept(); + return TOKEN_FLOAT; +} + YY_BREAK +case 20: +YY_RULE_SETUP +#line 523 "xLexer.lxx" +{ + accept(); + return TOKEN_LPSTR; +} + YY_BREAK +case 21: +YY_RULE_SETUP +#line 528 "xLexer.lxx" +{ + accept(); + return TOKEN_TEMPLATE; +} + YY_BREAK +case 22: +YY_RULE_SETUP +#line 533 "xLexer.lxx" +{ + accept(); + return TOKEN_UCHAR; +} + YY_BREAK +case 23: +YY_RULE_SETUP +#line 538 "xLexer.lxx" +{ + accept(); + return TOKEN_UNICODE; +} + YY_BREAK +case 24: +YY_RULE_SETUP +#line 543 "xLexer.lxx" +{ + accept(); + return TOKEN_SWORD; +} + YY_BREAK +case 25: +YY_RULE_SETUP +#line 548 "xLexer.lxx" +{ + accept(); + return TOKEN_WORD; +} + YY_BREAK +case 26: +YY_RULE_SETUP +#line 553 "xLexer.lxx" +{ + // A signed or unsigned integer number. + accept(); + xyylval.u.number = atol(xyytext); + xyylval.str = trim_right(xyytext); + + return TOKEN_INTEGER; +} + YY_BREAK +case 27: +YY_RULE_SETUP +#line 562 "xLexer.lxx" +{ + // An integer as part of a semicolon- or comma-delimited list. + accept(); + xyylval.int_list = scan_int_list(xyytext); + + return TOKEN_INTEGER_LIST; +} + YY_BREAK +case 28: +YY_RULE_SETUP +#line 570 "xLexer.lxx" +{ + // This rule is used to match an integer list that is followed by a + // floating-point number. It's designed to prevent "0;0.5" from + // being interpreted as "0;0" followed by ".5". + accept(); + xyylval.int_list = scan_int_list(xyytext); + + return TOKEN_INTEGER_LIST; +} + YY_BREAK +case 29: +YY_RULE_SETUP +#line 580 "xLexer.lxx" +{ + // A floating-point number as part of a semicolon- or comma-delimited list. + accept(); + xyylval.double_list = scan_double_list(xyytext); + + return TOKEN_REALNUM_LIST; +} + YY_BREAK +case 30: +YY_RULE_SETUP +#line 588 "xLexer.lxx" +{ + // Quoted string. + accept(); + xyylval.str = scan_quoted_string('"'); + return TOKEN_STRING; +} + YY_BREAK +case 31: +YY_RULE_SETUP +#line 595 "xLexer.lxx" +{ + // Long GUID string. + accept(); + xyylval.str = scan_guid_string(); + + if (!xyylval.guid.parse_string(xyylval.str)) { + xyyerror("Malformed GUID."); + } + + return TOKEN_GUID; +} + YY_BREAK +case 32: +YY_RULE_SETUP +#line 607 "xLexer.lxx" +{ + // Identifier. + accept(); + xyylval.str = xyytext; + return TOKEN_NAME; +} + YY_BREAK +case 33: +YY_RULE_SETUP +#line 614 "xLexer.lxx" +{ + // Identifier with leading digit. + accept(); + xyylval.str = xyytext; + return TOKEN_NAME; +} + YY_BREAK +case 34: +YY_RULE_SETUP +#line 621 "xLexer.lxx" +{ + // Any other character is invalid. + accept(); + xyyerror("Invalid character '" + string(xyytext) + "'."); +} + YY_BREAK +case 35: +YY_RULE_SETUP +#line 626 "xLexer.lxx" +ECHO; + YY_BREAK +#line 1668 "lex.yy.c" + case YY_STATE_EOF(INITIAL): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed xyyin at a new source and called + * xyylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = xyyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_c_buf_p); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( xyywrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * xyytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of xyylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = (yytext_ptr); + register int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + YY_FATAL_ERROR( +"input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), (size_t) num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + xyyrestart(xyyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) xyyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + + yy_current_state = (yy_start); + + (yy_state_ptr) = (yy_state_buf); + *(yy_state_ptr)++ = yy_current_state; + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 141 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + *(yy_state_ptr)++ = yy_current_state; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + register int yy_is_jam; + + register YY_CHAR yy_c = 1; + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 141 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 140); + if ( ! yy_is_jam ) + *(yy_state_ptr)++ = yy_current_state; + + return yy_is_jam ? 0 : yy_current_state; +} + + static void yyunput (int c, register char * yy_bp ) +{ + register char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up xyytext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + register int number_to_move = (yy_n_chars) + 2; + register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + (yytext_ptr) = yy_bp; + (yy_hold_char) = *yy_cp; + (yy_c_buf_p) = yy_cp; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (yy_c_buf_p) - (yytext_ptr); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + xyyrestart(xyyin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( xyywrap( ) ) + return EOF; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve xyytext */ + (yy_hold_char) = *++(yy_c_buf_p); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void xyyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + xyyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + xyy_create_buffer(xyyin,YY_BUF_SIZE ); + } + + xyy_init_buffer(YY_CURRENT_BUFFER,input_file ); + xyy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void xyy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * xyypop_buffer_state(); + * xyypush_buffer_state(new_buffer); + */ + xyyensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + xyy_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (xyywrap()) processing, but the only time this flag + * is looked at is after xyywrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void xyy_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + xyyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE xyy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) xyyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in xyy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) xyyalloc(b->yy_buf_size + 2 ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in xyy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + xyy_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with xyy_create_buffer() + * + */ + void xyy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + xyyfree((void *) b->yy_ch_buf ); + + xyyfree((void *) b ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a xyyrestart() or at EOF. + */ + static void xyy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + xyy_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then xyy_init_buffer was _probably_ + * called from xyyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void xyy_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + xyy_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void xyypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + xyyensure_buffer_stack(); + + /* This block is copied from xyy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from xyy_switch_to_buffer. */ + xyy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void xyypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + xyy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + xyy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void xyyensure_buffer_stack (void) +{ + int num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)xyyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in xyyensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)xyyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in xyyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE xyy_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) xyyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in xyy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + xyy_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to xyylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * xyy_scan_bytes() instead. + */ +YY_BUFFER_STATE xyy_scan_string (yyconst char * yystr ) +{ + + return xyy_scan_bytes(yystr,strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to xyylex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE xyy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) xyyalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in xyy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = xyy_scan_buffer(buf,n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in xyy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up xyytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + xyytext[xyyleng] = (yy_hold_char); \ + (yy_c_buf_p) = xyytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + xyyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int xyyget_lineno (void) +{ + + return xyylineno; +} + +/** Get the input stream. + * + */ +FILE *xyyget_in (void) +{ + return xyyin; +} + +/** Get the output stream. + * + */ +FILE *xyyget_out (void) +{ + return xyyout; +} + +/** Get the length of the current token. + * + */ +int xyyget_leng (void) +{ + return xyyleng; +} + +/** Get the current token. + * + */ + +char *xyyget_text (void) +{ + return xyytext; +} + +/** Set the current line number. + * @param line_number + * + */ +void xyyset_lineno (int line_number ) +{ + + xyylineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see xyy_switch_to_buffer + */ +void xyyset_in (FILE * in_str ) +{ + xyyin = in_str ; +} + +void xyyset_out (FILE * out_str ) +{ + xyyout = out_str ; +} + +int xyyget_debug (void) +{ + return xyy_flex_debug; +} + +void xyyset_debug (int bdebug ) +{ + xyy_flex_debug = bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from xyylex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + + (yy_state_buf) = 0; + (yy_state_ptr) = 0; + (yy_full_match) = 0; + (yy_lp) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + xyyin = stdin; + xyyout = stdout; +#else + xyyin = (FILE *) 0; + xyyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * xyylex_init() + */ + return 0; +} + +/* xyylex_destroy is for both reentrant and non-reentrant scanners. */ +int xyylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + xyy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + xyypop_buffer_state(); + } + + /* Destroy the stack itself. */ + xyyfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + xyyfree ( (yy_state_buf) ); + (yy_state_buf) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * xyylex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *xyyalloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *xyyrealloc (void * ptr, yy_size_t size ) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void xyyfree (void * ptr ) +{ + free( (char *) ptr ); /* see xyyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 626 "xLexer.lxx" diff --git a/pandatool/src/xfile/xLexer.lxx b/pandatool/src/xfile/xLexer.lxx index b8658daa56..e3d72709b0 100644 --- a/pandatool/src/xfile/xLexer.lxx +++ b/pandatool/src/xfile/xLexer.lxx @@ -34,7 +34,7 @@ static int error_count = 0; static int warning_count = 0; // This is the pointer to the current input stream. -static istream *inp = NULL; +static istream *input_p = NULL; // This is the name of the x file we're parsing. We keep it so we // can print it out for error messages. @@ -47,7 +47,7 @@ static string x_filename; void x_init_lexer(istream &in, const string &filename) { - inp = ∈ + input_p = ∈ x_filename = filename; x_line_number = 0; x_col_number = 0; @@ -115,10 +115,10 @@ xyywarning(const string &msg) { // stdio FILE pointer. This is flex-specific. static void input_chars(char *buffer, int &result, int max_size) { - nassertv(inp != NULL); - if (*inp) { - inp->read(buffer, max_size); - result = inp->gcount(); + nassertv(input_p != NULL); + if (*input_p) { + input_p->read(buffer, max_size); + result = input_p->gcount(); if (result >= 0 && result < max_size) { // Truncate at the end of the read. buffer[result] = '\0'; diff --git a/pandatool/src/xfile/xParser.cxx.prebuilt b/pandatool/src/xfile/xParser.cxx.prebuilt index 58e962f50a..606ead1db3 100644 --- a/pandatool/src/xfile/xParser.cxx.prebuilt +++ b/pandatool/src/xfile/xParser.cxx.prebuilt @@ -1,24 +1,22 @@ -/* A Bison parser, made by GNU Bison 2.3. */ +/* A Bison parser, made by GNU Bison 2.4.2. */ /* Skeleton implementation for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify + + Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -29,7 +27,7 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ @@ -47,7 +45,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.3" +#define YYBISON_VERSION "2.4.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -55,17 +53,92 @@ /* Pure parsers. */ #define YYPURE 0 +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ -#define yyparse xyyparse -#define yylex xyylex -#define yyerror xyyerror -#define yylval xyylval -#define yychar xyychar -#define yydebug xyydebug -#define yynerrs xyynerrs +#define yyparse xyyparse +#define yylex xyylex +#define yyerror xyyerror +#define yylval xyylval +#define yychar xyychar +#define yydebug xyydebug +#define yynerrs xyynerrs + + +/* Copy the first part of user declarations. */ + +/* Line 189 of yacc.c */ +#line 12 "xParser.yxx" + +#include "xLexerDefs.h" +#include "xParserDefs.h" +#include "xFile.h" +#include "xFileTemplate.h" +#include "xFileDataDef.h" +#include "xFileArrayDef.h" +#include "xFileDataNodeTemplate.h" +#include "xFileDataNodeReference.h" +#include "pointerTo.h" +#include "dcast.h" + +// Because our token type contains objects of type string, which +// require correct copy construction (and not simply memcpying), we +// cannot use bison's built-in auto-stack-grow feature. As an easy +// solution, we ensure here that we have enough yacc stack to start +// with, and that it doesn't ever try to grow. +#define YYINITDEPTH 1000 +#define YYMAXDEPTH 1000 + +static XFile *x_file = (XFile *)NULL; +static XFileNode *current_node = (XFileNode *)NULL; +static PT(XFileDataDef) current_data_def = (XFileDataDef *)NULL; + +//////////////////////////////////////////////////////////////////// +// Defining the interface to the parser. +//////////////////////////////////////////////////////////////////// + +void +x_init_parser(istream &in, const string &filename, XFile &file) { + x_file = &file; + current_node = &file; + x_init_lexer(in, filename); +} + +void +x_cleanup_parser() { + x_file = (XFile *)NULL; + current_node = (XFileNode *)NULL; +} + + + +/* Line 189 of yacc.c */ +#line 124 "y.tab.c" + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif /* Tokens. */ @@ -143,83 +216,18 @@ -/* Copy the first part of user declarations. */ -#line 12 "xParser.yxx" - -#include "xLexerDefs.h" -#include "xParserDefs.h" -#include "xFile.h" -#include "xFileTemplate.h" -#include "xFileDataDef.h" -#include "xFileArrayDef.h" -#include "xFileDataNodeTemplate.h" -#include "xFileDataNodeReference.h" -#include "pointerTo.h" -#include "dcast.h" - -// Because our token type contains objects of type string, which -// require correct copy construction (and not simply memcpying), we -// cannot use bison's built-in auto-stack-grow feature. As an easy -// solution, we ensure here that we have enough yacc stack to start -// with, and that it doesn't ever try to grow. -#define YYINITDEPTH 1000 -#define YYMAXDEPTH 1000 - -static XFile *x_file = (XFile *)NULL; -static XFileNode *current_node = (XFileNode *)NULL; -static PT(XFileDataDef) current_data_def = (XFileDataDef *)NULL; - -//////////////////////////////////////////////////////////////////// -// Defining the interface to the parser. -//////////////////////////////////////////////////////////////////// - -void -x_init_parser(istream &in, const string &filename, XFile &file) { - x_file = &file; - current_node = &file; - x_init_lexer(in, filename); -} - -void -x_cleanup_parser() { - x_file = (XFile *)NULL; - current_node = (XFileNode *)NULL; -} - - - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 -#endif - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef int YYSTYPE; + # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 #endif - /* Copy the second part of user declarations. */ -/* Line 216 of yacc.c. */ -#line 223 "y.tab.c" +/* Line 264 of yacc.c */ +#line 231 "y.tab.c" #ifdef short # undef short @@ -269,7 +277,7 @@ typedef short int yytype_int16; #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ -# if YYENABLE_NLS +# if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) @@ -294,14 +302,14 @@ typedef short int yytype_int16; #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int -YYID (int i) +YYID (int yyi) #else static int -YYID (i) - int i; +YYID (yyi) + int yyi; #endif { - return i; + return yyi; } #endif @@ -382,9 +390,9 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss; - YYSTYPE yyvs; - }; + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; +}; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) @@ -418,12 +426,12 @@ union yyalloc elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack) \ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ @@ -716,9 +724,18 @@ static const yytype_uint8 yystos[] = /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ + Once GCC version 2 has supplanted version 1, this can go. However, + YYFAIL appears to be in use. Nevertheless, it is formally deprecated + in Bison 2.4.2's NEWS entry, where a plan to phase it out is + discussed. */ #define YYFAIL goto yyerrlab +#if defined YYFAIL + /* This is here to suppress warnings from the GCC cpp's + -Wunused-macros. Normally we don't worry about that warning, but + some users do, and we want to make it easy for users to remove + YYFAIL uses, which will produce warnings from Bison 2.5. */ +#endif #define YYRECOVERING() (!!yyerrstatus) @@ -775,7 +792,7 @@ while (YYID (0)) we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ @@ -886,17 +903,20 @@ yy_symbol_print (yyoutput, yytype, yyvaluep) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void -yy_stack_print (bottom, top) - yytype_int16 *bottom; - yytype_int16 *top; +yy_stack_print (yybottom, yytop) + yytype_int16 *yybottom; + yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); - for (; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } YYFPRINTF (stderr, "\n"); } @@ -930,11 +950,11 @@ yy_reduce_print (yyvsp, yyrule) /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { - fprintf (stderr, " $%d = ", yyi + 1); + YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) ); - fprintf (stderr, "\n"); + YYFPRINTF (stderr, "\n"); } } @@ -1214,10 +1234,8 @@ yydestruct (yymsg, yytype, yyvaluep) break; } } - /* Prevent warnings from -Wmissing-prototypes. */ - #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); @@ -1233,11 +1251,10 @@ int yyparse (); #endif /* ! YYPARSE_PARAM */ - -/* The look-ahead symbol. */ +/* The lookahead symbol. */ int yychar; -/* The semantic value of the look-ahead symbol. */ +/* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ @@ -1245,9 +1262,9 @@ int yynerrs; -/*----------. -| yyparse. | -`----------*/ +/*-------------------------. +| yyparse or yypush_parse. | +`-------------------------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ @@ -1271,14 +1288,39 @@ yyparse () #endif #endif { - - int yystate; + + + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + + /* The stacks and their tools: + `yyss': related to states. + `yyvs': related to semantic values. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; + + YYSIZE_T yystacksize; + int yyn; int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ - int yytoken = 0; + /* Lookahead token as an internal (translated) token number. */ + int yytoken; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; @@ -1286,51 +1328,28 @@ yyparse () YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss = yyssa; - yytype_int16 *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; - - - #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) - YYSIZE_T yystacksize = YYINITDEPTH; - - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - - /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; + yytoken = 0; + yyss = yyssa; + yyvs = yyvsa; + yystacksize = YYINITDEPTH; + YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ + yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ - yyssp = yyss; yyvsp = yyvs; @@ -1360,7 +1379,6 @@ yyparse () YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; - /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might @@ -1368,7 +1386,6 @@ yyparse () yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); yyss = yyss1; @@ -1391,9 +1408,8 @@ yyparse () (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); @@ -1404,7 +1420,6 @@ yyparse () yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); @@ -1414,6 +1429,9 @@ yyparse () YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + if (yystate == YYFINAL) + YYACCEPT; + goto yybackup; /*-----------. @@ -1422,16 +1440,16 @@ yyparse () yybackup: /* Do appropriate processing given the current state. Read a - look-ahead token if we need one and don't already have one. */ + lookahead token if we need one and don't already have one. */ - /* First try to decide what to do without reference to look-ahead token. */ + /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; - /* Not known => get a look-ahead token if don't already have one. */ + /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); @@ -1463,20 +1481,16 @@ yybackup: goto yyreduce; } - if (yyn == YYFINAL) - YYACCEPT; - /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; - /* Shift the look-ahead token. */ + /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - /* Discard the shifted token unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; + /* Discard the shifted token. */ + yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; @@ -1516,6 +1530,8 @@ yyreduce: switch (yyn) { case 6: + +/* Line 1464 of yacc.c */ #line 116 "xParser.yxx" { (yyval.u.node) = current_node; @@ -1526,6 +1542,8 @@ yyreduce: break; case 7: + +/* Line 1464 of yacc.c */ #line 123 "xParser.yxx" { (yyval.u.node) = current_node; @@ -1534,6 +1552,8 @@ yyreduce: break; case 12: + +/* Line 1464 of yacc.c */ #line 141 "xParser.yxx" { DCAST(XFileTemplate, current_node)->set_open(true); @@ -1541,6 +1561,8 @@ yyreduce: break; case 19: + +/* Line 1464 of yacc.c */ #line 160 "xParser.yxx" { current_data_def = new XFileDataDef(x_file, (yyvsp[(2) - (3)].str), (yyvsp[(1) - (3)].u.primitive_type)); @@ -1549,6 +1571,8 @@ yyreduce: break; case 21: + +/* Line 1464 of yacc.c */ #line 172 "xParser.yxx" { XFileTemplate *xtemplate = x_file->find_template((yyvsp[(1) - (3)].str)); @@ -1562,6 +1586,8 @@ yyreduce: break; case 22: + +/* Line 1464 of yacc.c */ #line 185 "xParser.yxx" { (yyval.u.primitive_type) = XFileDataDef::T_word; @@ -1569,6 +1595,8 @@ yyreduce: break; case 23: + +/* Line 1464 of yacc.c */ #line 189 "xParser.yxx" { (yyval.u.primitive_type) = XFileDataDef::T_dword; @@ -1576,6 +1604,8 @@ yyreduce: break; case 24: + +/* Line 1464 of yacc.c */ #line 193 "xParser.yxx" { (yyval.u.primitive_type) = XFileDataDef::T_float; @@ -1583,6 +1613,8 @@ yyreduce: break; case 25: + +/* Line 1464 of yacc.c */ #line 197 "xParser.yxx" { (yyval.u.primitive_type) = XFileDataDef::T_double; @@ -1590,6 +1622,8 @@ yyreduce: break; case 26: + +/* Line 1464 of yacc.c */ #line 201 "xParser.yxx" { (yyval.u.primitive_type) = XFileDataDef::T_char; @@ -1597,6 +1631,8 @@ yyreduce: break; case 27: + +/* Line 1464 of yacc.c */ #line 205 "xParser.yxx" { (yyval.u.primitive_type) = XFileDataDef::T_uchar; @@ -1604,6 +1640,8 @@ yyreduce: break; case 28: + +/* Line 1464 of yacc.c */ #line 209 "xParser.yxx" { (yyval.u.primitive_type) = XFileDataDef::T_sword; @@ -1611,6 +1649,8 @@ yyreduce: break; case 29: + +/* Line 1464 of yacc.c */ #line 213 "xParser.yxx" { (yyval.u.primitive_type) = XFileDataDef::T_sdword; @@ -1618,6 +1658,8 @@ yyreduce: break; case 30: + +/* Line 1464 of yacc.c */ #line 217 "xParser.yxx" { (yyval.u.primitive_type) = XFileDataDef::T_string; @@ -1625,6 +1667,8 @@ yyreduce: break; case 31: + +/* Line 1464 of yacc.c */ #line 221 "xParser.yxx" { (yyval.u.primitive_type) = XFileDataDef::T_unicode; @@ -1632,6 +1676,8 @@ yyreduce: break; case 32: + +/* Line 1464 of yacc.c */ #line 225 "xParser.yxx" { (yyval.u.primitive_type) = XFileDataDef::T_cstring; @@ -1639,6 +1685,8 @@ yyreduce: break; case 33: + +/* Line 1464 of yacc.c */ #line 232 "xParser.yxx" { current_data_def = new XFileDataDef(x_file, (yyvsp[(2) - (2)].str), (yyvsp[(1) - (2)].u.primitive_type)); @@ -1647,6 +1695,8 @@ yyreduce: break; case 34: + +/* Line 1464 of yacc.c */ #line 237 "xParser.yxx" { XFileTemplate *xtemplate = x_file->find_template((yyvsp[(1) - (2)].str)); @@ -1660,6 +1710,8 @@ yyreduce: break; case 38: + +/* Line 1464 of yacc.c */ #line 259 "xParser.yxx" { current_data_def->add_array_def(XFileArrayDef((yyvsp[(1) - (1)].u.number))); @@ -1667,6 +1719,8 @@ yyreduce: break; case 39: + +/* Line 1464 of yacc.c */ #line 263 "xParser.yxx" { XFileNode *data_def = current_node->find_child((yyvsp[(1) - (1)].str)); @@ -1679,18 +1733,24 @@ yyreduce: break; case 40: + +/* Line 1464 of yacc.c */ #line 275 "xParser.yxx" { } break; case 41: + +/* Line 1464 of yacc.c */ #line 278 "xParser.yxx" { } break; case 42: + +/* Line 1464 of yacc.c */ #line 284 "xParser.yxx" { XFileTemplate *xtemplate = x_file->find_template((yyvsp[(1) - (1)].str)); @@ -1703,6 +1763,8 @@ yyreduce: break; case 43: + +/* Line 1464 of yacc.c */ #line 293 "xParser.yxx" { XFileTemplate *xtemplate = x_file->find_template((yyvsp[(2) - (2)].guid)); @@ -1719,6 +1781,8 @@ yyreduce: break; case 46: + +/* Line 1464 of yacc.c */ #line 314 "xParser.yxx" { (yyval.str) = (yyvsp[(1) - (2)].str) + " " + (yyvsp[(2) - (2)].str); @@ -1726,6 +1790,8 @@ yyreduce: break; case 47: + +/* Line 1464 of yacc.c */ #line 318 "xParser.yxx" { (yyval.str) = (yyvsp[(1) - (2)].str) + " " + (yyvsp[(2) - (2)].str); @@ -1733,6 +1799,8 @@ yyreduce: break; case 48: + +/* Line 1464 of yacc.c */ #line 325 "xParser.yxx" { (yyval.str) = string(); @@ -1740,6 +1808,8 @@ yyreduce: break; case 51: + +/* Line 1464 of yacc.c */ #line 337 "xParser.yxx" { (yyval.guid) = WindowsGuid(); @@ -1747,6 +1817,8 @@ yyreduce: break; case 54: + +/* Line 1464 of yacc.c */ #line 349 "xParser.yxx" { XFileTemplate *xtemplate = x_file->find_template((yyvsp[(1) - (3)].str)); @@ -1764,6 +1836,8 @@ yyreduce: break; case 55: + +/* Line 1464 of yacc.c */ #line 363 "xParser.yxx" { if (current_node->is_exact_type(XFileDataNodeTemplate::get_class_type())) { @@ -1778,6 +1852,8 @@ yyreduce: break; case 58: + +/* Line 1464 of yacc.c */ #line 382 "xParser.yxx" { // nested references should be added as children too. @@ -1786,6 +1862,8 @@ yyreduce: break; case 59: + +/* Line 1464 of yacc.c */ #line 387 "xParser.yxx" { // nested objects are just quietly added as children. @@ -1793,6 +1871,8 @@ yyreduce: break; case 60: + +/* Line 1464 of yacc.c */ #line 391 "xParser.yxx" { if (current_node->is_exact_type(XFileDataNodeTemplate::get_class_type())) { @@ -1804,6 +1884,8 @@ yyreduce: break; case 61: + +/* Line 1464 of yacc.c */ #line 399 "xParser.yxx" { if (current_node->is_exact_type(XFileDataNodeTemplate::get_class_type())) { @@ -1815,6 +1897,8 @@ yyreduce: break; case 62: + +/* Line 1464 of yacc.c */ #line 407 "xParser.yxx" { if (current_node->is_exact_type(XFileDataNodeTemplate::get_class_type())) { @@ -1826,12 +1910,16 @@ yyreduce: break; case 63: + +/* Line 1464 of yacc.c */ #line 415 "xParser.yxx" { } break; case 69: + +/* Line 1464 of yacc.c */ #line 438 "xParser.yxx" { XFileDataNodeTemplate *data_object = x_file->find_data_object((yyvsp[(1) - (1)].str)); @@ -1844,6 +1932,8 @@ yyreduce: break; case 70: + +/* Line 1464 of yacc.c */ #line 447 "xParser.yxx" { XFileDataNodeTemplate *data_object = x_file->find_data_object((yyvsp[(2) - (2)].guid)); @@ -1861,8 +1951,9 @@ yyreduce: break; -/* Line 1267 of yacc.c. */ -#line 1866 "y.tab.c" + +/* Line 1464 of yacc.c */ +#line 1957 "y.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -1873,7 +1964,6 @@ yyreduce: *++yyvsp = yyval; - /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ @@ -1938,7 +2028,7 @@ yyerrlab: if (yyerrstatus == 3) { - /* If just tried and failed to reuse look-ahead token after an + /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) @@ -1955,7 +2045,7 @@ yyerrlab: } } - /* Else will try to reuse look-ahead token after shifting the error + /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; @@ -2012,9 +2102,6 @@ yyerrlab1: YY_STACK_PRINT (yyss, yyssp); } - if (yyn == YYFINAL) - YYACCEPT; - *++yyvsp = yylval; @@ -2039,7 +2126,7 @@ yyabortlab: yyresult = 1; goto yyreturn; -#ifndef yyoverflow +#if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -2050,7 +2137,7 @@ yyexhaustedlab: #endif yyreturn: - if (yychar != YYEOF && yychar != YYEMPTY) + if (yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered diff --git a/pandatool/src/xfile/xParser.h.prebuilt b/pandatool/src/xfile/xParser.h.prebuilt index 897a5b3f30..ab80d042d4 100644 --- a/pandatool/src/xfile/xParser.h.prebuilt +++ b/pandatool/src/xfile/xParser.h.prebuilt @@ -1,24 +1,22 @@ -/* A Bison parser, made by GNU Bison 2.3. */ +/* A Bison parser, made by GNU Bison 2.4.2. */ /* Skeleton interface for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify + + Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -29,10 +27,11 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ + /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE @@ -109,11 +108,11 @@ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef int YYSTYPE; + # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE xyylval; +