[Forensics-changes] [yara] 01/04: Regenerate re_lexer.c using flex 2.6.1

Hilko Bengen bengen at moszumanska.debian.org
Sat Jul 1 10:23:12 UTC 2017


This is an automated email from the git hooks/post-receive script.

bengen pushed a commit to branch master
in repository yara.

commit dfe9e34d7e32fd5aab1f30a3352aecc50f563409
Author: Hilko Bengen <bengen at debian.org>
Date:   Fri Jun 30 23:59:17 2017 +0200

    Regenerate re_lexer.c using flex 2.6.1
---
 ...01-Regenerate-re_lexer.c-using-flex-2.6.1.patch | 2700 ++++++++++++++++++++
 debian/patches/series                              |    1 +
 2 files changed, 2701 insertions(+)

diff --git a/debian/patches/0001-Regenerate-re_lexer.c-using-flex-2.6.1.patch b/debian/patches/0001-Regenerate-re_lexer.c-using-flex-2.6.1.patch
new file mode 100644
index 0000000..9dad221
--- /dev/null
+++ b/debian/patches/0001-Regenerate-re_lexer.c-using-flex-2.6.1.patch
@@ -0,0 +1,2700 @@
+From: Hilko Bengen <bengen at debian.org>
+Date: Fri, 30 Jun 2017 23:58:15 +0200
+Subject: Regenerate re_lexer.c using flex 2.6.1
+
+---
+ libyara/re_lexer.c | 2685 ----------------------------------------------------
+ 1 file changed, 2685 deletions(-)
+ delete mode 100644 libyara/re_lexer.c
+
+diff --git a/libyara/re_lexer.c b/libyara/re_lexer.c
+deleted file mode 100644
+index b223c44..0000000
+--- a/libyara/re_lexer.c
++++ /dev/null
+@@ -1,2685 +0,0 @@
+-#line 2 "re_lexer.c"
+-
+-#line 4 "re_lexer.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 6
+-#define YY_FLEX_SUBMINOR_VERSION 0
+-#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 defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+-
+-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+- * if you want the limit (max/min) macros for int types. 
+- */
+-#ifndef __STDC_LIMIT_MACROS
+-#define __STDC_LIMIT_MACROS 1
+-#endif
+-
+-#include <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;
+-
+-/* 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 /* ! C99 */
+-
+-#endif /* ! FLEXINT_H */
+-
+-#ifdef __cplusplus
+-
+-/* The "const" storage-class-modifier is valid. */
+-#define YY_USE_CONST
+-
+-#else	/* ! __cplusplus */
+-
+-/* C99 requires __STDC__ to be defined as 1. */
+-#if defined (__STDC__)
+-
+-#define YY_USE_CONST
+-
+-#endif	/* defined (__STDC__) */
+-#endif	/* ! __cplusplus */
+-
+-#ifdef YY_USE_CONST
+-#define yyconst const
+-#else
+-#define yyconst
+-#endif
+-
+-/* Returned upon end-of-file. */
+-#define YY_NULL 0
+-
+-/* Promotes a possibly negative, possibly signed char to an unsigned
+- * integer for use as an array index.  If the signed char is negative,
+- * we want to instead treat it as an 8-bit unsigned char, hence the
+- * double cast.
+- */
+-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+-
+-/* 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
+-
+-/* 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 re_yyrestart(yyin ,yyscanner )
+-
+-#define YY_END_OF_BUFFER_CHAR 0
+-
+-/* Size of default input buffer. */
+-#ifndef YY_BUF_SIZE
+-#ifdef __ia64__
+-/* On IA-64, the buffer size is 16k, not 8k.
+- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+- * Ditto for the __ia64__ case accordingly.
+- */
+-#define YY_BUF_SIZE 32768
+-#else
+-#define YY_BUF_SIZE 16384
+-#endif /* __ia64__ */
+-#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
+-
+-#ifndef YY_TYPEDEF_YY_SIZE_T
+-#define YY_TYPEDEF_YY_SIZE_T
+-typedef size_t yy_size_t;
+-#endif
+-
+-#define EOB_ACT_CONTINUE_SCAN 0
+-#define EOB_ACT_END_OF_FILE 1
+-#define EOB_ACT_LAST_MATCH 2
+-
+-    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
+-     *       access to the local variable yy_act. Since yyless() is a macro, it would break
+-     *       existing scanners that call yyless() from OUTSIDE re_yylex. 
+-     *       One obvious solution it to make yy_act a global. I tried that, and saw
+-     *       a 5% performance hit in a non-yylineno scanner, because yy_act is
+-     *       normally declared as a register variable-- so it is not worth it.
+-     */
+-    #define  YY_LESS_LINENO(n) \
+-            do { \
+-                int yyl;\
+-                for ( yyl = n; yyl < yyleng; ++yyl )\
+-                    if ( yytext[yyl] == '\n' )\
+-                        --yylineno;\
+-            }while(0)
+-    #define YY_LINENO_REWIND_TO(dst) \
+-            do {\
+-                const char *p;\
+-                for ( p = yy_cp-1; p >= (dst); --p)\
+-                    if ( *p == '\n' )\
+-                        --yylineno;\
+-            }while(0)
+-    
+-/* 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 )
+-
+-#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.
+-	 */
+-	yy_size_t 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 re_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 re_yyrestart (FILE *input_file ,yyscan_t yyscanner );
+-void re_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+-YY_BUFFER_STATE re_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
+-void re_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+-void re_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+-void re_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+-void re_yypop_buffer_state (yyscan_t yyscanner );
+-
+-static void re_yyensure_buffer_stack (yyscan_t yyscanner );
+-static void re_yy_load_buffer_state (yyscan_t yyscanner );
+-static void re_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
+-
+-#define YY_FLUSH_BUFFER re_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
+-
+-YY_BUFFER_STATE re_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
+-YY_BUFFER_STATE re_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
+-YY_BUFFER_STATE re_yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner );
+-
+-void *re_yyalloc (yy_size_t ,yyscan_t yyscanner );
+-void *re_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
+-void re_yyfree (void * ,yyscan_t yyscanner );
+-
+-#define yy_new_buffer re_yy_create_buffer
+-
+-#define yy_set_interactive(is_interactive) \
+-	{ \
+-	if ( ! YY_CURRENT_BUFFER ){ \
+-        re_yyensure_buffer_stack (yyscanner); \
+-		YY_CURRENT_BUFFER_LVALUE =    \
+-            re_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 ){\
+-        re_yyensure_buffer_stack (yyscanner); \
+-		YY_CURRENT_BUFFER_LVALUE =    \
+-            re_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 re_yywrap(yyscanner) (/*CONSTCOND*/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 );
+-#if defined(__GNUC__) && __GNUC__ >= 3
+-__attribute__((__noreturn__))
+-#endif
+-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; \
+-	yyleng = (size_t) (yy_cp - yy_bp); \
+-	yyg->yy_hold_char = *yy_cp; \
+-	*yy_cp = '\0'; \
+-	yyg->yy_c_buf_p = yy_cp;
+-
+-#define YY_NUM_RULES 29
+-#define YY_END_OF_BUFFER 30
+-/* This struct is not used in this scanner,
+-   but its presence is necessary. */
+-struct yy_trans_info
+-	{
+-	flex_int32_t yy_verify;
+-	flex_int32_t yy_nxt;
+-	};
+-static yyconst flex_int16_t yy_accept[45] =
+-    {   0,
+-        0,    0,    0,    0,   30,    7,    7,   28,    6,   17,
+-        7,   27,   29,   26,   18,    5,    3,   16,   15,   13,
+-       11,    9,   14,   12,   10,    8,    0,    0,    0,    0,
+-       25,   23,   21,   24,   22,   20,    0,    4,    0,    1,
+-        2,   19,    0,    0
+-    } ;
+-
+-static yyconst YY_CHAR yy_ec[256] =
+-    {   0,
+-        1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
+-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+-        1,    1,    1,    1,    1,    3,    1,    1,    1,    3,
+-        3,    3,    3,    4,    5,    3,    1,    6,    6,    6,
+-        6,    6,    6,    6,    6,    6,    6,    1,    1,    1,
+-        1,    1,    3,    1,    7,    8,    7,    9,    7,    7,
+-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+-        1,    1,   10,    1,    1,    1,   11,    1,    1,    1,
+-       12,   13,   14,   15,    1,    1,    7,   16,    7,   17,
+-
+-        7,    7,    1,    1,    1,    1,    1,    1,    1,    1,
+-        1,    1,    1,    1,   18,    1,    1,    1,   19,   20,
+-        1,    1,   21,    3,   22,    1,    1,    1,    1,    1,
+-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+-
+-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+-        1,    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 YY_CHAR yy_meta[23] =
+-    {   0,
+-        1,    2,    1,    1,    3,    4,    4,    4,    4,    1,
+-        1,    1,    1,    5,    1,    4,    4,    1,    1,    1,
+-        1,    1
+-    } ;
+-
+-static yyconst flex_uint16_t yy_base[51] =
+-    {   0,
+-        0,   20,    3,    5,   50,   89,   89,   89,   10,   36,
+-        0,   44,   43,   47,   38,   89,   26,   33,   89,   89,
+-       89,   89,   89,   89,   89,   89,    4,    5,    0,   33,
+-       32,   31,   29,   26,   24,   23,   15,   89,    8,   89,
+-       89,   89,    0,   89,   67,   72,   77,   82,   84,    4
+-    } ;
+-
+-static yyconst flex_int16_t yy_def[51] =
+-    {   0,
+-       45,   45,   46,   46,   44,   44,   44,   44,   44,   44,
+-       44,   44,   44,   47,   44,   44,   44,   44,   44,   44,
+-       44,   44,   44,   44,   44,   44,   44,   44,   48,   44,
+-       44,   44,   44,   44,   44,   44,   49,   44,   44,   44,
+-       44,   44,   50,    0,   44,   44,   44,   44,   44,   44
+-    } ;
+-
+-static yyconst flex_uint16_t yy_nxt[112] =
+-    {   0,
+-       44,    7,    8,   27,   13,   28,   13,   30,   27,   39,
+-       28,    9,   10,   39,    8,   14,   15,   14,   15,   29,
+-       11,    7,    8,   16,   17,   40,   41,   29,   29,   40,
+-       29,    9,   10,   29,    8,   29,   29,   29,   18,   38,
+-       11,   18,   29,   19,   20,   21,   22,   29,   29,   44,
+-       44,   23,   24,   25,   26,   31,   32,   33,   44,   44,
+-       44,   44,   44,   34,   35,   36,   37,    6,    6,    6,
+-        6,    6,   12,   12,   12,   12,   12,   30,   44,   30,
+-       30,   30,   42,   42,   42,   42,   43,   43,    5,   44,
+-       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
+-
+-       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
+-       44
+-    } ;
+-
+-static yyconst flex_int16_t yy_chk[112] =
+-    {   0,
+-        0,    1,    1,   11,    3,   11,    4,   50,   28,   27,
+-       28,    1,    1,   39,    1,    3,    3,    4,    4,   37,
+-        1,    2,    2,    9,    9,   27,   28,   36,   35,   39,
+-       34,    2,    2,   33,    2,   32,   31,   30,   18,   17,
+-        2,   10,   15,   10,   10,   10,   10,   13,   12,    5,
+-        0,   10,   10,   10,   10,   14,   14,   14,    0,    0,
+-        0,    0,    0,   14,   14,   14,   14,   45,   45,   45,
+-       45,   45,   46,   46,   46,   46,   46,   47,    0,   47,
+-       47,   47,   48,   48,   48,   48,   49,   49,   44,   44,
+-       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
+-
+-       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
+-       44
+-    } ;
+-
+-/* Table of booleans, true if rule could match eol. */
+-static yyconst flex_int32_t yy_rule_can_match_eol[30] =
+-    {   0,
+-0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,     };
+-
+-/* The intent behind this definition is that it'll catch
+- * any uses of REJECT which flex missed.
+- */
+-#define REJECT reject_used_but_not_detected
+-#define yymore() yymore_used_but_not_detected
+-#define YY_MORE_ADJ 0
+-#define YY_RESTORE_YY_MORE_OFFSET
+-#line 1 "re_lexer.l"
+-/*
+-Copyright (c) 2013. The YARA Authors. All Rights Reserved.
+-
+-Redistribution and use in source and binary forms, with or without modification,
+-are permitted provided that the following conditions are met:
+-
+-1. Redistributions of source code must retain the above copyright notice, this
+-list of conditions and the following disclaimer.
+-
+-2. Redistributions in binary form must reproduce the above copyright notice,
+-this list of conditions and the following disclaimer in the documentation and/or
+-other materials provided with the distribution.
+-
+-3. Neither the name of the copyright holder nor the names of its contributors
+-may be used to endorse or promote products derived from this software without
+-specific prior written permission.
+-
+-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-*/
+-/* Lexical analyzer for regular expressions */
+-#line 33 "re_lexer.l"
+-
+-/* Disable warnings for unused functions in this file.
+-
+-As we redefine YY_FATAL_ERROR macro to use our own function re_yyfatal, the
+-yy_fatal_error function generated by Flex is not actually used, causing a
+-compiler warning. Flex doesn't offer any options to remove the yy_fatal_error
+-function. When they include something like %option noyy_fatal_error as they do
+-with noyywrap then we can remove this pragma.
+-*/
+-
+-#ifdef __GNUC__
+-#pragma GCC diagnostic ignored "-Wunused-function"
+-#endif
+-
+-#include <assert.h>
+-#include <setjmp.h>
+-
+-#include <yara/globals.h>
+-#include <yara/utils.h>
+-#include <yara/error.h>
+-#include <yara/limits.h>
+-#include <yara/mem.h>
+-#include <yara/re.h>
+-#include <yara/re_lexer.h>
+-#include <yara/threading.h>
+-#include <yara/strutils.h>
+-
+-
+-#ifdef _WIN32
+-#define snprintf _snprintf
+-#endif
+-
+-static uint8_t word_chars[] = {
+-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03,
+-    0xFE, 0xFF, 0xFF, 0x87, 0xFE, 0xFF, 0xFF, 0x07,
+-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+-
+-
+-int escaped_char_value(
+-    char* text,
+-    uint8_t* value);
+-
+-int read_escaped_char(
+-    yyscan_t yyscanner,
+-    uint8_t* escaped_char);
+-
+-#define YY_NO_UNISTD_H 1
+-
+-#line 587 "re_lexer.c"
+-
+-#define INITIAL 0
+-#define char_class 1
+-
+-#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;
+-    yy_size_t yy_n_chars;
+-    yy_size_t 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;
+-
+-    }; /* 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
+-    
+-int re_yylex_init (yyscan_t* scanner);
+-
+-int re_yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
+-
+-/* Accessor methods to globals.
+-   These are made visible to non-reentrant scanners for convenience. */
+-
+-int re_yylex_destroy (yyscan_t yyscanner );
+-
+-int re_yyget_debug (yyscan_t yyscanner );
+-
+-void re_yyset_debug (int debug_flag ,yyscan_t yyscanner );
+-
+-YY_EXTRA_TYPE re_yyget_extra (yyscan_t yyscanner );
+-
+-void re_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
+-
+-FILE *re_yyget_in (yyscan_t yyscanner );
+-
+-void re_yyset_in  (FILE * _in_str ,yyscan_t yyscanner );
+-
+-FILE *re_yyget_out (yyscan_t yyscanner );
+-
+-void re_yyset_out  (FILE * _out_str ,yyscan_t yyscanner );
+-
+-yy_size_t re_yyget_leng (yyscan_t yyscanner );
+-
+-char *re_yyget_text (yyscan_t yyscanner );
+-
+-int re_yyget_lineno (yyscan_t yyscanner );
+-
+-void re_yyset_lineno (int _line_number ,yyscan_t yyscanner );
+-
+-int re_yyget_column  (yyscan_t yyscanner );
+-
+-void re_yyset_column (int _column_no ,yyscan_t yyscanner );
+-
+-YYSTYPE * re_yyget_lval (yyscan_t yyscanner );
+-
+-void re_yyset_lval (YYSTYPE * yylval_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 re_yywrap (yyscan_t yyscanner );
+-#else
+-extern int re_yywrap (yyscan_t yyscanner );
+-#endif
+-#endif
+-
+-#ifndef YY_NO_UNPUT
+-    
+-#endif
+-
+-#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
+-#ifdef __ia64__
+-/* On IA-64, the buffer size is 16k, not 8k */
+-#define YY_READ_BUF_SIZE 16384
+-#else
+-#define YY_READ_BUF_SIZE 8192
+-#endif /* __ia64__ */
+-#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 do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+-#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 re_yylex \
+-               (YYSTYPE * yylval_param ,yyscan_t yyscanner);
+-
+-#define YY_DECL int re_yylex \
+-               (YYSTYPE * yylval_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 /*LINTED*/break;
+-#endif
+-
+-#define YY_RULE_SETUP \
+-	YY_USER_ACTION
+-
+-/** The main scanner function which does all the work.
+- */
+-YY_DECL
+-{
+-	yy_state_type yy_current_state;
+-	char *yy_cp, *yy_bp;
+-	int yy_act;
+-    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+-
+-    yylval = yylval_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 ) {
+-			re_yyensure_buffer_stack (yyscanner);
+-			YY_CURRENT_BUFFER_LVALUE =
+-				re_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+-		}
+-
+-		re_yy_load_buffer_state(yyscanner );
+-		}
+-
+-	{
+-#line 100 "re_lexer.l"
+-
+-
+-#line 864 "re_lexer.c"
+-
+-	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
+-		{
+-		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
+-			{
+-			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];
+-				if ( yy_current_state >= 45 )
+-					yy_c = yy_meta[(unsigned int) yy_c];
+-				}
+-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+-			++yy_cp;
+-			}
+-		while ( yy_current_state != 44 );
+-		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;
+-
+-		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
+-			{
+-			yy_size_t yyl;
+-			for ( yyl = 0; yyl < yyleng; ++yyl )
+-				if ( yytext[yyl] == '\n' )
+-					   
+-    do{ yylineno++;
+-        yycolumn=0;
+-    }while(0)
+-;
+-			}
+-
+-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
+-#line 102 "re_lexer.l"
+-{
+-
+-  // Examples: {3,8} {0,5} {,5} {7,}
+-
+-  int hi_bound;
+-  int lo_bound = atoi(yytext + 1);
+-
+-  char* comma = strchr(yytext, ',');
+-
+-  if (comma - yytext == strlen(yytext) - 2)
+-    // if comma is followed by the closing curly bracket
+-    // (example: {2,}) set high bound value to maximum.
+-    hi_bound = INT16_MAX;
+-  else
+-    hi_bound = atoi(comma + 1);
+-
+-  if (hi_bound > INT16_MAX)
+-  {
+-    yyerror(yyscanner, lex_env, "repeat interval too large");
+-    yyterminate();
+-  }
+-
+-  if (hi_bound < lo_bound || hi_bound < 0 || lo_bound < 0)
+-  {
+-    yyerror(yyscanner, lex_env, "bad repeat interval");
+-    yyterminate();
+-  }
+-
+-  if (hi_bound == 0 && lo_bound == 0)
+-  {
+-    yyerror(yyscanner, lex_env, "bad repeat interval");
+-    yyterminate();
+-  }
+-
+-  yylval->range = (hi_bound << 16) | lo_bound;
+-
+-  return _RANGE_;
+-}
+-	YY_BREAK
+-case 2:
+-YY_RULE_SETUP
+-#line 142 "re_lexer.l"
+-{
+-
+-  // Example: {10}
+-
+-  int value = atoi(yytext + 1);
+-
+-  if (value > INT16_MAX)
+-  {
+-    yyerror(yyscanner, lex_env, "repeat interval too large");
+-    yyterminate();
+-  }
+-
+-  if (value == 0)
+-  {
+-    yyerror(yyscanner, lex_env, "bad repeat interval");
+-    yyterminate();
+-  }
+-
+-  yylval->range = (value << 16) | value;
+-
+-  return _RANGE_;
+-}
+-	YY_BREAK
+-case 3:
+-YY_RULE_SETUP
+-#line 166 "re_lexer.l"
+-{
+-
+-  // Start of a negated character class. Example: [^abcd]
+-
+-  BEGIN(char_class);
+-  memset(LEX_ENV->class_vector, 0, 32);
+-  LEX_ENV->negated_class = TRUE;
+-}
+-	YY_BREAK
+-case 4:
+-YY_RULE_SETUP
+-#line 175 "re_lexer.l"
+-{
+-
+-  // Start of character negated class containing a ].
+-  // Example: [^]abc] this must be interpreted as a class
+-  // not matching ], a, b, nor c
+-
+-  BEGIN(char_class);
+-  memset(LEX_ENV->class_vector, 0, 32);
+-  LEX_ENV->negated_class = TRUE;
+-  LEX_ENV->class_vector[']' / 8] |= 1 << ']' % 8;
+-}
+-	YY_BREAK
+-case 5:
+-YY_RULE_SETUP
+-#line 188 "re_lexer.l"
+-{
+-
+-  // Start of character class containing a ].
+-  // Example: []abc] this must be interpreted as a class
+-  // matching ], a, b, or c.
+-
+-  BEGIN(char_class);
+-  memset(LEX_ENV->class_vector, 0, 32);
+-  LEX_ENV->negated_class = FALSE;
+-  LEX_ENV->class_vector[']' / 8] |= 1 << ']' % 8;
+-}
+-	YY_BREAK
+-case 6:
+-YY_RULE_SETUP
+-#line 201 "re_lexer.l"
+-{
+-
+-  // Start of character class. Example: [abcd]
+-
+-  BEGIN(char_class);
+-  memset(LEX_ENV->class_vector, 0, 32);
+-  LEX_ENV->negated_class = FALSE;
+-}
+-	YY_BREAK
+-case 7:
+-/* rule 7 can match eol */
+-YY_RULE_SETUP
+-#line 211 "re_lexer.l"
+-{
+-
+-  // Any non-special character is passed as a CHAR token to the scanner.
+-
+-  yylval->integer = yytext[0];
+-  return _CHAR_;
+-}
+-	YY_BREAK
+-case 8:
+-YY_RULE_SETUP
+-#line 220 "re_lexer.l"
+-{
+-  return _WORD_CHAR_;
+-}
+-	YY_BREAK
+-case 9:
+-YY_RULE_SETUP
+-#line 225 "re_lexer.l"
+-{
+-  return _NON_WORD_CHAR_;
+-}
+-	YY_BREAK
+-case 10:
+-YY_RULE_SETUP
+-#line 230 "re_lexer.l"
+-{
+-  return _SPACE_;
+-}
+-	YY_BREAK
+-case 11:
+-YY_RULE_SETUP
+-#line 235 "re_lexer.l"
+-{
+-  return _NON_SPACE_;
+-}
+-	YY_BREAK
+-case 12:
+-YY_RULE_SETUP
+-#line 240 "re_lexer.l"
+-{
+-  return _DIGIT_;
+-}
+-	YY_BREAK
+-case 13:
+-YY_RULE_SETUP
+-#line 245 "re_lexer.l"
+-{
+-  return _NON_DIGIT_;
+-}
+-	YY_BREAK
+-case 14:
+-YY_RULE_SETUP
+-#line 250 "re_lexer.l"
+-{
+-  return _WORD_BOUNDARY_;
+-}
+-	YY_BREAK
+-case 15:
+-YY_RULE_SETUP
+-#line 254 "re_lexer.l"
+-{
+-  return _NON_WORD_BOUNDARY_;
+-}
+-	YY_BREAK
+-case 16:
+-YY_RULE_SETUP
+-#line 259 "re_lexer.l"
+-{
+-
+-  yyerror(yyscanner, lex_env, "backreferences are not allowed");
+-  yyterminate();
+-}
+-	YY_BREAK
+-case 17:
+-YY_RULE_SETUP
+-#line 266 "re_lexer.l"
+-{
+-
+-  uint8_t c;
+-
+-  if (read_escaped_char(yyscanner, &c))
+-  {
+-    yylval->integer = c;
+-    return _CHAR_;
+-  }
+-  else
+-  {
+-    yyerror(yyscanner, lex_env, "illegal escape sequence");
+-    yyterminate();
+-  }
+-}
+-	YY_BREAK
+-case 18:
+-YY_RULE_SETUP
+-#line 283 "re_lexer.l"
+-{
+-
+-  // End of character class.
+-
+-  int i;
+-
+-  yylval->class_vector = (uint8_t*) yr_malloc(32);
+-  memcpy(yylval->class_vector, LEX_ENV->class_vector, 32);
+-
+-  if (LEX_ENV->negated_class)
+-  {
+-    for(i = 0; i < 32; i++)
+-      yylval->class_vector[i] = ~yylval->class_vector[i];
+-  }
+-
+-  BEGIN(INITIAL);
+-  return _CLASS_;
+-}
+-	YY_BREAK
+-case 19:
+-/* rule 19 can match eol */
+-YY_RULE_SETUP
+-#line 304 "re_lexer.l"
+-{
+-
+-  // A range inside a character class.
+-  //  [abc0-9]
+-  //      ^- matching here
+-
+-  uint16_t c;
+-  uint8_t start = yytext[0];
+-  uint8_t end = yytext[2];
+-
+-  if (start == '\\')
+-  {
+-    if (!escaped_char_value(yytext, &start))
+-    {
+-      yyerror(yyscanner, lex_env, "illegal escape sequence");
+-      yyterminate();
+-    }
+-
+-    if (yytext[1] == 'x')
+-      end = yytext[5];
+-    else
+-      end = yytext[3];
+-  }
+-
+-  if (end == '\\')
+-  {
+-    if (!read_escaped_char(yyscanner, &end))
+-    {
+-      yyerror(yyscanner, lex_env, "illegal escape sequence");
+-      yyterminate();
+-    }
+-  }
+-
+-  if (end < start)
+-  {
+-    yyerror(yyscanner, lex_env, "bad character range");
+-    yyterminate();
+-  }
+-
+-  for (c = start; c <= end; c++)
+-  {
+-    LEX_ENV->class_vector[c / 8] |= 1 << c % 8;
+-  }
+-}
+-	YY_BREAK
+-case 20:
+-YY_RULE_SETUP
+-#line 350 "re_lexer.l"
+-{
+-
+-  int i;
+-
+-  for (i = 0; i < 32; i++)
+-    LEX_ENV->class_vector[i] |= word_chars[i];
+-}
+-	YY_BREAK
+-case 21:
+-YY_RULE_SETUP
+-#line 359 "re_lexer.l"
+-{
+-
+-  int i;
+-
+-  for (i = 0; i < 32; i++)
+-    LEX_ENV->class_vector[i] |= ~word_chars[i];
+-}
+-	YY_BREAK
+-case 22:
+-YY_RULE_SETUP
+-#line 368 "re_lexer.l"
+-{
+-
+-  LEX_ENV->class_vector[' ' / 8] |= 1 << ' ' % 8;
+-  LEX_ENV->class_vector['\t' / 8] |= 1 << '\t' % 8;
+-}
+-	YY_BREAK
+-case 23:
+-YY_RULE_SETUP
+-#line 375 "re_lexer.l"
+-{
+-
+-  int i;
+-
+-  for (i = 0; i < 32; i++)
+-  {
+-    if (i == ' ' / 8)
+-      LEX_ENV->class_vector[i] |= ~(1 << ' ' % 8);
+-    else if (i == '\t' / 8)
+-      LEX_ENV->class_vector[i] |= ~(1 << '\t' % 8);
+-    else
+-      LEX_ENV->class_vector[i] = 0xFF;
+-  }
+-}
+-	YY_BREAK
+-case 24:
+-YY_RULE_SETUP
+-#line 391 "re_lexer.l"
+-{
+-
+-  char c;
+-
+-  for (c = '0'; c <= '9'; c++)
+-    LEX_ENV->class_vector[c / 8] |= 1 << c % 8;
+-}
+-	YY_BREAK
+-case 25:
+-YY_RULE_SETUP
+-#line 400 "re_lexer.l"
+-{
+-
+-  int i;
+-
+-  for (i = 0; i < 32; i++)
+-  {
+-    // digits 0-7 are in the sixth byte of the vector, let that byte alone
+-    if (i == 6)
+-      continue;
+-
+-    // digits 8 and 9 are the lowest two bits in the seventh byte of the
+-    // vector, let those bits alone.
+-    if (i == 7)
+-      LEX_ENV->class_vector[i] |= 0xFC;
+-    else
+-      LEX_ENV->class_vector[i] = 0xFF;
+-  }
+-}
+-	YY_BREAK
+-case 26:
+-YY_RULE_SETUP
+-#line 420 "re_lexer.l"
+-{
+-
+-  uint8_t c;
+-
+-  if (read_escaped_char(yyscanner, &c))
+-  {
+-    LEX_ENV->class_vector[c / 8] |= 1 << c % 8;
+-  }
+-  else
+-  {
+-    yyerror(yyscanner, lex_env, "illegal escape sequence");
+-    yyterminate();
+-  }
+-}
+-	YY_BREAK
+-case 27:
+-YY_RULE_SETUP
+-#line 436 "re_lexer.l"
+-{
+-
+-  if (yytext[0] >= 32 && yytext[0] < 127)
+-  {
+-    // A character class (i.e: [0-9a-f]) is represented by a 256-bits vector,
+-    // here we set to 1 the vector's bit corresponding to the input character.
+-
+-    LEX_ENV->class_vector[yytext[0] / 8] |= 1 << yytext[0] % 8;
+-  }
+-  else
+-  {
+-    yyerror(yyscanner, lex_env, "non-ascii character");
+-    yyterminate();
+-  }
+-}
+-	YY_BREAK
+-case YY_STATE_EOF(char_class):
+-#line 453 "re_lexer.l"
+-{
+-
+-  // End of regexp reached while scanning a character class.
+-
+-  yyerror(yyscanner, lex_env, "missing terminating ] for character class");
+-  yyterminate();
+-}
+-	YY_BREAK
+-case 28:
+-YY_RULE_SETUP
+-#line 462 "re_lexer.l"
+-{
+-
+-  if (yytext[0] >= 32 && yytext[0] < 127)
+-  {
+-    return yytext[0];
+-  }
+-  else
+-  {
+-    yyerror(yyscanner, lex_env, "non-ascii character");
+-    yyterminate();
+-  }
+-}
+-	YY_BREAK
+-case YY_STATE_EOF(INITIAL):
+-#line 476 "re_lexer.l"
+-{
+-
+-  yyterminate();
+-}
+-	YY_BREAK
+-case 29:
+-YY_RULE_SETUP
+-#line 481 "re_lexer.l"
+-ECHO;
+-	YY_BREAK
+-#line 1375 "re_lexer.c"
+-
+-	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
+-			 * re_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 ( re_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 user's declarations */
+-} /* end of re_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;
+-	char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+-	char *source = yyg->yytext_ptr;
+-	yy_size_t 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 = (yy_size_t) (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
+-		{
+-			yy_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_LVALUE;
+-
+-			int yy_c_buf_p_offset =
+-				(int) (yyg->yy_c_buf_p - b->yy_ch_buf);
+-
+-			if ( b->yy_is_our_buffer )
+-				{
+-				yy_size_t 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. */
+-					re_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;
+-			re_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;
+-
+-	if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+-		/* Extend the array by 50%, plus the number we really need. */
+-		yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
+-		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) re_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
+-		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+-			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+-	}
+-
+-	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)
+-{
+-	yy_state_type yy_current_state;
+-	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 )
+-		{
+-		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];
+-			if ( yy_current_state >= 45 )
+-				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)
+-{
+-	int yy_is_jam;
+-    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
+-	char *yy_cp = yyg->yy_c_buf_p;
+-
+-	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];
+-		if ( yy_current_state >= 45 )
+-			yy_c = yy_meta[(unsigned int) yy_c];
+-		}
+-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+-	yy_is_jam = (yy_current_state == 44);
+-
+-	(void)yyg;
+-	return yy_is_jam ? 0 : yy_current_state;
+-}
+-
+-#ifndef YY_NO_UNPUT
+-
+-#endif
+-
+-#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 */
+-			yy_size_t 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. */
+-					re_yyrestart(yyin ,yyscanner);
+-
+-					/*FALLTHROUGH*/
+-
+-				case EOB_ACT_END_OF_FILE:
+-					{
+-					if ( re_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;
+-
+-	if ( c == '\n' )
+-		   
+-    do{ yylineno++;
+-        yycolumn=0;
+-    }while(0)
+-;
+-
+-	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 re_yyrestart  (FILE * input_file , yyscan_t yyscanner)
+-{
+-    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+-
+-	if ( ! YY_CURRENT_BUFFER ){
+-        re_yyensure_buffer_stack (yyscanner);
+-		YY_CURRENT_BUFFER_LVALUE =
+-            re_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+-	}
+-
+-	re_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
+-	re_yy_load_buffer_state(yyscanner );
+-}
+-
+-/** Switch to a different input buffer.
+- * @param new_buffer The new input buffer.
+- * @param yyscanner The scanner object.
+- */
+-    void re_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
+-	 *		re_yypop_buffer_state();
+-	 *		re_yypush_buffer_state(new_buffer);
+-     */
+-	re_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;
+-	re_yy_load_buffer_state(yyscanner );
+-
+-	/* We don't actually know whether we did this switch during
+-	 * EOF (re_yywrap()) processing, but the only time this flag
+-	 * is looked at is after re_yywrap() is called, so it's safe
+-	 * to go ahead and always set it.
+-	 */
+-	yyg->yy_did_buffer_switch_on_eof = 1;
+-}
+-
+-static void re_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 re_yy_create_buffer  (FILE * file, int  size , yyscan_t yyscanner)
+-{
+-	YY_BUFFER_STATE b;
+-    
+-	b = (YY_BUFFER_STATE) re_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+-	if ( ! b )
+-		YY_FATAL_ERROR( "out of dynamic memory in re_yy_create_buffer()" );
+-
+-	b->yy_buf_size = (yy_size_t)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 *) re_yyalloc(b->yy_buf_size + 2 ,yyscanner );
+-	if ( ! b->yy_ch_buf )
+-		YY_FATAL_ERROR( "out of dynamic memory in re_yy_create_buffer()" );
+-
+-	b->yy_is_our_buffer = 1;
+-
+-	re_yy_init_buffer(b,file ,yyscanner);
+-
+-	return b;
+-}
+-
+-/** Destroy the buffer.
+- * @param b a buffer created with re_yy_create_buffer()
+- * @param yyscanner The scanner object.
+- */
+-    void re_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 )
+-		re_yyfree((void *) b->yy_ch_buf ,yyscanner );
+-
+-	re_yyfree((void *) b ,yyscanner );
+-}
+-
+-/* Initializes or reinitializes a buffer.
+- * This function is sometimes called more than once on the same buffer,
+- * such as during a re_yyrestart() or at EOF.
+- */
+-    static void re_yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file , yyscan_t yyscanner)
+-
+-{
+-	int oerrno = errno;
+-    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+-
+-	re_yy_flush_buffer(b ,yyscanner);
+-
+-	b->yy_input_file = file;
+-	b->yy_fill_buffer = 1;
+-
+-    /* If b is the current buffer, then re_yy_init_buffer was _probably_
+-     * called from re_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 = 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 re_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 )
+-		re_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 re_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
+-{
+-    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+-	if (new_buffer == NULL)
+-		return;
+-
+-	re_yyensure_buffer_stack(yyscanner);
+-
+-	/* This block is copied from re_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 re_yy_switch_to_buffer. */
+-	re_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 re_yypop_buffer_state (yyscan_t yyscanner)
+-{
+-    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+-	if (!YY_CURRENT_BUFFER)
+-		return;
+-
+-	re_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) {
+-		re_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 re_yyensure_buffer_stack (yyscan_t yyscanner)
+-{
+-	yy_size_t 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; // After all that talk, this was set to 1 anyways...
+-		yyg->yy_buffer_stack = (struct yy_buffer_state**)re_yyalloc
+-								(num_to_alloc * sizeof(struct yy_buffer_state*)
+-								, yyscanner);
+-		if ( ! yyg->yy_buffer_stack )
+-			YY_FATAL_ERROR( "out of dynamic memory in re_yyensure_buffer_stack()" );
+-								  
+-		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. */
+-		yy_size_t grow_size = 8 /* arbitrary grow size */;
+-
+-		num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
+-		yyg->yy_buffer_stack = (struct yy_buffer_state**)re_yyrealloc
+-								(yyg->yy_buffer_stack,
+-								num_to_alloc * sizeof(struct yy_buffer_state*)
+-								, yyscanner);
+-		if ( ! yyg->yy_buffer_stack )
+-			YY_FATAL_ERROR( "out of dynamic memory in re_yyensure_buffer_stack()" );
+-
+-		/* 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 re_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) re_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+-	if ( ! b )
+-		YY_FATAL_ERROR( "out of dynamic memory in re_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;
+-
+-	re_yy_switch_to_buffer(b ,yyscanner );
+-
+-	return b;
+-}
+-
+-/** Setup the input buffer state to scan a string. The next call to re_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
+- *       re_yy_scan_bytes() instead.
+- */
+-YY_BUFFER_STATE re_yy_scan_string (yyconst char * yystr , yyscan_t yyscanner)
+-{
+-    
+-	return re_yy_scan_bytes(yystr,strlen(yystr) ,yyscanner);
+-}
+-
+-/** Setup the input buffer state to scan the given bytes. The next call to re_yylex() will
+- * scan from a @e copy of @a bytes.
+- * @param yybytes the byte buffer to scan
+- * @param _yybytes_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 re_yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len , yyscan_t yyscanner)
+-{
+-	YY_BUFFER_STATE b;
+-	char *buf;
+-	yy_size_t n;
+-	yy_size_t i;
+-    
+-	/* Get memory for full buffer, including space for trailing EOB's. */
+-	n = _yybytes_len + 2;
+-	buf = (char *) re_yyalloc(n ,yyscanner );
+-	if ( ! buf )
+-		YY_FATAL_ERROR( "out of dynamic memory in re_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 = re_yy_scan_buffer(buf,n ,yyscanner);
+-	if ( ! b )
+-		YY_FATAL_ERROR( "bad buffer in re_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)
+-{
+-	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+-	(void)yyg;
+-	(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 re_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 re_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 re_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 *re_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 *re_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.
+- */
+-yy_size_t re_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 *re_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 re_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 line number
+- * @param yyscanner The scanner object.
+- */
+-void re_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( "re_yyset_lineno called with no buffer" );
+-    
+-    yylineno = _line_number;
+-}
+-
+-/** Set the current column.
+- * @param _column_no column number
+- * @param yyscanner The scanner object.
+- */
+-void re_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( "re_yyset_column called with no buffer" );
+-    
+-    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 re_yy_switch_to_buffer
+- */
+-void re_yyset_in (FILE *  _in_str , yyscan_t yyscanner)
+-{
+-    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+-    yyin = _in_str ;
+-}
+-
+-void re_yyset_out (FILE *  _out_str , yyscan_t yyscanner)
+-{
+-    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+-    yyout = _out_str ;
+-}
+-
+-int re_yyget_debug  (yyscan_t yyscanner)
+-{
+-    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+-    return yy_flex_debug;
+-}
+-
+-void re_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 * re_yyget_lval  (yyscan_t yyscanner)
+-{
+-    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+-    return yylval;
+-}
+-
+-void re_yyset_lval (YYSTYPE *  yylval_param , yyscan_t yyscanner)
+-{
+-    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+-    yylval = yylval_param;
+-}
+-
+-/* User-visible API */
+-
+-/* re_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 re_yylex_init(yyscan_t* ptr_yy_globals)
+-
+-{
+-    if (ptr_yy_globals == NULL){
+-        errno = EINVAL;
+-        return 1;
+-    }
+-
+-    *ptr_yy_globals = (yyscan_t) re_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 );
+-}
+-
+-/* re_yylex_init_extra has the same functionality as re_yylex_init, but follows the
+- * convention of taking the scanner as the last argument. Note however, that
+- * this is a *pointer* to a scanner, as it will be allocated by this call (and
+- * is the reason, too, why this function also must handle its own declaration).
+- * The user defined value in the first argument will be available to re_yyalloc in
+- * the yyextra field.
+- */
+-
+-int re_yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
+-
+-{
+-    struct yyguts_t dummy_yyguts;
+-
+-    re_yyset_extra (yy_user_defined, &dummy_yyguts);
+-
+-    if (ptr_yy_globals == NULL){
+-        errno = EINVAL;
+-        return 1;
+-    }
+-	
+-    *ptr_yy_globals = (yyscan_t) re_yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
+-	
+-    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));
+-    
+-    re_yyset_extra (yy_user_defined, *ptr_yy_globals);
+-    
+-    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 re_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
+-     * re_yylex_init()
+-     */
+-    return 0;
+-}
+-
+-/* re_yylex_destroy is for both reentrant and non-reentrant scanners. */
+-int re_yylex_destroy  (yyscan_t yyscanner)
+-{
+-    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+-
+-    /* Pop the buffer stack, destroying each element. */
+-	while(YY_CURRENT_BUFFER){
+-		re_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
+-		YY_CURRENT_BUFFER_LVALUE = NULL;
+-		re_yypop_buffer_state(yyscanner);
+-	}
+-
+-	/* Destroy the stack itself. */
+-	re_yyfree(yyg->yy_buffer_stack ,yyscanner);
+-	yyg->yy_buffer_stack = NULL;
+-
+-    /* Destroy the start condition stack. */
+-        re_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
+-     * re_yylex() is called, initialization will occur. */
+-    yy_init_globals( yyscanner);
+-
+-    /* Destroy the main struct (reentrant only). */
+-    re_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)
+-{
+-	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+-	(void)yyg;
+-
+-	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)
+-{
+-	int n;
+-	for ( n = 0; s[n]; ++n )
+-		;
+-
+-	return n;
+-}
+-#endif
+-
+-void *re_yyalloc (yy_size_t  size , yyscan_t yyscanner)
+-{
+-	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+-	(void)yyg;
+-	return (void *) malloc( size );
+-}
+-
+-void *re_yyrealloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
+-{
+-	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+-	(void)yyg;
+-
+-	/* 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 re_yyfree (void * ptr , yyscan_t yyscanner)
+-{
+-	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+-	(void)yyg;
+-	free( (char *) ptr );	/* see re_yyrealloc() for (char *) cast */
+-}
+-
+-#define YYTABLES_NAME "yytables"
+-
+-#line 481 "re_lexer.l"
+-
+-
+-
+-int escaped_char_value(
+-    char* text,
+-    uint8_t* value)
+-{
+-  unsigned int hex_value;
+-  char hex[3];
+-
+-  assert(text[0] == '\\');
+-
+-  switch(text[1])
+-  {
+-  case 'x':
+-    if (!isxdigit(text[2]) || !isxdigit(text[3]))
+-      return 0;
+-    hex[0] = text[2];
+-    hex[1] = text[3];
+-    hex[2] = '\0';
+-    sscanf(hex, "%x", &hex_value);
+-    *value = (uint8_t) hex_value;
+-    break;
+-
+-  case 'n':
+-    *value = '\n';
+-    break;
+-
+-  case 't':
+-    *value = '\t';
+-    break;
+-
+-  case 'r':
+-    *value = '\r';
+-    break;
+-
+-  case 'f':
+-    *value = '\f';
+-    break;
+-
+-  case 'a':
+-    *value = '\a';
+-    break;
+-
+-  default:
+-    *value = text[1];
+-  }
+-
+-  return 1;
+-}
+-
+-
+-#ifdef __cplusplus
+-#define RE_YY_INPUT yyinput
+-#else
+-#define RE_YY_INPUT input
+-#endif
+-
+-
+-int read_escaped_char(
+-    yyscan_t yyscanner,
+-    uint8_t* escaped_char)
+-{
+-  char text[4] = {0, 0, 0, 0};
+-
+-  text[0] = '\\';
+-  text[1] = RE_YY_INPUT(yyscanner);
+-
+-  if (text[1] == EOF || text[1] == 0)
+-    return 0;
+-
+-  if (text[1] == 'x')
+-  {
+-    text[2] = RE_YY_INPUT(yyscanner);
+-
+-    if (text[2] == EOF || text[2] == 0)
+-      return 0;
+-
+-    text[3] = RE_YY_INPUT(yyscanner);
+-
+-    if (text[3] == EOF || text[3] == 0)
+-      return 0;
+-  }
+-
+-  return escaped_char_value(text, escaped_char);
+-}
+-
+-
+-void yyfatal(
+-    yyscan_t yyscanner,
+-    const char *error_message)
+-{
+-  jmp_buf* recovery_state = (jmp_buf*) yr_thread_storage_get_value(
+-      &yr_recovery_state_key);
+-
+-  longjmp(*recovery_state, 1);
+-}
+-
+-
+-void yyerror(
+-    yyscan_t yyscanner,
+-    RE_LEX_ENVIRONMENT* lex_env,
+-    const char *error_message)
+-{
+-  // if lex_env->last_error_code was set to some error code before
+-  // don't overwrite it, we are interested in the first error, not in
+-  // subsequent errors like "syntax error, unexpected $end" caused by
+-  // early parser termination.
+-
+-  if (lex_env->last_error_code == ERROR_SUCCESS)
+-  {
+-    lex_env->last_error_code = ERROR_INVALID_REGULAR_EXPRESSION;
+-
+-    strlcpy(
+-        lex_env->last_error_message,
+-        error_message,
+-        sizeof(lex_env->last_error_message));
+-  }
+-}
+-
+-
+-int yr_parse_re_string(
+-  const char* re_string,
+-  RE_AST** re_ast,
+-  RE_ERROR* error)
+-{
+-  yyscan_t yyscanner;
+-  jmp_buf recovery_state;
+-  RE_LEX_ENVIRONMENT lex_env;
+-
+-  lex_env.last_error_code = ERROR_SUCCESS;
+-  lex_env.last_error_message[0] = '\0';
+-
+-  yr_thread_storage_set_value(&yr_recovery_state_key, &recovery_state);
+-
+-  if (setjmp(recovery_state) != 0)
+-    return ERROR_INTERNAL_FATAL_ERROR;
+-
+-  FAIL_ON_ERROR(yr_re_ast_create(re_ast));
+-
+-  re_yylex_init(&yyscanner);
+-  re_yyset_extra(*re_ast,yyscanner);
+-  re_yy_scan_string(re_string,yyscanner);
+-  yyparse(yyscanner, &lex_env);
+-  re_yylex_destroy(yyscanner);
+-
+-  if (lex_env.last_error_code != ERROR_SUCCESS)
+-  {
+-    yr_re_ast_destroy(*re_ast);
+-    *re_ast = NULL;
+-
+-    strlcpy(
+-        error->message,
+-        lex_env.last_error_message,
+-        sizeof(error->message));
+-
+-    return lex_env.last_error_code;
+-  }
+-
+-  return ERROR_SUCCESS;
+-}
+-
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..cbd88ca
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1 @@
+0001-Regenerate-re_lexer.c-using-flex-2.6.1.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/forensics/yara.git



More information about the forensics-changes mailing list