Skip to content
Snippets Groups Projects
ast_expr2f.c 97.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • Tilghman Lesher's avatar
     
    Tilghman Lesher committed
           38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
           38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
           38,   38,   38,   38,   38,   38,   38,   38
        },
    
        {
            7,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
          -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
          -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
    
          -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
          -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
          -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
          -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
          -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
          -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
          -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
          -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
          -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
          -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39
    
        },
    
        {
            7,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
          -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
          -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
          -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
          -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
          -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
          -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
          -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
          -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
          -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
    
          -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
          -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
          -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40
        },
    
        {
            7,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
          -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
          -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
          -41,  -41,  -41,   36,  -41,   36,   36,   36,  -41,   36,
          -41,  -41,  -41,  -41,   36,  -41,   36,  -41,   41,   41,
           41,   41,   41,   41,   41,   41,   41,   41,  -41,   36,
          -41,  -41,  -41,  -41,   36,   36,   36,   36,   36,   36,
    
           36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
           36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
           36,  -41,   36,  -41,   36,   36,  -41,   36,   36,   36,
           36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
           36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
           36,   36,   36,  -41,  -41,  -41,  -41,  -41
        },
    
        {
            7,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
          -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
          -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
          -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
    
          -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
          -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
          -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
          -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
          -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
          -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
          -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
          -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
          -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42
        },
    
        {
            7,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
    
          -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
          -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
          -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
          -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
          -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
          -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
          -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
          -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
          -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
          -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
    
          -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
          -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43
        },
    
        {
            7,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
          -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
          -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
          -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
          -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
          -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
          -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
          -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
    
          -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
          -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
          -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
          -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
          -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44
        },
    
        {
            7,   45,   45,   45,   45,   45,   45,   45,   45,   45,
           45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
           45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
           45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
           45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
    
           45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
           45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
           45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
           45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
           45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
           45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
           45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
           45,   45,   45,   46,   45,   47,   45,   45
        },
    
        {
            7,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
          -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
    
          -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
          -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
          -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
          -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
          -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
          -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
          -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
          -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
          -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
          -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
    
          -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46
        },
    
        {
            7,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
          -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
          -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
          -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
          -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
          -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
          -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
          -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
          -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
    
          -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
          -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
          -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
          -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47
        },
    
        {
            7,   48,   48,   48,   48,   48,   48,   48,   48,  -48,
          -48,   48,   48,  -48,   48,   48,   48,   48,   48,   48,
           48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
           48,   48,  -48,  -48,   48,   48,  -48,  -48,  -48,   48,
          -48,  -48,  -48,  -48,   48,  -48,   48,  -48,   48,   48,
           48,   48,   48,   48,   48,   48,   48,   48,  -48,   48,
    
          -48,  -48,  -48,  -48,   48,   48,   48,   48,   48,   48,
           48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
           48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
           48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
           48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
           48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
           48,   48,   48,   48,  -48,   48,   48,   48
        },
    
        {
            7,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
          -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
          -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
    
          -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
          -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
          -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
          -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
          -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
          -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
          -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
          -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
          -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
          -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49
    
        },
    
    
    
    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; \
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    	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;
    
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #define YY_NUM_RULES 30
    #define YY_END_OF_BUFFER 31
    
    /* 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;
    	};
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    static yyconst flex_int16_t yy_accept[50] =
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
            0,    0,    0,    0,   27,   27,   31,   30,   20,   22,
           24,   30,   24,   24,   13,    2,   17,   18,   11,    9,
           10,   12,   23,   15,    5,    3,    4,   14,    1,   30,
           26,   25,   27,   28,   28,   24,    8,    0,   21,   19,
           23,   16,    7,    6,    0,   26,   25,   27,   29
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    static yyconst yy_state_type yy_NUL_trans[50] =
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
            8,    8,   30,   30,   33,   33,    0,    0,    0,    0,
            0,   38,    0,    0,    0,    0,    0,    0,    0,    0,
            0,    0,    0,    0,    0,    0,    0,    0,    0,   45,
            0,    0,   48,    0,    0,    0,    0,   38,    0,    0,
            0,    0,    0,    0,   45,    0,    0,   48,    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
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #define yymore() (yyg->yy_more_flag = 1)
    #define YY_MORE_ADJ yyg->yy_more_len
    
    #define YY_RESTORE_YY_MORE_OFFSET
    #line 1 "ast_expr2.fl"
    #line 2 "ast_expr2.fl"
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    /*! \file
     *
     * \brief Dialplan Expression Parser
     */
    
    
    #include <sys/types.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <locale.h>
    #include <ctype.h>
    
    Kevin P. Fleming's avatar
    Kevin P. Fleming committed
    #if !defined(SOLARIS) && !defined(__CYGWIN__)
    
    #endif
    #include <errno.h>
    #include <regex.h>
    #include <limits.h>
    #include <asterisk/ast_expr.h>
    #include <asterisk/logger.h>
    
    
    enum valtype {
    	AST_EXPR_integer, AST_EXPR_numeric_string, AST_EXPR_string
    } ;
    
    struct val {
    	enum valtype type;
    	union {
    		char *s;
    		quad_t i;
    	} u;
    } ;
    
    #include "ast_expr2.h" /* the o/p of the bison on ast_expr2.y */
    
    #define SET_COLUMNS yylloc_param->first_column = (int)(yyg->yytext_r - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf);yylloc_param->last_column = yylloc_param->last_column + yyleng - 1; yylloc_param->first_line = yylloc_param->last_line = 1
    #define SET_STRING yylval_param->val = (struct val *)calloc(sizeof(struct val),1); yylval_param->val->type = AST_EXPR_string; yylval_param->val->u.s = strdup(yytext);
    #define SET_NUMERIC_STRING yylval_param->val = (struct val *)calloc(sizeof(struct val),1); yylval_param->val->type = AST_EXPR_numeric_string; yylval_param->val->u.s = strdup(yytext);
    
    struct parse_io
    {
    	char *string;
    	struct val *val;
    	yyscan_t scanner;
    };
     
    
    void ast_yyset_column(int column_no, yyscan_t yyscanner);
    int ast_yyget_column(yyscan_t yyscanner);
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    static int curlycount = 0;
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 1304 "ast_expr2f.c"
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #define var 1
    #define trail 2
    
    
    /* 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>
    
    #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 */
    
        /* 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 ast_yylex_destroy (yyscan_t yyscanner );
    
    int ast_yyget_debug (yyscan_t yyscanner );
    
    void ast_yyset_debug (int debug_flag ,yyscan_t yyscanner );
    
    YY_EXTRA_TYPE ast_yyget_extra (yyscan_t yyscanner );
    
    void ast_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
    
    FILE *ast_yyget_in (yyscan_t yyscanner );
    
    void ast_yyset_in  (FILE * in_str ,yyscan_t yyscanner );
    
    FILE *ast_yyget_out (yyscan_t yyscanner );
    
    void ast_yyset_out  (FILE * out_str ,yyscan_t yyscanner );
    
    int ast_yyget_leng (yyscan_t yyscanner );
    
    char *ast_yyget_text (yyscan_t yyscanner );
    
    int ast_yyget_lineno (yyscan_t yyscanner );
    
    void ast_yyset_lineno (int line_number ,yyscan_t yyscanner );
    
    YYSTYPE * ast_yyget_lval (yyscan_t yyscanner );
    
    void ast_yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
    
           YYLTYPE *ast_yyget_lloc (yyscan_t yyscanner );
        
            void ast_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 ast_yywrap (yyscan_t yyscanner );
    #else
    extern int ast_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) \
    
    	errno=0; \
    	while ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) \
    	{ \
    		if( errno != EINTR) \
    
    		{ \
    			YY_FATAL_ERROR( "input in flex scanner failed" ); \
    
    \
    
    #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 ast_yylex (YYSTYPE * yylval_param,YYLTYPE * yylloc_param ,yyscan_t yyscanner);
    
    #define YY_DECL int ast_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;
    
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 64 "ast_expr2.fl"
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 1524 "ast_expr2f.c"
    
    
        yylval = yylval_param;
    
        yylloc = yylloc_param;
    
    	if ( yyg->yy_init )
    		{
    		yyg->yy_init = 0;
    
    #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 ) {
    			ast_yyensure_buffer_stack (yyscanner);
    			YY_CURRENT_BUFFER_LVALUE =
    				ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
    		}
    
    		ast_yy_load_buffer_state(yyscanner );
    		}
    
    	while ( 1 )		/* loops until end-of-file is reached */
    		{
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    		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:
    
    		while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 )
    
    			{
    			if ( yy_accept[yy_current_state] )
    				{
    				yyg->yy_last_accepting_state = yy_current_state;
    				yyg->yy_last_accepting_cpos = yy_cp;
    				}
    
    
    		yy_current_state = -yy_current_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 + 1;
    
    			yy_current_state = yyg->yy_last_accepting_state;
    			goto yy_find_action;
    
    case 1:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 66 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_OR;}
    	YY_BREAK
    case 2:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 67 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_AND;}
    	YY_BREAK
    case 3:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 68 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_EQ;}
    	YY_BREAK
    case 4:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 69 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_GT;}
    	YY_BREAK
    case 5:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 70 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_LT;}
    	YY_BREAK
    case 6:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 71 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_GE;}
    	YY_BREAK
    case 7:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 72 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_LE;}
    	YY_BREAK
    case 8:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 73 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_NE;}
    	YY_BREAK
    case 9:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 74 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_PLUS;}
    	YY_BREAK
    case 10:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 75 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_MINUS;}
    	YY_BREAK
    case 11:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 76 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_MULT;}
    	YY_BREAK
    case 12:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 77 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_DIV;}
    	YY_BREAK
    case 13:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 78 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_MOD;}
    	YY_BREAK
    case 14:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 79 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_COND;}
    	YY_BREAK
    case 15:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 80 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_COLON;}
    	YY_BREAK
    case 16:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 81 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_COLONCOLON;}
    	YY_BREAK
    case 17:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 82 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_LP;}
    	YY_BREAK
    case 18:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 83 "ast_expr2.fl"
    
    { SET_COLUMNS; SET_STRING; return TOK_RP;}
    	YY_BREAK
    case 19:
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 84 "ast_expr2.fl"
    {/* gather the contents of ${} expressions, with trailing stuff, into a single TOKEN. They are much more complex now than they used to be */
                           curlycount = 0; BEGIN(var); yymore();}
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 87 "ast_expr2.fl"
    {}
    
    	YY_BREAK
    case 21:
    /* rule 21 can match eol */
    YY_RULE_SETUP
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 88 "ast_expr2.fl"
    {SET_COLUMNS; SET_STRING; return TOKEN;}
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    /* rule 22 can match eol */
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 90 "ast_expr2.fl"
    {/* what to do with eol */}
    	YY_BREAK
    case 23:
    YY_RULE_SETUP
    #line 91 "ast_expr2.fl"
    
    {   SET_COLUMNS;  /* the original behavior of the expression parser was to bring in numbers as a numeric string */
    				SET_NUMERIC_STRING;
    				return TOKEN;}
    	YY_BREAK
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    case 24:
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 94 "ast_expr2.fl"
    
    {SET_COLUMNS; SET_STRING; return TOKEN;}
    	YY_BREAK
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    case 25:
    /* rule 25 can match eol */
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 96 "ast_expr2.fl"
    {curlycount--; if(curlycount < 0){ BEGIN(trail);  yymore();} else {  yymore();}}
    	YY_BREAK
    case 26:
    /* rule 26 can match eol */
    YY_RULE_SETUP
    #line 97 "ast_expr2.fl"
    {curlycount++; yymore();  }
    	YY_BREAK
    case 27:
    YY_RULE_SETUP
    #line 98 "ast_expr2.fl"
    {BEGIN(0); SET_COLUMNS; SET_STRING; return TOKEN;}
    	YY_BREAK
    case 28:
    /* rule 28 can match eol */
    YY_RULE_SETUP
    #line 99 "ast_expr2.fl"
    {char c = yytext[yyleng-1]; BEGIN(0); unput(c); SET_COLUMNS; SET_STRING; return TOKEN;}
    	YY_BREAK
    case 29:
    YY_RULE_SETUP
    #line 100 "ast_expr2.fl"
    {curlycount = 0; BEGIN(var); yymore();  }
    	YY_BREAK
    case YY_STATE_EOF(trail):
    #line 101 "ast_expr2.fl"
    {BEGIN(0); SET_COLUMNS; SET_STRING; return TOKEN; /* actually, if an expr is only a variable ref, this could happen a LOT */}
    	YY_BREAK
    case 30:
    YY_RULE_SETUP
    #line 103 "ast_expr2.fl"
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    #line 1767 "ast_expr2f.c"
    
    Tilghman Lesher's avatar
     
    Tilghman Lesher committed
    case YY_STATE_EOF(var):
    
    	yyterminate();
    
    	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
    			 * ast_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_c_buf_p;
    
    				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 ( ast_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 ast_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
    		{
    			size_t 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. */
    					ast_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 );