2006-04-24 17:41:27 +00:00
# line 2 "ael_lex.c"
# line 4 "ael_lex.c"
# define YY_INT_ALIGNED short int
/* A lexical scanner generated by flex */
# define FLEX_SCANNER
# define YY_FLEX_MAJOR_VERSION 2
# define YY_FLEX_MINOR_VERSION 5
# define YY_FLEX_SUBMINOR_VERSION 33
# 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 <stdio.h>
# include <string.h>
# include <errno.h>
# include <stdlib.h>
/* end standard C headers. */
/* flex integer type definitions */
# ifndef FLEXINT_H
# define FLEXINT_H
/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
# if __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 <inttypes.h>
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 */
# if __STDC__
# define YY_USE_CONST
# endif /* __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)
/* An opaque pointer. */
# ifndef YY_TYPEDEF_YY_SCANNER_T
# define YY_TYPEDEF_YY_SCANNER_T
typedef void * yyscan_t ;
# endif
/* For convenience, these vars (plus the bison vars far below)
are macros in the reentrant scanner . */
# define yyin yyg->yyin_r
# define yyout yyg->yyout_r
# define yyextra yyg->yyextra_r
# define yyleng yyg->yyleng_r
# define yytext yyg->yytext_r
# define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
# define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
# define yy_flex_debug yyg->yy_flex_debug_r
int ael_yylex_init ( yyscan_t * scanner ) ;
/* 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 yyg->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 ((yyg->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 ael_yyrestart(yyin ,yyscanner )
# 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
# 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 yytext. */ \
int yyless_macro_arg = ( n ) ; \
YY_LESS_LINENO ( yyless_macro_arg ) ; \
* yy_cp = yyg - > yy_hold_char ; \
YY_RESTORE_YY_MORE_OFFSET \
yyg - > yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ ; \
YY_DO_BEFORE_ACTION ; /* set up yytext again */ \
} \
while ( 0 )
# define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
/* The following is because we cannot portably get our hands on size_t
* ( without autoconf ' s help , which isn ' t available because we want
* flex - generated scanners to compile on their own ) .
*/
# ifndef YY_TYPEDEF_YY_SIZE_T
# define YY_TYPEDEF_YY_SIZE_T
typedef unsigned int 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 ael_yyrestart ( ) ) , so that the user can continue scanning by
* just pointing yyin at a new input file .
*/
# define YY_BUFFER_EOF_PENDING 2
} ;
# endif /* !YY_STRUCT_YY_BUFFER_STATE */
/* 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 ( yyg->yy_buffer_stack \
? yyg - > yy_buffer_stack [ yyg - > 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 yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
void ael_yyrestart ( FILE * input_file , yyscan_t yyscanner ) ;
void ael_yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ) ;
YY_BUFFER_STATE ael_yy_create_buffer ( FILE * file , int size , yyscan_t yyscanner ) ;
void ael_yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ) ;
void ael_yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ) ;
void ael_yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ) ;
void ael_yypop_buffer_state ( yyscan_t yyscanner ) ;
static void ael_yyensure_buffer_stack ( yyscan_t yyscanner ) ;
static void ael_yy_load_buffer_state ( yyscan_t yyscanner ) ;
static void ael_yy_init_buffer ( YY_BUFFER_STATE b , FILE * file , yyscan_t yyscanner ) ;
# define YY_FLUSH_BUFFER ael_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
YY_BUFFER_STATE ael_yy_scan_buffer ( char * base , yy_size_t size , yyscan_t yyscanner ) ;
YY_BUFFER_STATE ael_yy_scan_string ( yyconst char * yy_str , yyscan_t yyscanner ) ;
YY_BUFFER_STATE ael_yy_scan_bytes ( yyconst char * bytes , int len , yyscan_t yyscanner ) ;
void * ael_yyalloc ( yy_size_t , yyscan_t yyscanner ) ;
void * ael_yyrealloc ( void * , yy_size_t , yyscan_t yyscanner ) ;
void ael_yyfree ( void * , yyscan_t yyscanner ) ;
# define yy_new_buffer ael_yy_create_buffer
# define yy_set_interactive(is_interactive) \
{ \
if ( ! YY_CURRENT_BUFFER ) { \
ael_yyensure_buffer_stack ( yyscanner ) ; \
YY_CURRENT_BUFFER_LVALUE = \
ael_yy_create_buffer ( yyin , YY_BUF_SIZE , yyscanner ) ; \
} \
YY_CURRENT_BUFFER_LVALUE - > yy_is_interactive = is_interactive ; \
}
# define yy_set_bol(at_bol) \
{ \
if ( ! YY_CURRENT_BUFFER ) { \
ael_yyensure_buffer_stack ( yyscanner ) ; \
YY_CURRENT_BUFFER_LVALUE = \
ael_yy_create_buffer ( yyin , YY_BUF_SIZE , yyscanner ) ; \
} \
YY_CURRENT_BUFFER_LVALUE - > yy_at_bol = at_bol ; \
}
# define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
/* Begin user sect3 */
# define ael_yywrap(n) 1
# define YY_SKIP_YYWRAP
typedef unsigned char YY_CHAR ;
typedef int yy_state_type ;
# define yytext_ptr yytext_r
static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ) ;
static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner ) ;
static int yy_get_next_buffer ( yyscan_t yyscanner ) ;
static void yy_fatal_error ( yyconst char msg [ ] , yyscan_t yyscanner ) ;
/* Done after the current pattern has been matched and before the
* corresponding action - sets up yytext .
*/
# define YY_DO_BEFORE_ACTION \
yyg - > yytext_ptr = yy_bp ; \
yyg - > yytext_ptr - = yyg - > yy_more_len ; \
yyleng = ( size_t ) ( yy_cp - yyg - > yytext_ptr ) ; \
yyg - > yy_hold_char = * yy_cp ; \
* yy_cp = ' \0 ' ; \
yyg - > yy_c_buf_p = yy_cp ;
2006-04-27 11:43:34 +00:00
# define YY_NUM_RULES 55
# define YY_END_OF_BUFFER 56
2006-04-24 17:41:27 +00:00
/* 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 ;
} ;
2006-04-27 11:43:34 +00:00
static yyconst flex_int16_t yy_accept [ 206 ] =
2006-04-24 17:41:27 +00:00
{ 0 ,
2006-04-27 11:43:34 +00:00
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 56 , 55 ,
2006-04-24 17:41:27 +00:00
42 , 40 , 41 , 43 , 43 , 9 , 3 , 4 , 7 , 43 ,
8 , 5 , 6 , 12 , 43 , 43 , 43 , 43 , 43 , 43 ,
43 , 43 , 43 , 43 , 43 , 43 , 43 , 43 , 43 , 1 ,
2006-04-27 11:43:34 +00:00
10 , 2 , 55 , 45 , 44 , 46 , 55 , 51 , 52 , 53 ,
55 , 47 , 48 , 49 , 50 , 42 , 41 , 43 , 43 , 13 ,
11 , 43 , 43 , 43 , 43 , 43 , 43 , 43 , 43 , 43 ,
43 , 43 , 20 , 43 , 43 , 43 , 43 , 43 , 43 , 43 ,
43 , 43 , 0 , 45 , 44 , 46 , 0 , 51 , 52 , 53 ,
0 , 47 , 48 , 49 , 50 , 43 , 13 , 13 , 43 , 43 ,
43 , 43 , 43 , 43 , 43 , 43 , 31 , 43 , 43 , 43 ,
2006-04-27 11:34:44 +00:00
43 , 43 , 43 , 43 , 43 , 43 , 43 , 43 , 43 , 43 ,
2006-04-27 11:43:34 +00:00
43 , 43 , 43 , 43 , 33 , 43 , 43 , 43 , 25 , 43 ,
43 , 26 , 24 , 43 , 43 , 43 , 27 , 43 , 43 , 43 ,
43 , 43 , 43 , 43 , 43 , 43 , 29 , 36 , 43 , 43 ,
43 , 43 , 43 , 43 , 43 , 43 , 16 , 43 , 43 , 43 ,
43 , 43 , 32 , 43 , 43 , 43 , 43 , 43 , 43 , 43 ,
21 , 43 , 43 , 43 , 22 , 43 , 28 , 19 , 43 , 43 ,
14 , 43 , 34 , 43 , 17 , 43 , 43 , 35 , 43 , 43 ,
43 , 15 , 30 , 43 , 43 , 39 , 23 , 37 , 0 , 38 ,
18 , 0 , 0 , 54 , 0
2006-04-24 17:41:27 +00:00
} ;
static yyconst flex_int32_t yy_ec [ 256 ] =
{ 0 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 3 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 4 , 5 , 6 , 7 , 5 , 1 , 8 , 5 , 9 ,
10 , 5 , 5 , 11 , 5 , 5 , 12 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 13 , 14 , 5 ,
15 , 16 , 1 , 17 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
5 , 5 , 5 , 18 , 5 , 5 , 5 , 5 , 5 , 5 ,
19 , 1 , 20 , 1 , 5 , 1 , 21 , 22 , 23 , 24 ,
25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 ,
35 , 36 , 5 , 37 , 38 , 39 , 40 , 5 , 41 , 42 ,
5 , 5 , 43 , 44 , 45 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 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 [ 46 ] =
{ 0 ,
1 , 1 , 2 , 1 , 3 , 4 , 3 , 1 , 1 , 1 ,
1 , 3 , 1 , 1 , 1 , 3 , 1 , 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 , 1 , 3
} ;
2006-04-27 11:43:34 +00:00
static yyconst flex_int16_t yy_base [ 216 ] =
2006-04-24 17:41:27 +00:00
{ 0 ,
0 , 0 , 37 , 40 , 77 , 114 , 151 , 188 , 237 , 507 ,
234 , 507 , 228 , 0 , 201 , 507 , 507 , 507 , 507 , 217 ,
507 , 507 , 212 , 507 , 205 , 189 , 27 , 200 , 20 , 189 ,
19 , 194 , 37 , 182 , 200 , 199 , 40 , 178 , 190 , 507 ,
2006-04-27 11:20:26 +00:00
507 , 507 , 57 , 507 , 507 , 507 , 225 , 507 , 507 , 507 ,
2006-04-27 11:43:34 +00:00
262 , 507 , 507 , 507 , 507 , 215 , 212 , 0 , 181 , 307 ,
507 , 176 , 188 , 30 , 178 , 185 , 172 , 168 , 169 , 170 ,
165 , 169 , 184 , 167 , 177 , 162 , 170 , 153 , 157 , 45 ,
161 , 160 , 69 , 507 , 507 , 507 , 343 , 507 , 507 , 507 ,
380 , 507 , 507 , 507 , 507 , 165 , 0 , 425 , 148 , 165 ,
160 , 161 , 144 , 161 , 156 , 151 , 0 , 157 , 143 , 138 ,
147 , 140 , 142 , 137 , 135 , 130 , 144 , 142 , 126 , 126 ,
132 , 131 , 121 , 125 , 0 , 127 , 45 , 114 , 0 , 114 ,
131 , 0 , 0 , 118 , 113 , 109 , 0 , 113 , 122 , 111 ,
103 , 107 , 120 , 117 , 101 , 119 , 0 , 0 , 97 , 104 ,
105 , 113 , 103 , 107 , 106 , 106 , 0 , 92 , 94 , 87 ,
91 , 93 , 0 , 95 , 95 , 78 , 76 , 76 , 85 , 73 ,
0 , 74 , 84 , 74 , 0 , 82 , 0 , 81 , 80 , 65 ,
0 , 78 , 0 , 76 , 0 , 78 , 60 , 0 , 61 , 55 ,
51 , 0 , 0 , 43 , 36 , 0 , 0 , 0 , 88 , 0 ,
0 , 0 , 67 , 507 , 507 , 469 , 473 , 477 , 479 , 483 ,
487 , 491 , 495 , 499 , 503
2006-04-24 17:41:27 +00:00
} ;
2006-04-27 11:43:34 +00:00
static yyconst flex_int16_t yy_def [ 216 ] =
2006-04-24 17:41:27 +00:00
{ 0 ,
2006-04-27 11:43:34 +00:00
205 , 1 , 206 , 206 , 207 , 207 , 208 , 208 , 205 , 205 ,
205 , 205 , 205 , 209 , 209 , 205 , 205 , 205 , 205 , 209 ,
205 , 205 , 205 , 205 , 209 , 209 , 209 , 209 , 209 , 209 ,
209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 205 ,
205 , 205 , 210 , 205 , 205 , 205 , 211 , 205 , 205 , 205 ,
212 , 205 , 205 , 205 , 205 , 205 , 205 , 209 , 209 , 213 ,
205 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 ,
209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 ,
209 , 209 , 210 , 205 , 205 , 205 , 211 , 205 , 205 , 205 ,
212 , 205 , 205 , 205 , 205 , 209 , 214 , 213 , 209 , 209 ,
209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 ,
209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 ,
209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 ,
209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 ,
209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 ,
209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 ,
209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 ,
209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 ,
209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 ,
209 , 209 , 209 , 209 , 209 , 209 , 209 , 209 , 205 , 209 ,
209 , 215 , 215 , 205 , 0 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205
2006-04-24 17:41:27 +00:00
} ;
static yyconst flex_int16_t yy_nxt [ 553 ] =
{ 0 ,
10 , 11 , 12 , 13 , 14 , 14 , 15 , 16 , 17 , 18 ,
19 , 20 , 21 , 22 , 23 , 14 , 24 , 14 , 14 , 14 ,
25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 ,
14 , 14 , 35 , 14 , 14 , 36 , 37 , 38 , 14 , 14 ,
2006-04-27 11:43:34 +00:00
39 , 14 , 40 , 41 , 42 , 44 , 45 , 64 , 44 , 45 ,
70 , 67 , 199 , 71 , 199 , 44 , 46 , 68 , 44 , 46 ,
79 , 65 , 73 , 74 , 80 , 84 , 85 , 101 , 102 , 149 ,
75 , 118 , 204 , 150 , 201 , 84 , 86 , 84 , 85 , 44 ,
200 , 46 , 44 , 119 , 46 , 48 , 49 , 84 , 86 , 199 ,
50 , 199 , 198 , 202 , 197 , 48 , 49 , 196 , 195 , 84 ,
194 , 86 , 193 , 192 , 191 , 190 , 189 , 188 , 187 , 186 ,
185 , 84 , 184 , 86 , 183 , 182 , 181 , 180 , 179 , 48 ,
178 , 49 , 48 , 49 , 177 , 176 , 175 , 50 , 174 , 173 ,
172 , 171 , 48 , 49 , 170 , 169 , 168 , 167 , 166 , 165 ,
164 , 163 , 162 , 161 , 160 , 159 , 158 , 157 , 156 , 155 ,
154 , 153 , 152 , 151 , 148 , 147 , 48 , 146 , 49 , 52 ,
53 , 54 , 145 , 144 , 143 , 142 , 141 , 140 , 139 , 52 ,
55 , 138 , 137 , 136 , 135 , 134 , 133 , 132 , 131 , 130 ,
129 , 128 , 127 , 126 , 125 , 124 , 123 , 122 , 121 , 120 ,
117 , 116 , 115 , 52 , 114 , 55 , 52 , 53 , 54 , 113 ,
112 , 111 , 110 , 109 , 108 , 107 , 52 , 55 , 106 , 105 ,
104 , 103 , 100 , 99 , 96 , 57 , 56 , 82 , 81 , 78 ,
77 , 76 , 72 , 69 , 66 , 63 , 62 , 61 , 60 , 59 ,
52 , 57 , 55 , 88 , 89 , 56 , 205 , 205 , 90 , 205 ,
205 , 205 , 205 , 88 , 89 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 88 , 205 , 89 ,
92 , 93 , 94 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
92 , 95 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 92 , 205 , 95 , 97 , 97 , 205 ,
97 , 205 , 205 , 205 , 97 , 97 , 97 , 97 , 205 , 97 ,
97 , 97 , 205 , 97 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
97 , 88 , 89 , 205 , 205 , 205 , 90 , 205 , 205 , 205 ,
205 , 88 , 89 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 88 , 205 , 89 , 92 , 93 ,
94 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 92 , 95 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 92 , 205 , 95 , 97 , 97 , 205 , 97 , 205 ,
205 , 205 , 97 , 97 , 97 , 97 , 205 , 97 , 97 , 97 ,
205 , 97 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 97 , 43 ,
43 , 43 , 43 , 47 , 47 , 47 , 47 , 51 , 51 , 51 ,
51 , 58 , 58 , 83 , 83 , 83 , 83 , 87 , 87 , 87 ,
87 , 91 , 91 , 91 , 91 , 98 , 205 , 98 , 98 , 97 ,
205 , 97 , 97 , 203 , 203 , 203 , 9 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205
2006-04-24 17:41:27 +00:00
} ;
static yyconst flex_int16_t yy_chk [ 553 ] =
{ 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 , 3 , 3 , 27 , 4 , 4 ,
2006-04-27 11:43:34 +00:00
31 , 29 , 191 , 31 , 191 , 3 , 3 , 29 , 4 , 4 ,
37 , 27 , 33 , 33 , 37 , 43 , 43 , 64 , 64 , 127 ,
33 , 80 , 203 , 127 , 195 , 43 , 43 , 83 , 83 , 3 ,
194 , 3 , 4 , 80 , 4 , 5 , 5 , 83 , 83 , 199 ,
5 , 199 , 190 , 199 , 189 , 5 , 5 , 187 , 186 , 43 ,
184 , 43 , 182 , 180 , 179 , 178 , 176 , 174 , 173 , 172 ,
170 , 83 , 169 , 83 , 168 , 167 , 166 , 165 , 164 , 5 ,
162 , 5 , 6 , 6 , 161 , 160 , 159 , 6 , 158 , 156 ,
155 , 154 , 6 , 6 , 153 , 152 , 151 , 150 , 149 , 146 ,
145 , 144 , 143 , 142 , 141 , 140 , 139 , 138 , 136 , 135 ,
134 , 131 , 130 , 128 , 126 , 124 , 6 , 123 , 6 , 7 ,
7 , 7 , 122 , 121 , 120 , 119 , 118 , 117 , 116 , 7 ,
7 , 115 , 114 , 113 , 112 , 111 , 110 , 109 , 108 , 106 ,
105 , 104 , 103 , 102 , 101 , 100 , 99 , 96 , 82 , 81 ,
79 , 78 , 77 , 7 , 76 , 7 , 8 , 8 , 8 , 75 ,
74 , 73 , 72 , 71 , 70 , 69 , 8 , 8 , 68 , 67 ,
66 , 65 , 63 , 62 , 59 , 57 , 56 , 39 , 38 , 36 ,
2006-04-24 17:41:27 +00:00
35 , 34 , 32 , 30 , 28 , 26 , 25 , 23 , 20 , 15 ,
2006-04-27 11:20:26 +00:00
8 , 13 , 8 , 47 , 47 , 11 , 9 , 0 , 47 , 0 ,
0 , 0 , 0 , 47 , 47 , 0 , 0 , 0 , 0 , 0 ,
2006-04-24 17:41:27 +00:00
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
2006-04-27 11:20:26 +00:00
0 , 0 , 0 , 0 , 0 , 0 , 0 , 47 , 0 , 47 ,
2006-04-27 11:43:34 +00:00
51 , 51 , 51 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
51 , 51 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
2006-04-24 17:41:27 +00:00
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
2006-04-27 11:43:34 +00:00
0 , 0 , 0 , 0 , 51 , 0 , 51 , 60 , 60 , 0 ,
60 , 0 , 0 , 0 , 60 , 60 , 60 , 60 , 0 , 60 ,
60 , 60 , 0 , 60 , 0 , 0 , 0 , 0 , 0 , 0 ,
2006-04-24 17:41:27 +00:00
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
2006-04-27 11:43:34 +00:00
60 , 87 , 87 , 0 , 0 , 0 , 87 , 0 , 0 , 0 ,
0 , 87 , 87 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
2006-04-24 17:41:27 +00:00
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
2006-04-27 11:43:34 +00:00
0 , 0 , 0 , 0 , 0 , 87 , 0 , 87 , 91 , 91 ,
91 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 91 , 91 ,
2006-04-24 17:41:27 +00:00
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
2006-04-27 11:43:34 +00:00
0 , 0 , 91 , 0 , 91 , 98 , 98 , 0 , 98 , 0 ,
0 , 0 , 98 , 98 , 98 , 98 , 0 , 98 , 98 , 98 ,
0 , 98 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
2006-04-24 17:41:27 +00:00
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
2006-04-27 11:43:34 +00:00
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 98 , 206 ,
206 , 206 , 206 , 207 , 207 , 207 , 207 , 208 , 208 , 208 ,
208 , 209 , 209 , 210 , 210 , 210 , 210 , 211 , 211 , 211 ,
211 , 212 , 212 , 212 , 212 , 213 , 0 , 213 , 213 , 214 ,
0 , 214 , 214 , 215 , 215 , 215 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 , 205 ,
205 , 205
2006-04-24 17:41:27 +00:00
} ;
/* 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() (yyg->yy_more_flag = 1)
# define YY_MORE_ADJ yyg->yy_more_len
# define YY_RESTORE_YY_MORE_OFFSET
# line 1 "ael.flex"
/*
* Asterisk - - An open source telephony toolkit .
*
* Copyright ( C ) 2006 , Digium , Inc .
*
* Steve Murphy < murf @ parsetree . com >
*
* See http : //www.asterisk.org for more information about
* the Asterisk project . Please do not directly contact
* any of the maintainers of this project for assistance ;
* the project provides a web site , mailing lists and IRC
* channels for your use .
*
* This program is free software , distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree .
*/
/*! \file
*
* \ brief Flex scanner description of tokens used in AEL2 .
2006-04-26 18:40:09 +00:00
*
2006-04-27 21:09:52 +00:00
*/
/*
* Start with flex options :
*
* % x describes the contexts we have : paren , semic and argg , plus INITIAL
*/
/* prefix used for various globally-visible functions and variables.
* This renames also ael_yywrap , but since we do not use it , we just
* add option noyywrap to remove it .
*/
/* batch gives a bit more performance if we are using it in
* a non - interactive mode . We probably don ' t care much .
*/
/* outfile is the filename to be used instead of lex.yy.c */
/*
* These are not supported in flex 2.5 .4 , but we need them
* at the moment :
* reentrant produces a thread - safe parser . Not 100 % sure that
* we require it , though .
* bison - bridge passes an additional yylval argument to ael_yylex ( ) .
* bison - locations is probably not needed .
*/
# line 59 "ael.flex"
# include <sys/types.h>
2006-04-24 17:41:27 +00:00
# include <sys/stat.h>
# include <unistd.h>
# include "asterisk.h"
# include "asterisk/logger.h"
2006-04-25 17:08:41 +00:00
# include "ael/ael.tab.h"
2006-04-24 17:41:27 +00:00
# include "asterisk/ael_structs.h"
2006-04-27 20:08:42 +00:00
/*
* A stack to keep track of matching brackets ( [ { } ] )
*/
2006-04-26 22:56:18 +00:00
static char pbcstack [ 400 ] ; /* XXX missing size checks */
2006-04-24 17:41:27 +00:00
static int pbcpos = 0 ;
static int parencount = 0 ;
static int commaout = 0 ;
2006-04-27 20:08:42 +00:00
/*
* current line , column and filename , updated as we read the input .
*/
2006-04-27 17:00:09 +00:00
static int my_lineno = 1 ; /* current line in the source */
static int my_col = 0 ; /* current column in the source */
2006-04-27 20:08:42 +00:00
char * my_file = 0 ; /* used also in the bison code */
char * prev_word ; /* XXX document it */
2006-04-24 17:41:27 +00:00
# define MAX_INCLUDE_DEPTH 50
2006-04-27 20:08:42 +00:00
/*
* flex is not too smart , and generates global functions
* without prototypes so the compiler may complain .
* To avoid that , we declare the prototypes here ,
* even though these functions are not used .
*/
2006-04-24 17:41:27 +00:00
int ael_yyget_column ( yyscan_t yyscanner ) ;
void ael_yyset_column ( int column_no , yyscan_t yyscanner ) ;
2006-04-27 20:08:42 +00:00
2006-04-24 17:41:27 +00:00
int ael_yyparse ( struct parse_io * ) ;
static void pbcpush ( char x ) ;
static int pbcpop ( char x ) ;
2006-04-27 20:08:42 +00:00
/*
* A stack to process include files .
* As we switch into the new file we need to store the previous
* state to restore it later .
*/
2006-04-26 18:40:09 +00:00
struct stackelement {
char * fname ;
int lineno ;
int colno ;
YY_BUFFER_STATE bufstate ;
2006-04-24 17:41:27 +00:00
} ;
2006-04-27 20:08:42 +00:00
2006-04-26 23:08:47 +00:00
static struct stackelement include_stack [ MAX_INCLUDE_DEPTH ] ;
static int include_stack_index = 0 ;
2006-04-24 17:41:27 +00:00
2006-04-27 17:00:09 +00:00
/*
* if we use the @ n feature of bison , we must supply the start / end
* location of tokens in the structure pointed by yylloc .
* Simple tokens are just assumed to be on the same line , so
* the line number is constant , and the column is incremented
* by the length of the token .
*/
2006-04-27 21:09:52 +00:00
# ifdef FLEX_BETA /* set for 2.5.33 */
/* compute the total number of lines and columns in the text
* passed as argument .
*/
static void pbcwhere ( const char * text , int * line , int * col )
{
int loc_line = * line ;
int loc_col = * col ;
char c ;
while ( ( c = * text + + ) ) {
if ( c = = ' \n ' ) {
loc_line + + ;
loc_col = 0 ;
}
loc_col + + ;
}
* line = loc_line ;
* col = loc_col ;
}
2006-04-26 23:18:03 +00:00
# define STORE_POS do { \
yylloc - > first_line = yylloc - > last_line = my_lineno ; \
yylloc - > first_column = my_col ; \
2006-04-27 17:00:09 +00:00
yylloc - > last_column = my_col + yyleng - 1 ; \
2006-04-26 23:18:03 +00:00
my_col + = yyleng ; \
} while ( 0 )
2006-04-24 17:41:27 +00:00
2006-04-27 17:10:15 +00:00
# define STORE_START do { \
yylloc - > first_line = my_lineno ; \
yylloc - > first_column = my_col ; \
} while ( 0 )
# define STORE_END do { \
pbcwhere ( yytext , & my_lineno , & my_col ) ; \
yylloc - > last_line = my_lineno ; \
yylloc - > last_column = my_col ; \
} while ( 0 )
2006-04-27 21:09:52 +00:00
# else
# define STORE_POS
# define STORE_START
# define STORE_END
# endif
# line 782 "ael_lex.c"
2006-04-24 17:41:27 +00:00
# define INITIAL 0
# define paren 1
# define semic 2
# define argg 3
# 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 .
*/
# include <unistd.h>
# endif
# ifndef YY_EXTRA_TYPE
# define YY_EXTRA_TYPE void *
# endif
/* Holds the entire state of the reentrant scanner. */
struct yyguts_t
{
/* User-defined. Not touched by flex. */
YY_EXTRA_TYPE yyextra_r ;
/* The rest are the same as the globals declared in the non-reentrant scanner. */
FILE * yyin_r , * yyout_r ;
size_t yy_buffer_stack_top ; /**< index of top of stack. */
size_t yy_buffer_stack_max ; /**< capacity of stack. */
YY_BUFFER_STATE * yy_buffer_stack ; /**< Stack as an array. */
char yy_hold_char ;
int yy_n_chars ;
int yyleng_r ;
char * yy_c_buf_p ;
int yy_init ;
int yy_start ;
int yy_did_buffer_switch_on_eof ;
int yy_start_stack_ptr ;
int yy_start_stack_depth ;
int * yy_start_stack ;
yy_state_type yy_last_accepting_state ;
char * yy_last_accepting_cpos ;
int yylineno_r ;
int yy_flex_debug_r ;
char * yytext_r ;
int yy_more_flag ;
int yy_more_len ;
YYSTYPE * yylval_r ;
YYLTYPE * yylloc_r ;
} ; /* end struct yyguts_t */
static int yy_init_globals ( yyscan_t yyscanner ) ;
/* This must go here because YYSTYPE and YYLTYPE are included
* from bison output in section 1. */
# define yylval yyg->yylval_r
# define yylloc yyg->yylloc_r
/* Accessor methods to globals.
These are made visible to non - reentrant scanners for convenience . */
int ael_yylex_destroy ( yyscan_t yyscanner ) ;
int ael_yyget_debug ( yyscan_t yyscanner ) ;
void ael_yyset_debug ( int debug_flag , yyscan_t yyscanner ) ;
YY_EXTRA_TYPE ael_yyget_extra ( yyscan_t yyscanner ) ;
void ael_yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ) ;
FILE * ael_yyget_in ( yyscan_t yyscanner ) ;
void ael_yyset_in ( FILE * in_str , yyscan_t yyscanner ) ;
FILE * ael_yyget_out ( yyscan_t yyscanner ) ;
void ael_yyset_out ( FILE * out_str , yyscan_t yyscanner ) ;
int ael_yyget_leng ( yyscan_t yyscanner ) ;
char * ael_yyget_text ( yyscan_t yyscanner ) ;
int ael_yyget_lineno ( yyscan_t yyscanner ) ;
void ael_yyset_lineno ( int line_number , yyscan_t yyscanner ) ;
YYSTYPE * ael_yyget_lval ( yyscan_t yyscanner ) ;
void ael_yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner ) ;
YYLTYPE * ael_yyget_lloc ( yyscan_t yyscanner ) ;
void ael_yyset_lloc ( YYLTYPE * yylloc_param , yyscan_t yyscanner ) ;
/* Macros after this point can all be overridden by user definitions in
* section 1.
*/
# ifndef YY_SKIP_YYWRAP
# ifdef __cplusplus
extern " C " int ael_yywrap ( yyscan_t yyscanner ) ;
# else
extern int ael_yywrap ( yyscan_t yyscanner ) ;
# endif
# endif
static void yyunput ( int c , char * buf_ptr , yyscan_t yyscanner ) ;
# ifndef yytext_ptr
static void yy_flex_strncpy ( char * , yyconst char * , int , yyscan_t yyscanner ) ;
# endif
# ifdef YY_NEED_STRLEN
static int yy_flex_strlen ( yyconst char * , yyscan_t yyscanner ) ;
# endif
# ifndef YY_NO_INPUT
# ifdef __cplusplus
static int yyinput ( yyscan_t yyscanner ) ;
# else
static int input ( yyscan_t yyscanner ) ;
# 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 (void) fwrite( yytext, yyleng, 1, yyout )
# 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 = ' * ' ; \
size_t n ; \
for ( n = 0 ; n < max_size & & \
( c = getc ( yyin ) ) ! = EOF & & c ! = ' \n ' ; + + n ) \
buf [ n ] = ( char ) c ; \
if ( c = = ' \n ' ) \
buf [ n + + ] = ( char ) c ; \
if ( c = = EOF & & ferror ( yyin ) ) \
YY_FATAL_ERROR ( " input in flex scanner failed " ) ; \
result = n ; \
} \
else \
{ \
errno = 0 ; \
while ( ( result = fread ( buf , 1 , max_size , yyin ) ) = = 0 & & ferror ( yyin ) ) \
{ \
if ( errno ! = EINTR ) \
{ \
YY_FATAL_ERROR ( " input in flex scanner failed " ) ; \
break ; \
} \
errno = 0 ; \
clearerr ( yyin ) ; \
} \
} \
\
# 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 , yyscanner)
# 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 ael_yylex \
( YYSTYPE * yylval_param , YYLTYPE * yylloc_param , yyscan_t yyscanner ) ;
# define YY_DECL int ael_yylex \
( YYSTYPE * yylval_param , YYLTYPE * yylloc_param , yyscan_t yyscanner )
# endif /* !YY_DECL */
/* Code executed at the beginning of each rule, after yytext and yyleng
* 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 ;
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
2006-04-27 21:09:52 +00:00
# line 174 "ael.flex"
2006-04-27 01:07:24 +00:00
2006-04-24 17:41:27 +00:00
2006-04-27 21:09:52 +00:00
# line 1025 "ael_lex.c"
2006-04-24 17:41:27 +00:00
yylval = yylval_param ;
yylloc = yylloc_param ;
if ( ! yyg - > yy_init )
{
yyg - > yy_init = 1 ;
# ifdef YY_USER_INIT
YY_USER_INIT ;
# endif
if ( ! yyg - > yy_start )
yyg - > yy_start = 1 ; /* first start state */
if ( ! yyin )
yyin = stdin ;
if ( ! yyout )
yyout = stdout ;
if ( ! YY_CURRENT_BUFFER ) {
ael_yyensure_buffer_stack ( yyscanner ) ;
YY_CURRENT_BUFFER_LVALUE =
ael_yy_create_buffer ( yyin , YY_BUF_SIZE , yyscanner ) ;
}
ael_yy_load_buffer_state ( yyscanner ) ;
}
while ( 1 ) /* loops until end-of-file is reached */
{
yyg - > yy_more_len = 0 ;
if ( yyg - > yy_more_flag )
{
yyg - > yy_more_len = yyg - > yy_c_buf_p - yyg - > yytext_ptr ;
yyg - > yy_more_flag = 0 ;
}
yy_cp = yyg - > yy_c_buf_p ;
/* Support of yytext. */
* yy_cp = yyg - > 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 = yyg - > yy_start ;
yy_match :
do
{
register YY_CHAR yy_c = yy_ec [ YY_SC_TO_UI ( * yy_cp ) ] ;
if ( yy_accept [ yy_current_state ] )
{
yyg - > yy_last_accepting_state = yy_current_state ;
yyg - > 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 ] ;
2006-04-27 11:43:34 +00:00
if ( yy_current_state > = 206 )
2006-04-24 17:41:27 +00:00
yy_c = yy_meta [ ( unsigned int ) yy_c ] ;
}
yy_current_state = yy_nxt [ yy_base [ yy_current_state ] + ( unsigned int ) yy_c ] ;
+ + yy_cp ;
}
2006-04-27 11:43:34 +00:00
while ( yy_current_state ! = 205 ) ;
2006-04-24 17:41:27 +00:00
yy_cp = yyg - > yy_last_accepting_cpos ;
yy_current_state = yyg - > yy_last_accepting_state ;
yy_find_action :
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 = yyg - > yy_hold_char ;
yy_cp = yyg - > yy_last_accepting_cpos ;
yy_current_state = yyg - > yy_last_accepting_state ;
goto yy_find_action ;
case 1 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 176 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return LC ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 2 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 177 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return RC ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 3 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 178 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return LP ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 4 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 179 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return RP ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 5 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 180 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return SEMI ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 6 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 181 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return EQ ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 7 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 182 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return COMMA ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 8 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 183 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return COLON ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 9 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 184 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return AMPER ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 10 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 185 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return BAR ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 11 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 186 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return EXTENMARK ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 12 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 187 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return AT ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 13 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 188 "ael.flex"
2006-04-24 17:41:27 +00:00
{ /*comment*/ }
YY_BREAK
case 14 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 189 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_CONTEXT ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 15 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 190 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_ABSTRACT ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 16 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 191 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_MACRO ; } ;
2006-04-24 17:41:27 +00:00
YY_BREAK
case 17 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 192 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_GLOBALS ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 18 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 193 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_IGNOREPAT ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 19 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 194 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_SWITCH ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 20 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 195 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_IF ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 21 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 196 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_IFTIME ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 22 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 197 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_RANDOM ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 23 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 198 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_REGEXTEN ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 24 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 199 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_HINT ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 25 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 200 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_ELSE ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 26 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 201 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_GOTO ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 27 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 202 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_JUMP ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 28 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 203 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_RETURN ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 29 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 204 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_BREAK ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 30 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 205 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_CONTINUE ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 31 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 206 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_FOR ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 32 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 207 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_WHILE ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 33 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 208 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_CASE ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 34 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 209 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_DEFAULT ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 35 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 210 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_PATTERN ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 36 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 211 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_CATCH ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 37 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 212 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_SWITCHES ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 38 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 213 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_ESWITCHES ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 39 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 214 "ael.flex"
2006-04-26 23:18:03 +00:00
{ STORE_POS ; return KW_INCLUDES ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 40 :
/* rule 40 can match eol */
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 216 "ael.flex"
2006-04-28 14:17:03 +00:00
{ my_lineno + + ; my_col = 1 ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 41 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 217 "ael.flex"
2006-04-26 23:36:05 +00:00
{ my_col + = yyleng ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 42 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 218 "ael.flex"
2006-04-28 14:17:03 +00:00
{ my_col + = ( yyleng * 8 ) - ( my_col % 8 ) ; }
2006-04-24 17:41:27 +00:00
YY_BREAK
case 43 :
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 220 "ael.flex"
2006-04-24 17:41:27 +00:00
{
2006-04-26 23:18:03 +00:00
STORE_POS ;
2006-04-26 18:40:09 +00:00
yylval - > str = strdup ( yytext ) ;
prev_word = yylval - > str ;
return word ;
}
2006-04-24 17:41:27 +00:00
YY_BREAK
case 44 :
/* rule 44 can match eol */
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 230 "ael.flex"
2006-04-26 18:40:09 +00:00
{
2006-04-27 17:10:15 +00:00
STORE_START ;
2006-04-27 01:27:07 +00:00
if ( pbcpop ( ' ) ' ) ) { /* error */
2006-04-27 17:10:15 +00:00
STORE_END ;
2006-04-27 01:27:07 +00:00
ast_log ( LOG_ERROR , " File=%s, line=%d, column=%d: Mismatched ')' in expression: %s ! \n " , my_file , my_lineno , my_col , yytext ) ;
2006-04-26 18:40:09 +00:00
BEGIN ( 0 ) ;
yylval - > str = strdup ( yytext ) ;
prev_word = 0 ;
return word ;
}
parencount - - ;
if ( parencount > = 0 ) {
yymore ( ) ;
} else {
2006-04-27 17:10:15 +00:00
STORE_END ;
2006-04-26 18:40:09 +00:00
yylval - > str = strdup ( yytext ) ;
* ( yylval - > str + strlen ( yylval - > str ) - 1 ) = 0 ;
/* printf("Got paren word %s\n", yylval->str); */
unput ( ' ) ' ) ;
BEGIN ( 0 ) ;
return word ;
}
}
2006-04-24 17:41:27 +00:00
YY_BREAK
case 45 :
/* rule 45 can match eol */
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 254 "ael.flex"
2006-04-26 18:40:09 +00:00
{
2006-04-27 11:20:26 +00:00
char c = yytext [ yyleng - 1 ] ;
2006-04-27 17:10:15 +00:00
STORE_START ;
2006-04-27 11:20:26 +00:00
if ( c = = ' ( ' )
parencount + + ;
pbcpush ( c ) ;
2006-04-26 18:40:09 +00:00
yymore ( ) ;
}
2006-04-24 17:41:27 +00:00
YY_BREAK
case 46 :
/* rule 46 can match eol */
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 263 "ael.flex"
2006-04-27 01:07:24 +00:00
{
2006-04-27 11:20:26 +00:00
char c = yytext [ yyleng - 1 ] ;
2006-04-27 17:10:15 +00:00
STORE_START ;
2006-04-27 11:20:26 +00:00
if ( pbcpop ( c ) ) { /* error */
2006-04-27 17:10:15 +00:00
STORE_END ;
2006-04-27 11:20:26 +00:00
ast_log ( LOG_ERROR , " File=%s, line=%d, column=%d: Mismatched '%c' in expression! \n " ,
my_file , my_lineno , my_col , c ) ;
2006-04-26 18:40:09 +00:00
BEGIN ( 0 ) ;
yylval - > str = strdup ( yytext ) ;
return word ;
}
yymore ( ) ;
}
2006-04-24 17:41:27 +00:00
YY_BREAK
2006-04-27 11:20:26 +00:00
case 47 :
/* rule 47 can match eol */
2006-04-24 17:41:27 +00:00
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 277 "ael.flex"
2006-04-27 01:35:52 +00:00
{
2006-04-27 11:34:44 +00:00
char c = yytext [ yyleng - 1 ] ;
2006-04-27 17:10:15 +00:00
STORE_START ;
2006-04-27 11:34:44 +00:00
if ( c = = ' ( ' )
parencount + + ;
pbcpush ( c ) ;
2006-04-27 01:35:52 +00:00
yymore ( ) ;
}
YY_BREAK
2006-04-27 11:20:26 +00:00
case 48 :
/* rule 48 can match eol */
2006-04-27 01:35:52 +00:00
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 286 "ael.flex"
2006-04-26 18:40:09 +00:00
{
2006-04-27 17:10:15 +00:00
STORE_START ;
2006-04-27 01:27:07 +00:00
if ( pbcpop ( ' ) ' ) ) { /* error */
2006-04-27 17:10:15 +00:00
STORE_END ;
2006-04-27 01:27:07 +00:00
ast_log ( LOG_ERROR , " File=%s, line=%d, column=%d: Mismatched ')' in expression! \n " , my_file , my_lineno , my_col ) ;
2006-04-26 18:40:09 +00:00
BEGIN ( 0 ) ;
yylval - > str = strdup ( yytext ) ;
return word ;
}
2006-04-27 17:10:15 +00:00
STORE_END ;
2006-04-26 18:40:09 +00:00
parencount - - ;
if ( parencount > = 0 ) {
yymore ( ) ;
} else {
yylval - > str = strdup ( yytext ) ;
if ( yyleng > 1 )
* ( yylval - > str + yyleng - 1 ) = 0 ;
BEGIN ( 0 ) ;
if ( ! strcmp ( yylval - > str , " ) " ) ) {
free ( yylval - > str ) ;
yylval - > str = 0 ;
2006-04-27 01:27:07 +00:00
my_col + + ; /* XXX why ? */
2006-04-26 18:40:09 +00:00
return RP ;
} else {
unput ( ' ) ' ) ;
return word ;
}
}
}
2006-04-24 17:41:27 +00:00
YY_BREAK
2006-04-27 11:34:44 +00:00
case 49 :
/* rule 49 can match eol */
2006-04-24 17:41:27 +00:00
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 317 "ael.flex"
2006-04-26 18:40:09 +00:00
{
if ( parencount ! = 0 ) {
/* printf("Folding in a comma!\n"); */
yymore ( ) ;
} else {
2006-04-27 17:10:15 +00:00
STORE_START ;
STORE_END ;
2006-04-26 18:40:09 +00:00
if ( ! commaout ) {
if ( ! strcmp ( yytext , " , " ) ) {
commaout = 0 ;
my_col + = 1 ;
return COMMA ;
}
2006-04-27 01:27:07 +00:00
yylval - > str = strdup ( yytext ) ;
/* printf("Got argg2 word %s\n", yylval->str); */
2006-04-26 18:40:09 +00:00
unput ( ' , ' ) ;
commaout = 1 ;
2006-04-27 01:27:07 +00:00
if ( yyleng > 1 )
* ( yylval - > str + yyleng - 1 ) = 0 ;
2006-04-26 18:40:09 +00:00
return word ;
} else {
commaout = 0 ;
my_col + = 1 ;
return COMMA ;
}
}
}
2006-04-24 17:41:27 +00:00
YY_BREAK
2006-04-27 11:34:44 +00:00
case 50 :
/* rule 50 can match eol */
2006-04-24 17:41:27 +00:00
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 345 "ael.flex"
2006-04-26 18:40:09 +00:00
{
2006-04-27 11:43:34 +00:00
char c = yytext [ yyleng - 1 ] ;
2006-04-27 17:10:15 +00:00
STORE_START ;
2006-04-27 11:43:34 +00:00
if ( pbcpop ( c ) ) { /* error */
2006-04-27 17:10:15 +00:00
STORE_END ;
2006-04-27 11:43:34 +00:00
ast_log ( LOG_ERROR , " File=%s, line=%d, column=%d: Mismatched '%c' in expression! \n " , my_file , my_lineno , my_col , c ) ;
2006-04-26 18:40:09 +00:00
BEGIN ( 0 ) ;
yylval - > str = strdup ( yytext ) ;
return word ;
}
yymore ( ) ;
}
2006-04-24 17:41:27 +00:00
YY_BREAK
2006-04-27 11:34:44 +00:00
case 51 :
/* rule 51 can match eol */
2006-04-24 17:41:27 +00:00
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 360 "ael.flex"
2006-04-27 01:07:24 +00:00
{
2006-04-27 11:34:44 +00:00
char c = yytext [ yyleng - 1 ] ;
2006-04-27 17:10:15 +00:00
STORE_START ;
2006-04-27 01:07:24 +00:00
yymore ( ) ;
2006-04-27 11:34:44 +00:00
pbcpush ( c ) ;
2006-04-27 17:16:41 +00:00
}
2006-04-24 17:41:27 +00:00
YY_BREAK
2006-04-27 11:43:34 +00:00
case 52 :
/* rule 52 can match eol */
2006-04-24 17:41:27 +00:00
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 367 "ael.flex"
2006-04-27 01:07:24 +00:00
{
2006-04-27 11:43:34 +00:00
char c = yytext [ yyleng - 1 ] ;
2006-04-27 17:10:15 +00:00
STORE_START ;
2006-04-27 11:43:34 +00:00
if ( pbcpop ( c ) ) { /* error */
2006-04-27 17:10:15 +00:00
STORE_END ;
2006-04-27 11:43:34 +00:00
ast_log ( LOG_ERROR , " File=%s, line=%d, column=%d: Mismatched '%c' in expression! \n " , my_file , my_lineno , my_col , c ) ;
2006-04-26 18:40:09 +00:00
BEGIN ( 0 ) ;
yylval - > str = strdup ( yytext ) ;
return word ;
}
yymore ( ) ;
}
2006-04-24 17:41:27 +00:00
YY_BREAK
2006-04-27 11:43:34 +00:00
case 53 :
/* rule 53 can match eol */
2006-04-24 17:41:27 +00:00
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 380 "ael.flex"
2006-04-26 18:40:09 +00:00
{
2006-04-27 17:10:15 +00:00
STORE_START ;
STORE_END ;
2006-04-26 18:40:09 +00:00
yylval - > str = strdup ( yytext ) ;
if ( yyleng > 1 )
* ( yylval - > str + yyleng - 1 ) = 0 ;
unput ( ' ; ' ) ;
BEGIN ( 0 ) ;
return word ;
}
2006-04-24 17:41:27 +00:00
YY_BREAK
2006-04-27 11:43:34 +00:00
case 54 :
/* rule 54 can match eol */
2006-04-24 17:41:27 +00:00
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 391 "ael.flex"
2006-04-26 18:40:09 +00:00
{
FILE * in1 ;
char fnamebuf [ 1024 ] , * p1 , * p2 ;
2006-04-27 19:29:14 +00:00
int error = 1 ; /* don't use the file if set */
p1 = strchr ( yytext , ' " ' ) ;
p2 = strrchr ( yytext , ' " ' ) ;
2006-04-26 18:40:09 +00:00
if ( include_stack_index > = MAX_INCLUDE_DEPTH ) {
ast_log ( LOG_ERROR , " File=%s, line=%d, column=%d: Includes nested too deeply! Wow!!! How did you do that? \n " , my_file , my_lineno , my_col ) ;
2006-04-27 19:29:14 +00:00
} else if ( ( int ) ( p2 - p1 ) > sizeof ( fnamebuf ) - 1 ) {
ast_log ( LOG_ERROR , " File=%s, line=%d, column=%d: Filename is incredibly way too long (%d chars!). Inclusion ignored! \n " , my_file , my_lineno , my_col , yyleng - 10 ) ;
2006-04-26 18:40:09 +00:00
} else {
2006-04-27 19:29:14 +00:00
int i ;
strncpy ( fnamebuf , p1 , p2 - p1 ) ;
fnamebuf [ p2 - p1 ] = 0 ;
for ( i = 0 ; i < include_stack_index ; i + + ) {
if ( ! strcmp ( fnamebuf , include_stack [ i ] . fname ) ) {
ast_log ( LOG_ERROR , " File=%s, line=%d, column=%d: Nice Try!!! But %s has already been included (perhaps by another file), and would cause an infinite loop of file inclusions!!! Include directive ignored \n " ,
my_file , my_lineno , my_col , fnamebuf ) ;
break ;
2006-04-26 18:40:09 +00:00
}
}
2006-04-27 19:29:14 +00:00
if ( i = = include_stack_index )
error = 0 ; /* we can use this file */
}
if ( ! error ) { /* valid file name */
* p2 = 0 ;
/* relative vs. absolute */
if ( * ( p1 + 1 ) ! = ' / ' ) {
/* XXX must check overflows */
strcpy ( fnamebuf , ast_config_AST_CONFIG_DIR ) ;
strcat ( fnamebuf , " / " ) ;
strcat ( fnamebuf , p1 + 1 ) ;
} else
strcpy ( fnamebuf , p1 + 1 ) ;
in1 = fopen ( fnamebuf , " r " ) ;
if ( ! in1 ) {
ast_log ( LOG_ERROR , " File=%s, line=%d, column=%d: Couldn't find the include file: %s; ignoring the Include directive! \n " , my_file , my_lineno , my_col , fnamebuf ) ;
} else {
char * buffer ;
struct stat stats ;
stat ( fnamebuf , & stats ) ;
buffer = ( char * ) malloc ( stats . st_size + 1 ) ;
fread ( buffer , 1 , stats . st_size , in1 ) ;
buffer [ stats . st_size ] = 0 ;
ast_log ( LOG_NOTICE , " --Read in included file %s, %d chars \n " , fnamebuf , ( int ) stats . st_size ) ;
fclose ( in1 ) ;
include_stack [ include_stack_index ] . fname = my_file ;
my_file = strdup ( fnamebuf ) ;
include_stack [ include_stack_index ] . lineno = my_lineno ;
include_stack [ include_stack_index ] . colno = my_col + yyleng ;
include_stack [ include_stack_index + + ] . bufstate = YY_CURRENT_BUFFER ;
ael_yy_switch_to_buffer ( ael_yy_scan_string ( buffer , yyscanner ) , yyscanner ) ;
free ( buffer ) ;
my_lineno = 1 ;
my_col = 1 ;
BEGIN ( INITIAL ) ;
}
2006-04-26 18:40:09 +00:00
}
}
2006-04-24 17:41:27 +00:00
YY_BREAK
case YY_STATE_EOF ( INITIAL ) :
case YY_STATE_EOF ( paren ) :
case YY_STATE_EOF ( semic ) :
case YY_STATE_EOF ( argg ) :
2006-04-27 21:09:52 +00:00
# line 453 "ael.flex"
2006-04-26 18:40:09 +00:00
{
if ( - - include_stack_index < 0 ) {
yyterminate ( ) ;
} else {
free ( my_file ) ;
ael_yy_delete_buffer ( YY_CURRENT_BUFFER , yyscanner ) ;
ael_yy_switch_to_buffer ( include_stack [ include_stack_index ] . bufstate , yyscanner ) ;
my_lineno = include_stack [ include_stack_index ] . lineno ;
my_col = include_stack [ include_stack_index ] . colno ;
my_file = include_stack [ include_stack_index ] . fname ;
}
}
2006-04-24 17:41:27 +00:00
YY_BREAK
2006-04-27 11:43:34 +00:00
case 55 :
2006-04-24 17:41:27 +00:00
YY_RULE_SETUP
2006-04-27 21:09:52 +00:00
# line 466 "ael.flex"
2006-04-24 17:41:27 +00:00
ECHO ;
YY_BREAK
2006-04-27 21:09:52 +00:00
# line 1623 "ael_lex.c"
2006-04-24 17:41:27 +00:00
case YY_END_OF_BUFFER :
{
/* Amount of text matched not including the EOB char. */
int yy_amount_of_matched_text = ( int ) ( yy_cp - yyg - > yytext_ptr ) - 1 ;
/* Undo the effects of YY_DO_BEFORE_ACTION. */
* yy_cp = yyg - > 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 yyin at a new source and called
* ael_yylex ( ) . 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 .
*/
yyg - > yy_n_chars = YY_CURRENT_BUFFER_LVALUE - > yy_n_chars ;
YY_CURRENT_BUFFER_LVALUE - > yy_input_file = yyin ;
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 ( yyg - > yy_c_buf_p < = & YY_CURRENT_BUFFER_LVALUE - > yy_ch_buf [ yyg - > yy_n_chars ] )
{ /* This was really a NUL. */
yy_state_type yy_next_state ;
yyg - > yy_c_buf_p = yyg - > yytext_ptr + yy_amount_of_matched_text ;
yy_current_state = yy_get_previous_state ( yyscanner ) ;
/* 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 , yyscanner ) ;
yy_bp = yyg - > yytext_ptr + YY_MORE_ADJ ;
if ( yy_next_state )
{
/* Consume the NUL. */
yy_cp = + + yyg - > yy_c_buf_p ;
yy_current_state = yy_next_state ;
goto yy_match ;
}
else
{
yy_cp = yyg - > yy_last_accepting_cpos ;
yy_current_state = yyg - > yy_last_accepting_state ;
goto yy_find_action ;
}
}
else switch ( yy_get_next_buffer ( yyscanner ) )
{
case EOB_ACT_END_OF_FILE :
{
yyg - > yy_did_buffer_switch_on_eof = 0 ;
if ( ael_yywrap ( yyscanner ) )
{
/* Note: because we've taken care in
* yy_get_next_buffer ( ) to have set up
* yytext , 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 .
*/
yyg - > yy_c_buf_p = yyg - > yytext_ptr + YY_MORE_ADJ ;
yy_act = YY_STATE_EOF ( YY_START ) ;
goto do_action ;
}
else
{
if ( ! yyg - > yy_did_buffer_switch_on_eof )
YY_NEW_FILE ;
}
break ;
}
case EOB_ACT_CONTINUE_SCAN :
yyg - > yy_c_buf_p =
yyg - > yytext_ptr + yy_amount_of_matched_text ;
yy_current_state = yy_get_previous_state ( yyscanner ) ;
yy_cp = yyg - > yy_c_buf_p ;
yy_bp = yyg - > yytext_ptr + YY_MORE_ADJ ;
goto yy_match ;
case EOB_ACT_LAST_MATCH :
yyg - > yy_c_buf_p =
& YY_CURRENT_BUFFER_LVALUE - > yy_ch_buf [ yyg - > yy_n_chars ] ;
yy_current_state = yy_get_previous_state ( yyscanner ) ;
yy_cp = yyg - > yy_c_buf_p ;
yy_bp = yyg - > 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 ael_yylex */
/* 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 ( yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
register char * dest = YY_CURRENT_BUFFER_LVALUE - > yy_ch_buf ;
register char * source = yyg - > yytext_ptr ;
register int number_to_move , i ;
int ret_val ;
if ( yyg - > yy_c_buf_p > & YY_CURRENT_BUFFER_LVALUE - > yy_ch_buf [ yyg - > 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 ( yyg - > yy_c_buf_p - yyg - > 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 ) ( yyg - > yy_c_buf_p - yyg - > 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 = yyg - > 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 ) ( yyg - > 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. */
ael_yyrealloc ( ( void * ) b - > yy_ch_buf , b - > yy_buf_size + 2 , yyscanner ) ;
}
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 " ) ;
yyg - > 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 ] ) ,
yyg - > yy_n_chars , num_to_read ) ;
YY_CURRENT_BUFFER_LVALUE - > yy_n_chars = yyg - > yy_n_chars ;
}
if ( yyg - > yy_n_chars = = 0 )
{
if ( number_to_move = = YY_MORE_ADJ )
{
ret_val = EOB_ACT_END_OF_FILE ;
ael_yyrestart ( yyin , yyscanner ) ;
}
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 ;
yyg - > yy_n_chars + = number_to_move ;
YY_CURRENT_BUFFER_LVALUE - > yy_ch_buf [ yyg - > yy_n_chars ] = YY_END_OF_BUFFER_CHAR ;
YY_CURRENT_BUFFER_LVALUE - > yy_ch_buf [ yyg - > yy_n_chars + 1 ] = YY_END_OF_BUFFER_CHAR ;
yyg - > 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 ( yyscan_t yyscanner )
{
register yy_state_type yy_current_state ;
register char * yy_cp ;
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
yy_current_state = yyg - > yy_start ;
for ( yy_cp = yyg - > yytext_ptr + YY_MORE_ADJ ; yy_cp < yyg - > 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 ] )
{
yyg - > yy_last_accepting_state = yy_current_state ;
yyg - > 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 ] ;
2006-04-27 11:43:34 +00:00
if ( yy_current_state > = 206 )
2006-04-24 17:41:27 +00:00
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 , yyscan_t yyscanner )
{
register int yy_is_jam ;
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ; /* This var may be unused depending upon options. */
register char * yy_cp = yyg - > yy_c_buf_p ;
register YY_CHAR yy_c = 1 ;
if ( yy_accept [ yy_current_state ] )
{
yyg - > yy_last_accepting_state = yy_current_state ;
yyg - > 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 ] ;
2006-04-27 11:43:34 +00:00
if ( yy_current_state > = 206 )
2006-04-24 17:41:27 +00:00
yy_c = yy_meta [ ( unsigned int ) yy_c ] ;
}
yy_current_state = yy_nxt [ yy_base [ yy_current_state ] + ( unsigned int ) yy_c ] ;
2006-04-27 11:43:34 +00:00
yy_is_jam = ( yy_current_state = = 205 ) ;
2006-04-24 17:41:27 +00:00
return yy_is_jam ? 0 : yy_current_state ;
}
static void yyunput ( int c , register char * yy_bp , yyscan_t yyscanner )
{
register char * yy_cp ;
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
yy_cp = yyg - > yy_c_buf_p ;
/* undo effects of setting up yytext */
* yy_cp = yyg - > 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 = yyg - > 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 =
yyg - > 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 ;
yyg - > yytext_ptr = yy_bp ;
yyg - > yy_hold_char = * yy_cp ;
yyg - > yy_c_buf_p = yy_cp ;
}
# ifndef YY_NO_INPUT
# ifdef __cplusplus
static int yyinput ( yyscan_t yyscanner )
# else
static int input ( yyscan_t yyscanner )
# endif
{
int c ;
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
* yyg - > yy_c_buf_p = yyg - > yy_hold_char ;
if ( * yyg - > 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 ( yyg - > yy_c_buf_p < & YY_CURRENT_BUFFER_LVALUE - > yy_ch_buf [ yyg - > yy_n_chars ] )
/* This was really a NUL. */
* yyg - > yy_c_buf_p = ' \0 ' ;
else
{ /* need more input */
int offset = yyg - > yy_c_buf_p - yyg - > yytext_ptr ;
+ + yyg - > yy_c_buf_p ;
switch ( yy_get_next_buffer ( yyscanner ) )
{
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. */
ael_yyrestart ( yyin , yyscanner ) ;
/*FALLTHROUGH*/
case EOB_ACT_END_OF_FILE :
{
if ( ael_yywrap ( yyscanner ) )
return EOF ;
if ( ! yyg - > yy_did_buffer_switch_on_eof )
YY_NEW_FILE ;
# ifdef __cplusplus
return yyinput ( yyscanner ) ;
# else
return input ( yyscanner ) ;
# endif
}
case EOB_ACT_CONTINUE_SCAN :
yyg - > yy_c_buf_p = yyg - > yytext_ptr + offset ;
break ;
}
}
}
c = * ( unsigned char * ) yyg - > yy_c_buf_p ; /* cast for 8-bit char's */
* yyg - > yy_c_buf_p = ' \0 ' ; /* preserve yytext */
yyg - > yy_hold_char = * + + yyg - > yy_c_buf_p ;
return c ;
}
# endif /* ifndef YY_NO_INPUT */
/** Immediately switch to a different input stream.
* @ param input_file A readable stream .
* @ param yyscanner The scanner object .
* @ note This function does not reset the start condition to @ c INITIAL .
*/
void ael_yyrestart ( FILE * input_file , yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
if ( ! YY_CURRENT_BUFFER ) {
ael_yyensure_buffer_stack ( yyscanner ) ;
YY_CURRENT_BUFFER_LVALUE =
ael_yy_create_buffer ( yyin , YY_BUF_SIZE , yyscanner ) ;
}
ael_yy_init_buffer ( YY_CURRENT_BUFFER , input_file , yyscanner ) ;
ael_yy_load_buffer_state ( yyscanner ) ;
}
/** Switch to a different input buffer.
* @ param new_buffer The new input buffer .
* @ param yyscanner The scanner object .
*/
void ael_yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
/* TODO. We should be able to replace this entire function body
* with
* ael_yypop_buffer_state ( ) ;
* ael_yypush_buffer_state ( new_buffer ) ;
*/
ael_yyensure_buffer_stack ( yyscanner ) ;
if ( YY_CURRENT_BUFFER = = new_buffer )
return ;
if ( YY_CURRENT_BUFFER )
{
/* Flush out information for old buffer. */
* yyg - > yy_c_buf_p = yyg - > yy_hold_char ;
YY_CURRENT_BUFFER_LVALUE - > yy_buf_pos = yyg - > yy_c_buf_p ;
YY_CURRENT_BUFFER_LVALUE - > yy_n_chars = yyg - > yy_n_chars ;
}
YY_CURRENT_BUFFER_LVALUE = new_buffer ;
ael_yy_load_buffer_state ( yyscanner ) ;
/* We don't actually know whether we did this switch during
* EOF ( ael_yywrap ( ) ) processing , but the only time this flag
* is looked at is after ael_yywrap ( ) is called , so it ' s safe
* to go ahead and always set it .
*/
yyg - > yy_did_buffer_switch_on_eof = 1 ;
}
static void ael_yy_load_buffer_state ( yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
yyg - > yy_n_chars = YY_CURRENT_BUFFER_LVALUE - > yy_n_chars ;
yyg - > yytext_ptr = yyg - > yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE - > yy_buf_pos ;
yyin = YY_CURRENT_BUFFER_LVALUE - > yy_input_file ;
yyg - > yy_hold_char = * yyg - > 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 .
* @ param yyscanner The scanner object .
* @ return the allocated buffer state .
*/
YY_BUFFER_STATE ael_yy_create_buffer ( FILE * file , int size , yyscan_t yyscanner )
{
YY_BUFFER_STATE b ;
b = ( YY_BUFFER_STATE ) ael_yyalloc ( sizeof ( struct yy_buffer_state ) , yyscanner ) ;
if ( ! b )
YY_FATAL_ERROR ( " out of dynamic memory in ael_yy_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 * ) ael_yyalloc ( b - > yy_buf_size + 2 , yyscanner ) ;
if ( ! b - > yy_ch_buf )
YY_FATAL_ERROR ( " out of dynamic memory in ael_yy_create_buffer() " ) ;
b - > yy_is_our_buffer = 1 ;
ael_yy_init_buffer ( b , file , yyscanner ) ;
return b ;
}
/** Destroy the buffer.
* @ param b a buffer created with ael_yy_create_buffer ( )
* @ param yyscanner The scanner object .
*/
void ael_yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
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 )
ael_yyfree ( ( void * ) b - > yy_ch_buf , yyscanner ) ;
ael_yyfree ( ( void * ) b , yyscanner ) ;
}
# 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 ael_yyrestart ( ) or at EOF .
*/
static void ael_yy_init_buffer ( YY_BUFFER_STATE b , FILE * file , yyscan_t yyscanner )
{
int oerrno = errno ;
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
ael_yy_flush_buffer ( b , yyscanner ) ;
b - > yy_input_file = file ;
b - > yy_fill_buffer = 1 ;
/* If b is the current buffer, then ael_yy_init_buffer was _probably_
* called from ael_yyrestart ( ) 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 .
* @ param yyscanner The scanner object .
*/
void ael_yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
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 )
ael_yy_load_buffer_state ( yyscanner ) ;
}
/** 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 .
* @ param yyscanner The scanner object .
*/
void ael_yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
if ( new_buffer = = NULL )
return ;
ael_yyensure_buffer_stack ( yyscanner ) ;
/* This block is copied from ael_yy_switch_to_buffer. */
if ( YY_CURRENT_BUFFER )
{
/* Flush out information for old buffer. */
* yyg - > yy_c_buf_p = yyg - > yy_hold_char ;
YY_CURRENT_BUFFER_LVALUE - > yy_buf_pos = yyg - > yy_c_buf_p ;
YY_CURRENT_BUFFER_LVALUE - > yy_n_chars = yyg - > yy_n_chars ;
}
/* Only push if top exists. Otherwise, replace top. */
if ( YY_CURRENT_BUFFER )
yyg - > yy_buffer_stack_top + + ;
YY_CURRENT_BUFFER_LVALUE = new_buffer ;
/* copied from ael_yy_switch_to_buffer. */
ael_yy_load_buffer_state ( yyscanner ) ;
yyg - > yy_did_buffer_switch_on_eof = 1 ;
}
/** Removes and deletes the top of the stack, if present.
* The next element becomes the new top .
* @ param yyscanner The scanner object .
*/
void ael_yypop_buffer_state ( yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
if ( ! YY_CURRENT_BUFFER )
return ;
ael_yy_delete_buffer ( YY_CURRENT_BUFFER , yyscanner ) ;
YY_CURRENT_BUFFER_LVALUE = NULL ;
if ( yyg - > yy_buffer_stack_top > 0 )
- - yyg - > yy_buffer_stack_top ;
if ( YY_CURRENT_BUFFER ) {
ael_yy_load_buffer_state ( yyscanner ) ;
yyg - > yy_did_buffer_switch_on_eof = 1 ;
}
}
/* Allocates the stack if it does not exist.
* Guarantees space for at least one push .
*/
static void ael_yyensure_buffer_stack ( yyscan_t yyscanner )
{
int num_to_alloc ;
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
if ( ! yyg - > 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 ;
yyg - > yy_buffer_stack = ( struct yy_buffer_state * * ) ael_yyalloc
( num_to_alloc * sizeof ( struct yy_buffer_state * )
, yyscanner ) ;
memset ( yyg - > yy_buffer_stack , 0 , num_to_alloc * sizeof ( struct yy_buffer_state * ) ) ;
yyg - > yy_buffer_stack_max = num_to_alloc ;
yyg - > yy_buffer_stack_top = 0 ;
return ;
}
if ( yyg - > yy_buffer_stack_top > = ( yyg - > yy_buffer_stack_max ) - 1 ) {
/* Increase the buffer to prepare for a possible push. */
int grow_size = 8 /* arbitrary grow size */ ;
num_to_alloc = yyg - > yy_buffer_stack_max + grow_size ;
yyg - > yy_buffer_stack = ( struct yy_buffer_state * * ) ael_yyrealloc
( yyg - > yy_buffer_stack ,
num_to_alloc * sizeof ( struct yy_buffer_state * )
, yyscanner ) ;
/* zero only the new slots.*/
memset ( yyg - > yy_buffer_stack + yyg - > yy_buffer_stack_max , 0 , grow_size * sizeof ( struct yy_buffer_state * ) ) ;
yyg - > 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
* @ param yyscanner The scanner object .
* @ return the newly allocated buffer state object .
*/
YY_BUFFER_STATE ael_yy_scan_buffer ( char * base , yy_size_t size , yyscan_t yyscanner )
{
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 ) ael_yyalloc ( sizeof ( struct yy_buffer_state ) , yyscanner ) ;
if ( ! b )
YY_FATAL_ERROR ( " out of dynamic memory in ael_yy_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 ;
ael_yy_switch_to_buffer ( b , yyscanner ) ;
return b ;
}
/** Setup the input buffer state to scan a string. The next call to ael_yylex() will
* scan from a @ e copy of @ a str .
* @ param yystr a NUL - terminated string to scan
* @ param yyscanner The scanner object .
* @ return the newly allocated buffer state object .
* @ note If you want to scan bytes that may contain NUL values , then use
* ael_yy_scan_bytes ( ) instead .
*/
YY_BUFFER_STATE ael_yy_scan_string ( yyconst char * yystr , yyscan_t yyscanner )
{
return ael_yy_scan_bytes ( yystr , strlen ( yystr ) , yyscanner ) ;
}
/** Setup the input buffer state to scan the given bytes. The next call to ael_yylex() 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 .
* @ param yyscanner The scanner object .
* @ return the newly allocated buffer state object .
*/
YY_BUFFER_STATE ael_yy_scan_bytes ( yyconst char * yybytes , int _yybytes_len , yyscan_t yyscanner )
{
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 * ) ael_yyalloc ( n , yyscanner ) ;
if ( ! buf )
YY_FATAL_ERROR ( " out of dynamic memory in ael_yy_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 = ael_yy_scan_buffer ( buf , n , yyscanner ) ;
if ( ! b )
YY_FATAL_ERROR ( " bad buffer in ael_yy_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 , yyscan_t yyscanner )
{
( 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 yytext. */ \
int yyless_macro_arg = ( n ) ; \
YY_LESS_LINENO ( yyless_macro_arg ) ; \
yytext [ yyleng ] = yyg - > yy_hold_char ; \
yyg - > yy_c_buf_p = yytext + yyless_macro_arg ; \
yyg - > yy_hold_char = * yyg - > yy_c_buf_p ; \
* yyg - > yy_c_buf_p = ' \0 ' ; \
yyleng = yyless_macro_arg ; \
} \
while ( 0 )
/* Accessor methods (get/set functions) to struct members. */
/** Get the user-defined data for this scanner.
* @ param yyscanner The scanner object .
*/
YY_EXTRA_TYPE ael_yyget_extra ( yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
return yyextra ;
}
/** Get the current line number.
* @ param yyscanner The scanner object .
*/
int ael_yyget_lineno ( yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
if ( ! YY_CURRENT_BUFFER )
return 0 ;
return yylineno ;
}
/** Get the current column number.
* @ param yyscanner The scanner object .
*/
int ael_yyget_column ( yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
if ( ! YY_CURRENT_BUFFER )
return 0 ;
return yycolumn ;
}
/** Get the input stream.
* @ param yyscanner The scanner object .
*/
FILE * ael_yyget_in ( yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
return yyin ;
}
/** Get the output stream.
* @ param yyscanner The scanner object .
*/
FILE * ael_yyget_out ( yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
return yyout ;
}
/** Get the length of the current token.
* @ param yyscanner The scanner object .
*/
int ael_yyget_leng ( yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
return yyleng ;
}
/** Get the current token.
* @ param yyscanner The scanner object .
*/
char * ael_yyget_text ( yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
return yytext ;
}
/** Set the user-defined data. This data is never touched by the scanner.
* @ param user_defined The data to be associated with this scanner .
* @ param yyscanner The scanner object .
*/
void ael_yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
yyextra = user_defined ;
}
/** Set the current line number.
* @ param line_number
* @ param yyscanner The scanner object .
*/
void ael_yyset_lineno ( int line_number , yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
/* lineno is only valid if an input buffer exists. */
if ( ! YY_CURRENT_BUFFER )
yy_fatal_error ( " ael_yyset_lineno called with no buffer " , yyscanner ) ;
yylineno = line_number ;
}
/** Set the current column.
* @ param line_number
* @ param yyscanner The scanner object .
*/
void ael_yyset_column ( int column_no , yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
/* column is only valid if an input buffer exists. */
if ( ! YY_CURRENT_BUFFER )
yy_fatal_error ( " ael_yyset_column called with no buffer " , yyscanner ) ;
yycolumn = column_no ;
}
/** Set the input stream. This does not discard the current
* input buffer .
* @ param in_str A readable stream .
* @ param yyscanner The scanner object .
* @ see ael_yy_switch_to_buffer
*/
void ael_yyset_in ( FILE * in_str , yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
yyin = in_str ;
}
void ael_yyset_out ( FILE * out_str , yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
yyout = out_str ;
}
int ael_yyget_debug ( yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
return yy_flex_debug ;
}
void ael_yyset_debug ( int bdebug , yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
yy_flex_debug = bdebug ;
}
/* Accessor methods for yylval and yylloc */
YYSTYPE * ael_yyget_lval ( yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
return yylval ;
}
void ael_yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
yylval = yylval_param ;
}
YYLTYPE * ael_yyget_lloc ( yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
return yylloc ;
}
void ael_yyset_lloc ( YYLTYPE * yylloc_param , yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
yylloc = yylloc_param ;
}
/* User-visible API */
/* ael_yylex_init is special because it creates the scanner itself, so it is
* the ONLY reentrant function that doesn ' t take the scanner as the last argument .
* That ' s why we explicitly handle the declaration , instead of using our macros .
*/
int ael_yylex_init ( yyscan_t * ptr_yy_globals )
{
if ( ptr_yy_globals = = NULL ) {
errno = EINVAL ;
return 1 ;
}
* ptr_yy_globals = ( yyscan_t ) ael_yyalloc ( sizeof ( struct yyguts_t ) , NULL ) ;
if ( * ptr_yy_globals = = NULL ) {
errno = ENOMEM ;
return 1 ;
}
/* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
memset ( * ptr_yy_globals , 0x00 , sizeof ( struct yyguts_t ) ) ;
return yy_init_globals ( * ptr_yy_globals ) ;
}
static int yy_init_globals ( yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
/* Initialization is the same as for the non-reentrant scanner.
* This function is called from ael_yylex_destroy ( ) , so don ' t allocate here .
*/
yyg - > yy_buffer_stack = 0 ;
yyg - > yy_buffer_stack_top = 0 ;
yyg - > yy_buffer_stack_max = 0 ;
yyg - > yy_c_buf_p = ( char * ) 0 ;
yyg - > yy_init = 0 ;
yyg - > yy_start = 0 ;
yyg - > yy_start_stack_ptr = 0 ;
yyg - > yy_start_stack_depth = 0 ;
yyg - > yy_start_stack = NULL ;
/* Defined in main.c */
# ifdef YY_STDINIT
yyin = stdin ;
yyout = stdout ;
# else
yyin = ( FILE * ) 0 ;
yyout = ( FILE * ) 0 ;
# endif
/* For future reference: Set errno on error, since we are called by
* ael_yylex_init ( )
*/
return 0 ;
}
/* ael_yylex_destroy is for both reentrant and non-reentrant scanners. */
int ael_yylex_destroy ( yyscan_t yyscanner )
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
/* Pop the buffer stack, destroying each element. */
while ( YY_CURRENT_BUFFER ) {
ael_yy_delete_buffer ( YY_CURRENT_BUFFER , yyscanner ) ;
YY_CURRENT_BUFFER_LVALUE = NULL ;
ael_yypop_buffer_state ( yyscanner ) ;
}
/* Destroy the stack itself. */
ael_yyfree ( yyg - > yy_buffer_stack , yyscanner ) ;
yyg - > yy_buffer_stack = NULL ;
/* Destroy the start condition stack. */
ael_yyfree ( yyg - > yy_start_stack , yyscanner ) ;
yyg - > yy_start_stack = NULL ;
/* Reset the globals. This is important in a non-reentrant scanner so the next time
* ael_yylex ( ) is called , initialization will occur . */
yy_init_globals ( yyscanner ) ;
/* Destroy the main struct (reentrant only). */
ael_yyfree ( yyscanner , yyscanner ) ;
yyscanner = NULL ;
return 0 ;
}
/*
* Internal utility routines .
*/
# ifndef yytext_ptr
static void yy_flex_strncpy ( char * s1 , yyconst char * s2 , int n , yyscan_t yyscanner )
{
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 , yyscan_t yyscanner )
{
register int n ;
for ( n = 0 ; s [ n ] ; + + n )
;
return n ;
}
# endif
void * ael_yyalloc ( yy_size_t size , yyscan_t yyscanner )
{
return ( void * ) malloc ( size ) ;
}
void * ael_yyrealloc ( void * ptr , yy_size_t size , yyscan_t yyscanner )
{
/* 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 ael_yyfree ( void * ptr , yyscan_t yyscanner )
{
free ( ( char * ) ptr ) ; /* see ael_yyrealloc() for (char *) cast */
}
# define YYTABLES_NAME "yytables"
2006-04-27 21:09:52 +00:00
# line 466 "ael.flex"
2006-04-24 17:41:27 +00:00
static void pbcpush ( char x )
{
pbcstack [ pbcpos + + ] = x ;
}
static int pbcpop ( char x )
{
if ( ( x = = ' ) ' & & pbcstack [ pbcpos - 1 ] = = ' ( ' )
| | ( x = = ' ] ' & & pbcstack [ pbcpos - 1 ] = = ' [ ' )
| | ( x = = ' } ' & & pbcstack [ pbcpos - 1 ] = = ' { ' ) ) {
pbcpos - - ;
return 0 ;
}
2006-04-26 18:40:09 +00:00
return 1 ; /* error */
2006-04-24 17:41:27 +00:00
}
2006-04-27 10:13:39 +00:00
static int c_prevword ( void )
2006-04-24 17:41:27 +00:00
{
2006-04-26 18:40:09 +00:00
char * c = prev_word ;
2006-04-27 11:20:26 +00:00
if ( c = = NULL )
return 0 ;
while ( * c ) {
2006-04-26 18:40:09 +00:00
switch ( * c ) {
2006-04-27 11:20:26 +00:00
case ' { ' :
case ' [ ' :
case ' ( ' :
pbcpush ( * c ) ;
break ;
case ' } ' :
case ' ] ' :
case ' ) ' :
if ( pbcpop ( * c ) )
return 1 ;
break ;
2006-04-26 18:40:09 +00:00
}
2006-04-24 17:41:27 +00:00
c + + ;
}
return 0 ;
}
2006-04-27 00:05:05 +00:00
/* used by the bison code */
void reset_parencount ( yyscan_t yyscanner ) ;
void reset_parencount ( yyscan_t yyscanner )
2006-04-24 17:41:27 +00:00
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
parencount = 0 ;
pbcpos = 0 ;
pbcpush ( ' ( ' ) ;
c_prevword ( ) ;
BEGIN ( paren ) ;
}
2006-04-27 00:05:05 +00:00
/* used by the bison code */
void reset_semicount ( yyscan_t yyscanner ) ;
void reset_semicount ( yyscan_t yyscanner )
2006-04-24 17:41:27 +00:00
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
pbcpos = 0 ;
BEGIN ( semic ) ;
}
2006-04-27 00:05:05 +00:00
/* used by the bison code */
void reset_argcount ( yyscan_t yyscanner ) ;
void reset_argcount ( yyscan_t yyscanner )
2006-04-24 17:41:27 +00:00
{
struct yyguts_t * yyg = ( struct yyguts_t * ) yyscanner ;
parencount = 0 ;
pbcpos = 0 ;
commaout = 0 ;
pbcpush ( ' ( ' ) ;
c_prevword ( ) ;
BEGIN ( argg ) ;
}
2006-04-26 22:41:16 +00:00
/* used elsewhere, but some local vars */
2006-04-24 17:41:27 +00:00
struct pval * ael2_parse ( char * filename , int * errors )
{
struct pval * pval ;
struct parse_io * io ;
char * buffer ;
struct stat stats ;
FILE * fin ;
/* extern int ael_yydebug; */
io = calloc ( sizeof ( struct parse_io ) , 1 ) ;
/* reset the global counters */
prev_word = 0 ;
my_lineno = 1 ;
include_stack_index = 0 ;
my_col = 0 ;
/* ael_yydebug = 1; */
ael_yylex_init ( & io - > scanner ) ;
fin = fopen ( filename , " r " ) ;
if ( ! fin ) {
ast_log ( LOG_ERROR , " File %s could not be opened \n " , filename ) ;
* errors = 1 ;
return 0 ;
}
my_file = strdup ( filename ) ;
stat ( filename , & stats ) ;
buffer = ( char * ) malloc ( stats . st_size + 2 ) ;
fread ( buffer , 1 , stats . st_size , fin ) ;
buffer [ stats . st_size ] = 0 ;
fclose ( fin ) ;
2006-04-26 18:40:09 +00:00
2006-04-24 17:41:27 +00:00
ael_yy_scan_string ( buffer , io - > scanner ) ;
ael_yyset_lineno ( 1 , io - > scanner ) ;
/* ael_yyset_in (fin , io->scanner); OLD WAY */
ael_yyparse ( io ) ;
pval = io - > pval ;
* errors = io - > syntax_error_count ;
ael_yylex_destroy ( io - > scanner ) ;
free ( buffer ) ;
free ( io ) ;
return pval ;
}