[LLVMdev] problem trying to write an LLVM register-allocation pass
Susan Horwitz
horwitz at cs.wisc.edu
Sat Dec 1 09:31:06 PST 2012
On 11/30/2012 6:36 PM, Lang Hames wrote:
>
>
> RBP is used as the frame pointer on x86 (hence its automatic
> appearance in your code), and shouldn't be allocated to any vreg in
> function bar. Loading/saving RBP should be managed by the stack frame
> setup/teardown code.
> If it doesn't already, your allocator should filter out reserved
> registers (See MachineRegisterInfo::isReserved(unsigned preg)) when
> assigning physregs.
I AM filtering out reserved registers.
I am not allocating RBP in function bar, I am allocating EBP, because it
is NOT in the list of reserved registers for function bar.
Neither register RBP nor register EBP is saved/restored across the call
from foo to bar, either by the code for the call or the code for entry
to bar.
The input C file that is causing this problem is flex.c (attached). The
calling function is "yyparse" and the called function is "scinstal".
Here are the reserved registers for yyparse: { 7 44 54 106 111 114 118 }
Here are the reserved registers for scinstal: { 54 111 114 }
Register EBP is preg 44, which is NOT in the reserved list for scinstal
(nor is it an alias of any of those reserved registers; the aliases are
{ 50 64 117 118 }). I don;t know which preg corresponds to RBP.
You say that RBP should be saved/restored across the call. I tried to
generate that code, but, as I said in my previous mail, I don't know
how to get the appropriate TargetRegisterClass (needed to call
CreateSpillStackObject). Should I instead be generating code to save
register EBP at the start of scinstal, restoring it at the end of that
function?
Susan
>
> ArrayRef<MCPhysReg> pregs = TRC->getRawAllocationOrder(&MF);
> for (int i = 0; i < pregs.size(); ++i) {
> if (MRI->isReserved(pregs[i]))
> continue;
> // use preg...
> }
>
> You could also use the AllocationOrder class to simplify the task of
> finding valid pregs, though it does require you to use VirtRegMap.
>
> If you are already checking the reserved regs then I've misdiagnosed
> the problem. I'd be happy to dig further if you can point me to a copy
> of your allocator and a test case.
>
> Cheers,
> Lang.
>
>
> On Thu, Nov 29, 2012 at 3:49 PM, Susan Horwitz <horwitz at cs.wisc.edu
> <mailto:horwitz at cs.wisc.edu>> wrote:
>
> I have a new problem: Register RBP is used in a function foo. (I
> am not allocating RBP to any virtual register, the instances of
> RBP in function foo are in the machine code when my register
> allocator starts.)
>
> Function foo calls function bar. Register RBP is not saved across
> the call, though it is live after the call. Function bar includes
> a virtual register. The code that I'm using to find the registers
> available to be allocated to that virtual register includes EBP in
> that available-preg set. This is a disaster, since writing into
> EBP clobbers RBP.
>
> I tried to add code to save all live physical registers across
> calls, but I don't know how to get the appropriate
> TargetRegisterClass (needed to call CreateSpillStackObject).
>
> Is there a different way to save/restore RBP across calls? Or a
> way to get its TargetRegisterClass?
>
> Susan
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20121201/bb2ee09d/attachment.html>
-------------- next part --------------
char copyright[] =
"@(#) Copyright (c) 1990 The Regents of the University of California.\n All rights reserved.\n";
typedef long unsigned int size_t;
typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;
typedef signed long int __int64_t;
typedef unsigned long int __uint64_t;
typedef long int __quad_t;
typedef unsigned long int __u_quad_t;
typedef unsigned long int __dev_t;
typedef unsigned int __uid_t;
typedef unsigned int __gid_t;
typedef unsigned long int __ino_t;
typedef unsigned long int __ino64_t;
typedef unsigned int __mode_t;
typedef unsigned long int __nlink_t;
typedef long int __off_t;
typedef long int __off64_t;
typedef int __pid_t;
typedef struct { int __val[2]; } __fsid_t;
typedef long int __clock_t;
typedef unsigned long int __rlim_t;
typedef unsigned long int __rlim64_t;
typedef unsigned int __id_t;
typedef long int __time_t;
typedef unsigned int __useconds_t;
typedef long int __suseconds_t;
typedef int __daddr_t;
typedef long int __swblk_t;
typedef int __key_t;
typedef int __clockid_t;
typedef void * __timer_t;
typedef long int __blksize_t;
typedef long int __blkcnt_t;
typedef long int __blkcnt64_t;
typedef unsigned long int __fsblkcnt_t;
typedef unsigned long int __fsblkcnt64_t;
typedef unsigned long int __fsfilcnt_t;
typedef unsigned long int __fsfilcnt64_t;
typedef long int __ssize_t;
typedef __off64_t __loff_t;
typedef __quad_t *__qaddr_t;
typedef char *__caddr_t;
typedef long int __intptr_t;
typedef unsigned int __socklen_t;
typedef struct _IO_FILE FILE;
typedef struct _IO_FILE __FILE;
typedef int wchar_t;
typedef unsigned int wint_t;
typedef struct
{
int __count;
union
{
wint_t __wch;
char __wchb[4];
} __value;
} __mbstate_t;
typedef struct
{
__off_t __pos;
__mbstate_t __state;
} _G_fpos_t;
typedef struct
{
__off64_t __pos;
__mbstate_t __state;
} _G_fpos64_t;
enum
{
__GCONV_OK = 0,
__GCONV_NOCONV,
__GCONV_NODB,
__GCONV_NOMEM,
__GCONV_EMPTY_INPUT,
__GCONV_FULL_OUTPUT,
__GCONV_ILLEGAL_INPUT,
__GCONV_INCOMPLETE_INPUT,
__GCONV_ILLEGAL_DESCRIPTOR,
__GCONV_INTERNAL_ERROR
};
enum
{
__GCONV_IS_LAST = 0x0001,
__GCONV_IGNORE_ERRORS = 0x0002
};
struct __gconv_step;
struct __gconv_step_data;
struct __gconv_loaded_object;
struct __gconv_trans_data;
typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
__const unsigned char **, __const unsigned char *,
unsigned char **, size_t *, int, int);
typedef wint_t (*__gconv_btowc_fct) (struct __gconv_step *, unsigned char);
typedef int (*__gconv_init_fct) (struct __gconv_step *);
typedef void (*__gconv_end_fct) (struct __gconv_step *);
typedef int (*__gconv_trans_fct) (struct __gconv_step *,
struct __gconv_step_data *, void *,
__const unsigned char *,
__const unsigned char **,
__const unsigned char *, unsigned char **,
size_t *);
typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
__const unsigned char *,
unsigned char *, unsigned char *);
typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
size_t *);
typedef int (*__gconv_trans_init_fct) (void **, const char *);
typedef void (*__gconv_trans_end_fct) (void *);
struct __gconv_trans_data
{
__gconv_trans_fct __trans_fct;
__gconv_trans_context_fct __trans_context_fct;
__gconv_trans_end_fct __trans_end_fct;
void *__data;
struct __gconv_trans_data *__next;
};
struct __gconv_step
{
struct __gconv_loaded_object *__shlib_handle;
__const char *__modname;
int __counter;
char *__from_name;
char *__to_name;
__gconv_fct __fct;
__gconv_btowc_fct __btowc_fct;
__gconv_init_fct __init_fct;
__gconv_end_fct __end_fct;
int __min_needed_from;
int __max_needed_from;
int __min_needed_to;
int __max_needed_to;
int __stateful;
void *__data;
};
struct __gconv_step_data
{
unsigned char *__outbuf;
unsigned char *__outbufend;
int __flags;
int __invocation_counter;
int __internal_use;
__mbstate_t *__statep;
__mbstate_t __state;
struct __gconv_trans_data *__trans;
};
typedef struct __gconv_info
{
size_t __nsteps;
struct __gconv_step *__steps;
__extension__ struct __gconv_step_data __data [];
} *__gconv_t;
typedef union
{
struct __gconv_info __cd;
struct
{
struct __gconv_info __cd;
struct __gconv_step_data __data;
} __combined;
} _G_iconv_t;
typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
typedef __builtin_va_list __gnuc_va_list;
struct _IO_jump_t; struct _IO_FILE;
typedef void _IO_lock_t;
struct _IO_marker {
struct _IO_marker *_next;
struct _IO_FILE *_sbuf;
int _pos;
};
enum __codecvt_result
{
__codecvt_ok,
__codecvt_partial,
__codecvt_error,
__codecvt_noconv
};
struct _IO_FILE {
int _flags;
char* _IO_read_ptr;
char* _IO_read_end;
char* _IO_read_base;
char* _IO_write_base;
char* _IO_write_ptr;
char* _IO_write_end;
char* _IO_buf_base;
char* _IO_buf_end;
char *_IO_save_base;
char *_IO_backup_base;
char *_IO_save_end;
struct _IO_marker *_markers;
struct _IO_FILE *_chain;
int _fileno;
int _flags2;
__off_t _old_offset;
unsigned short _cur_column;
signed char _vtable_offset;
char _shortbuf[1];
_IO_lock_t *_lock;
__off64_t _offset;
void *__pad1;
void *__pad2;
void *__pad3;
void *__pad4;
size_t __pad5;
int _mode;
char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
};
typedef struct _IO_FILE _IO_FILE;
struct _IO_FILE_plus;
extern struct _IO_FILE_plus _IO_2_1_stdin_;
extern struct _IO_FILE_plus _IO_2_1_stdout_;
extern struct _IO_FILE_plus _IO_2_1_stderr_;
typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
size_t __n);
typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);
typedef int __io_close_fn (void *__cookie);
extern int __underflow (_IO_FILE *);
extern int __uflow (_IO_FILE *);
extern int __overflow (_IO_FILE *, int);
extern wint_t __wunderflow (_IO_FILE *);
extern wint_t __wuflow (_IO_FILE *);
extern wint_t __woverflow (_IO_FILE *, wint_t);
extern int _IO_getc (_IO_FILE *__fp);
extern int _IO_putc (int __c, _IO_FILE *__fp);
extern int _IO_feof (_IO_FILE *__fp) __attribute__ ((__nothrow__));
extern int _IO_ferror (_IO_FILE *__fp) __attribute__ ((__nothrow__));
extern int _IO_peekc_locked (_IO_FILE *__fp);
extern void _IO_flockfile (_IO_FILE *) __attribute__ ((__nothrow__));
extern void _IO_funlockfile (_IO_FILE *) __attribute__ ((__nothrow__));
extern int _IO_ftrylockfile (_IO_FILE *) __attribute__ ((__nothrow__));
extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
__gnuc_va_list, int *__restrict);
extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
__gnuc_va_list);
extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t);
extern size_t _IO_sgetn (_IO_FILE *, void *, size_t);
extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int);
extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int);
extern void _IO_free_backup_area (_IO_FILE *) __attribute__ ((__nothrow__));
typedef _G_fpos_t fpos_t;
extern struct _IO_FILE *stdin;
extern struct _IO_FILE *stdout;
extern struct _IO_FILE *stderr;
extern int remove (__const char *__filename) __attribute__ ((__nothrow__));
extern int rename (__const char *__old, __const char *__new) __attribute__ ((__nothrow__));
extern FILE *tmpfile (void);
extern char *tmpnam (char *__s) __attribute__ ((__nothrow__));
extern char *tmpnam_r (char *__s) __attribute__ ((__nothrow__));
extern char *tempnam (__const char *__dir, __const char *__pfx)
__attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
extern int fclose (FILE *__stream);
extern int fflush (FILE *__stream);
extern int fflush_unlocked (FILE *__stream);
extern FILE *fopen (__const char *__restrict __filename,
__const char *__restrict __modes);
extern FILE *freopen (__const char *__restrict __filename,
__const char *__restrict __modes,
FILE *__restrict __stream);
extern FILE *fdopen (int __fd, __const char *__modes) __attribute__ ((__nothrow__));
extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __attribute__ ((__nothrow__));
extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
int __modes, size_t __n) __attribute__ ((__nothrow__));
extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
size_t __size) __attribute__ ((__nothrow__));
extern void setlinebuf (FILE *__stream) __attribute__ ((__nothrow__));
extern int fprintf (FILE *__restrict __stream,
__const char *__restrict __format, ...);
extern int printf (__const char *__restrict __format, ...);
extern int sprintf (char *__restrict __s,
__const char *__restrict __format, ...) __attribute__ ((__nothrow__));
extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
__gnuc_va_list __arg);
extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg);
extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
__gnuc_va_list __arg) __attribute__ ((__nothrow__));
extern int snprintf (char *__restrict __s, size_t __maxlen,
__const char *__restrict __format, ...)
__attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 4)));
extern int vsnprintf (char *__restrict __s, size_t __maxlen,
__const char *__restrict __format, __gnuc_va_list __arg)
__attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 0)));
extern int fscanf (FILE *__restrict __stream,
__const char *__restrict __format, ...) ;
extern int scanf (__const char *__restrict __format, ...) ;
extern int sscanf (__const char *__restrict __s,
__const char *__restrict __format, ...) __attribute__ ((__nothrow__));
extern int fgetc (FILE *__stream);
extern int getc (FILE *__stream);
extern int getchar (void);
extern int getc_unlocked (FILE *__stream);
extern int getchar_unlocked (void);
extern int fgetc_unlocked (FILE *__stream);
extern int fputc (int __c, FILE *__stream);
extern int putc (int __c, FILE *__stream);
extern int putchar (int __c);
extern int fputc_unlocked (int __c, FILE *__stream);
extern int putc_unlocked (int __c, FILE *__stream);
extern int putchar_unlocked (int __c);
extern int getw (FILE *__stream);
extern int putw (int __w, FILE *__stream);
extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
;
extern char *gets (char *__s) ;
extern int fputs (__const char *__restrict __s, FILE *__restrict __stream);
extern int puts (__const char *__s);
extern int ungetc (int __c, FILE *__stream);
extern size_t fread (void *__restrict __ptr, size_t __size,
size_t __n, FILE *__restrict __stream) ;
extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
size_t __n, FILE *__restrict __s) ;
extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
size_t __n, FILE *__restrict __stream) ;
extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
size_t __n, FILE *__restrict __stream) ;
extern int fseek (FILE *__stream, long int __off, int __whence);
extern long int ftell (FILE *__stream) ;
extern void rewind (FILE *__stream);
extern int fseeko (FILE *__stream, __off_t __off, int __whence);
extern __off_t ftello (FILE *__stream) ;
extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
extern int fsetpos (FILE *__stream, __const fpos_t *__pos);
extern void clearerr (FILE *__stream) __attribute__ ((__nothrow__));
extern int feof (FILE *__stream) __attribute__ ((__nothrow__)) ;
extern int ferror (FILE *__stream) __attribute__ ((__nothrow__)) ;
extern void clearerr_unlocked (FILE *__stream) __attribute__ ((__nothrow__));
extern int feof_unlocked (FILE *__stream) __attribute__ ((__nothrow__)) ;
extern int ferror_unlocked (FILE *__stream) __attribute__ ((__nothrow__)) ;
extern void perror (__const char *__s);
extern int sys_nerr;
extern __const char *__const sys_errlist[];
extern int fileno (FILE *__stream) __attribute__ ((__nothrow__)) ;
extern int fileno_unlocked (FILE *__stream) __attribute__ ((__nothrow__)) ;
extern FILE *popen (__const char *__command, __const char *__modes) ;
extern int pclose (FILE *__stream);
extern char *ctermid (char *__s) __attribute__ ((__nothrow__));
extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__));
extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__)) ;
extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__));
enum
{
_ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)),
_ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)),
_ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)),
_ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)),
_ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)),
_ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)),
_ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)),
_ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)),
_ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)),
_IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)),
_ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)),
_ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8))
};
extern __const unsigned short int **__ctype_b_loc (void)
__attribute__ ((__const));
extern __const __int32_t **__ctype_tolower_loc (void)
__attribute__ ((__const));
extern __const __int32_t **__ctype_toupper_loc (void)
__attribute__ ((__const));
extern int isalnum (int) __attribute__ ((__nothrow__));
extern int isalpha (int) __attribute__ ((__nothrow__));
extern int iscntrl (int) __attribute__ ((__nothrow__));
extern int isdigit (int) __attribute__ ((__nothrow__));
extern int islower (int) __attribute__ ((__nothrow__));
extern int isgraph (int) __attribute__ ((__nothrow__));
extern int isprint (int) __attribute__ ((__nothrow__));
extern int ispunct (int) __attribute__ ((__nothrow__));
extern int isspace (int) __attribute__ ((__nothrow__));
extern int isupper (int) __attribute__ ((__nothrow__));
extern int isxdigit (int) __attribute__ ((__nothrow__));
extern int tolower (int __c) __attribute__ ((__nothrow__));
extern int toupper (int __c) __attribute__ ((__nothrow__));
extern int isascii (int __c) __attribute__ ((__nothrow__));
extern int toascii (int __c) __attribute__ ((__nothrow__));
extern int _toupper (int) __attribute__ ((__nothrow__));
extern int _tolower (int) __attribute__ ((__nothrow__));
extern void *memcpy (void *__restrict __dest,
__const void *__restrict __src, size_t __n)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern void *memmove (void *__dest, __const void *__src, size_t __n)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
int __c, size_t __n)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern void *memset (void *__s, int __c, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern void *memchr (__const void *__s, int __c, size_t __n)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strncpy (char *__restrict __dest,
__const char *__restrict __src, size_t __n)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int strcmp (__const char *__s1, __const char *__s2)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern int strcoll (__const char *__s1, __const char *__s2)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern size_t strxfrm (char *__restrict __dest,
__const char *__restrict __src, size_t __n)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
extern char *strdup (__const char *__s)
__attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
extern char *strchr (__const char *__s, int __c)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern char *strrchr (__const char *__s, int __c)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern size_t strcspn (__const char *__s, __const char *__reject)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern size_t strspn (__const char *__s, __const char *__accept)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strpbrk (__const char *__s, __const char *__accept)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strstr (__const char *__haystack, __const char *__needle)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
extern char *__strtok_r (char *__restrict __s,
__const char *__restrict __delim,
char **__restrict __save_ptr)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 3)));
extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
char **__restrict __save_ptr)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 3)));
extern size_t strlen (__const char *__s)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern char *strerror (int __errnum) __attribute__ ((__nothrow__));
extern int strerror_r (int __errnum, char *__buf, size_t __buflen) __asm__ ("" "__xpg_strerror_r") __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
extern void __bzero (void *__s, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern void bcopy (__const void *__src, void *__dest, size_t __n)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern void bzero (void *__s, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *index (__const char *__s, int __c)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern char *rindex (__const char *__s, int __c)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern int ffs (int __i) __attribute__ ((__nothrow__)) __attribute__ ((__const__));
extern int strcasecmp (__const char *__s1, __const char *__s2)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strsep (char **__restrict __stringp,
__const char *__restrict __delim)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;
typedef __loff_t loff_t;
typedef __ino_t ino_t;
typedef __dev_t dev_t;
typedef __gid_t gid_t;
typedef __mode_t mode_t;
typedef __nlink_t nlink_t;
typedef __uid_t uid_t;
typedef __off_t off_t;
typedef __pid_t pid_t;
typedef __id_t id_t;
typedef __ssize_t ssize_t;
typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;
typedef __key_t key_t;
typedef __time_t time_t;
typedef __clockid_t clockid_t;
typedef __timer_t timer_t;
typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;
typedef int int8_t __attribute__ ((__mode__ (__QI__)));
typedef int int16_t __attribute__ ((__mode__ (__HI__)));
typedef int int32_t __attribute__ ((__mode__ (__SI__)));
typedef int int64_t __attribute__ ((__mode__ (__DI__)));
typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));
typedef int register_t __attribute__ ((__mode__ (__word__)));
typedef int __sig_atomic_t;
typedef struct
{
unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
} __sigset_t;
typedef __sigset_t sigset_t;
struct timespec
{
__time_t tv_sec;
long int tv_nsec;
};
struct timeval
{
__time_t tv_sec;
__suseconds_t tv_usec;
};
typedef __suseconds_t suseconds_t;
typedef long int __fd_mask;
typedef struct
{
__fd_mask __fds_bits[1024 / (8 * sizeof (__fd_mask))];
} fd_set;
typedef __fd_mask fd_mask;
extern int select (int __nfds, fd_set *__restrict __readfds,
fd_set *__restrict __writefds,
fd_set *__restrict __exceptfds,
struct timeval *__restrict __timeout);
extern int pselect (int __nfds, fd_set *__restrict __readfds,
fd_set *__restrict __writefds,
fd_set *__restrict __exceptfds,
const struct timespec *__restrict __timeout,
const __sigset_t *__restrict __sigmask);
__extension__
extern __inline unsigned int gnu_dev_major (unsigned long long int __dev)
__attribute__ ((__nothrow__));
__extension__
extern __inline unsigned int gnu_dev_minor (unsigned long long int __dev)
__attribute__ ((__nothrow__));
__extension__
extern __inline unsigned long long int gnu_dev_makedev (unsigned int __major,
unsigned int __minor)
__attribute__ ((__nothrow__));
__extension__ extern __inline unsigned int
__attribute__ ((__nothrow__)) gnu_dev_major (unsigned long long int __dev)
{
return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff);
}
__extension__ extern __inline unsigned int
__attribute__ ((__nothrow__)) gnu_dev_minor (unsigned long long int __dev)
{
return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff);
}
__extension__ extern __inline unsigned long long int
__attribute__ ((__nothrow__)) gnu_dev_makedev (unsigned int __major, unsigned int __minor)
{
return ((__minor & 0xff) | ((__major & 0xfff) << 8)
| (((unsigned long long int) (__minor & ~0xff)) << 12)
| (((unsigned long long int) (__major & ~0xfff)) << 32));
}
typedef __blkcnt_t blkcnt_t;
typedef __fsblkcnt_t fsblkcnt_t;
typedef __fsfilcnt_t fsfilcnt_t;
typedef unsigned long int pthread_t;
typedef union
{
char __size[56];
long int __align;
} pthread_attr_t;
typedef struct __pthread_internal_list
{
struct __pthread_internal_list *__prev;
struct __pthread_internal_list *__next;
} __pthread_list_t;
typedef union
{
struct __pthread_mutex_s
{
int __lock;
unsigned int __count;
int __owner;
unsigned int __nusers;
int __kind;
int __spins;
__pthread_list_t __list;
} __data;
char __size[40];
long int __align;
} pthread_mutex_t;
typedef union
{
char __size[4];
int __align;
} pthread_mutexattr_t;
typedef union
{
struct
{
int __lock;
unsigned int __futex;
__extension__ unsigned long long int __total_seq;
__extension__ unsigned long long int __wakeup_seq;
__extension__ unsigned long long int __woken_seq;
void *__mutex;
unsigned int __nwaiters;
unsigned int __broadcast_seq;
} __data;
char __size[48];
__extension__ long long int __align;
} pthread_cond_t;
typedef union
{
char __size[4];
int __align;
} pthread_condattr_t;
typedef unsigned int pthread_key_t;
typedef int pthread_once_t;
typedef union
{
struct
{
int __lock;
unsigned int __nr_readers;
unsigned int __readers_wakeup;
unsigned int __writer_wakeup;
unsigned int __nr_readers_queued;
unsigned int __nr_writers_queued;
int __writer;
int __shared;
unsigned long int __pad1;
unsigned long int __pad2;
unsigned int __flags;
} __data;
char __size[56];
long int __align;
} pthread_rwlock_t;
typedef union
{
char __size[8];
long int __align;
} pthread_rwlockattr_t;
typedef volatile int pthread_spinlock_t;
typedef union
{
char __size[32];
long int __align;
} pthread_barrier_t;
typedef union
{
char __size[4];
int __align;
} pthread_barrierattr_t;
typedef long int ptrdiff_t;
extern void *malloc (size_t __size) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) ;
extern void *calloc (size_t __nmemb, size_t __size) __attribute__ ((__nothrow__))
__attribute__ ((__malloc__)) ;
extern void *realloc (void *__ptr, size_t __size) __attribute__ ((__nothrow__))
__attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
extern void free (void *__ptr) __attribute__ ((__nothrow__));
extern void cfree (void *__ptr) __attribute__ ((__nothrow__));
extern void *memalign (size_t __alignment, size_t __size) __attribute__ ((__nothrow__))
__attribute__ ((__malloc__)) ;
extern void *valloc (size_t __size) __attribute__ ((__nothrow__))
__attribute__ ((__malloc__)) ;
extern void * pvalloc (size_t __size) __attribute__ ((__nothrow__))
__attribute__ ((__malloc__)) ;
extern void *(*__morecore) (ptrdiff_t __size);
extern void *__default_morecore (ptrdiff_t __size) __attribute__ ((__nothrow__))
__attribute__ ((__malloc__));
struct mallinfo {
int arena;
int ordblks;
int smblks;
int hblks;
int hblkhd;
int usmblks;
int fsmblks;
int uordblks;
int fordblks;
int keepcost;
};
extern struct mallinfo mallinfo (void) __attribute__ ((__nothrow__));
extern int mallopt (int __param, int __val) __attribute__ ((__nothrow__));
extern int malloc_trim (size_t __pad) __attribute__ ((__nothrow__));
extern size_t malloc_usable_size (void *__ptr) __attribute__ ((__nothrow__));
extern void malloc_stats (void) __attribute__ ((__nothrow__));
extern void *malloc_get_state (void) __attribute__ ((__nothrow__));
extern int malloc_set_state (void *__ptr) __attribute__ ((__nothrow__));
extern void (*__malloc_initialize_hook) (void);
extern void (*__free_hook) (void *__ptr, __const void *);
extern void *(*__malloc_hook) (size_t __size, __const void *);
extern void *(*__realloc_hook) (void *__ptr, size_t __size, __const void *);
extern void *(*__memalign_hook) (size_t __alignment, size_t __size, __const void *);
extern void (*__after_morecore_hook) (void);
extern void __malloc_check_init (void) __attribute__ ((__nothrow__));
typedef struct
{
int quot;
int rem;
} div_t;
typedef struct
{
long int quot;
long int rem;
} ldiv_t;
extern size_t __ctype_get_mb_cur_max (void) __attribute__ ((__nothrow__)) ;
extern double atof (__const char *__nptr)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
extern int atoi (__const char *__nptr)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
extern long int atol (__const char *__nptr)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
__extension__ extern long long int atoll (__const char *__nptr)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
extern double strtod (__const char *__restrict __nptr,
char **__restrict __endptr)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
extern long int strtol (__const char *__restrict __nptr,
char **__restrict __endptr, int __base)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
extern unsigned long int strtoul (__const char *__restrict __nptr,
char **__restrict __endptr, int __base)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
__extension__
extern long long int strtoq (__const char *__restrict __nptr,
char **__restrict __endptr, int __base)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
__extension__
extern unsigned long long int strtouq (__const char *__restrict __nptr,
char **__restrict __endptr, int __base)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
__extension__
extern long long int strtoll (__const char *__restrict __nptr,
char **__restrict __endptr, int __base)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
__extension__
extern unsigned long long int strtoull (__const char *__restrict __nptr,
char **__restrict __endptr, int __base)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
extern double __strtod_internal (__const char *__restrict __nptr,
char **__restrict __endptr, int __group)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
extern float __strtof_internal (__const char *__restrict __nptr,
char **__restrict __endptr, int __group)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
extern long double __strtold_internal (__const char *__restrict __nptr,
char **__restrict __endptr,
int __group)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
extern long int __strtol_internal (__const char *__restrict __nptr,
char **__restrict __endptr,
int __base, int __group)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
extern unsigned long int __strtoul_internal (__const char *__restrict __nptr,
char **__restrict __endptr,
int __base, int __group)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
__extension__
extern long long int __strtoll_internal (__const char *__restrict __nptr,
char **__restrict __endptr,
int __base, int __group)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
__extension__
extern unsigned long long int __strtoull_internal (__const char *
__restrict __nptr,
char **__restrict __endptr,
int __base, int __group)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
extern char *l64a (long int __n) __attribute__ ((__nothrow__)) ;
extern long int a64l (__const char *__s)
__attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
extern long int random (void) __attribute__ ((__nothrow__));
extern void srandom (unsigned int __seed) __attribute__ ((__nothrow__));
extern char *initstate (unsigned int __seed, char *__statebuf,
size_t __statelen) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
extern char *setstate (char *__statebuf) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
struct random_data
{
int32_t *fptr;
int32_t *rptr;
int32_t *state;
int rand_type;
int rand_deg;
int rand_sep;
int32_t *end_ptr;
};
extern int random_r (struct random_data *__restrict __buf,
int32_t *__restrict __result) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int srandom_r (unsigned int __seed, struct random_data *__buf)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
size_t __statelen,
struct random_data *__restrict __buf)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 4)));
extern int setstate_r (char *__restrict __statebuf,
struct random_data *__restrict __buf)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int rand (void) __attribute__ ((__nothrow__));
extern void srand (unsigned int __seed) __attribute__ ((__nothrow__));
extern int rand_r (unsigned int *__seed) __attribute__ ((__nothrow__));
extern double drand48 (void) __attribute__ ((__nothrow__));
extern double erand48 (unsigned short int __xsubi[3]) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern long int lrand48 (void) __attribute__ ((__nothrow__));
extern long int nrand48 (unsigned short int __xsubi[3])
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern long int mrand48 (void) __attribute__ ((__nothrow__));
extern long int jrand48 (unsigned short int __xsubi[3])
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern void srand48 (long int __seedval) __attribute__ ((__nothrow__));
extern unsigned short int *seed48 (unsigned short int __seed16v[3])
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern void lcong48 (unsigned short int __param[7]) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
struct drand48_data
{
unsigned short int __x[3];
unsigned short int __old_x[3];
unsigned short int __c;
unsigned short int __init;
unsigned long long int __a;
};
extern int drand48_r (struct drand48_data *__restrict __buffer,
double *__restrict __result) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int erand48_r (unsigned short int __xsubi[3],
struct drand48_data *__restrict __buffer,
double *__restrict __result) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int lrand48_r (struct drand48_data *__restrict __buffer,
long int *__restrict __result)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int nrand48_r (unsigned short int __xsubi[3],
struct drand48_data *__restrict __buffer,
long int *__restrict __result)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int mrand48_r (struct drand48_data *__restrict __buffer,
long int *__restrict __result)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int jrand48_r (unsigned short int __xsubi[3],
struct drand48_data *__restrict __buffer,
long int *__restrict __result)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
extern int seed48_r (unsigned short int __seed16v[3],
struct drand48_data *__buffer) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int lcong48_r (unsigned short int __param[7],
struct drand48_data *__buffer)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern void *malloc (size_t __size) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) ;
extern void *calloc (size_t __nmemb, size_t __size)
__attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) ;
extern void *realloc (void *__ptr, size_t __size)
__attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
extern void free (void *__ptr) __attribute__ ((__nothrow__));
extern void cfree (void *__ptr) __attribute__ ((__nothrow__));
extern void *alloca (size_t __size) __attribute__ ((__nothrow__));
extern void *valloc (size_t __size) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) ;
extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
extern void abort (void) __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
extern int atexit (void (*__func) (void)) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern void exit (int __status) __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
extern char *getenv (__const char *__name) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
extern char *__secure_getenv (__const char *__name)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
extern int putenv (char *__string) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern int setenv (__const char *__name, __const char *__value, int __replace)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
extern int unsetenv (__const char *__name) __attribute__ ((__nothrow__));
extern int clearenv (void) __attribute__ ((__nothrow__));
extern char *mktemp (char *__template) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) ;
extern char *mkdtemp (char *__template) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
extern int system (__const char *__command) ;
extern char *realpath (__const char *__restrict __name,
char *__restrict __resolved) __attribute__ ((__nothrow__)) ;
typedef int (*__compar_fn_t) (__const void *, __const void *);
extern void *bsearch (__const void *__key, __const void *__base,
size_t __nmemb, size_t __size, __compar_fn_t __compar)
__attribute__ ((__nonnull__ (1, 2, 5))) ;
extern void qsort (void *__base, size_t __nmemb, size_t __size,
__compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
extern int abs (int __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__)) ;
extern long int labs (long int __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__)) ;
extern div_t div (int __numer, int __denom)
__attribute__ ((__nothrow__)) __attribute__ ((__const__)) ;
extern ldiv_t ldiv (long int __numer, long int __denom)
__attribute__ ((__nothrow__)) __attribute__ ((__const__)) ;
extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
int *__restrict __sign) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4))) ;
extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
int *__restrict __sign) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4))) ;
extern char *gcvt (double __value, int __ndigit, char *__buf)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3))) ;
extern char *qecvt (long double __value, int __ndigit,
int *__restrict __decpt, int *__restrict __sign)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4))) ;
extern char *qfcvt (long double __value, int __ndigit,
int *__restrict __decpt, int *__restrict __sign)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4))) ;
extern char *qgcvt (long double __value, int __ndigit, char *__buf)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3))) ;
extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
int *__restrict __sign, char *__restrict __buf,
size_t __len) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
int *__restrict __sign, char *__restrict __buf,
size_t __len) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int qecvt_r (long double __value, int __ndigit,
int *__restrict __decpt, int *__restrict __sign,
char *__restrict __buf, size_t __len)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int qfcvt_r (long double __value, int __ndigit,
int *__restrict __decpt, int *__restrict __sign,
char *__restrict __buf, size_t __len)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int mblen (__const char *__s, size_t __n) __attribute__ ((__nothrow__)) ;
extern int mbtowc (wchar_t *__restrict __pwc,
__const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__)) ;
extern int wctomb (char *__s, wchar_t __wchar) __attribute__ ((__nothrow__)) ;
extern size_t mbstowcs (wchar_t *__restrict __pwcs,
__const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__));
extern size_t wcstombs (char *__restrict __s,
__const wchar_t *__restrict __pwcs, size_t __n)
__attribute__ ((__nothrow__));
extern int rpmatch (__const char *__response) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
extern int posix_openpt (int __oflag) ;
extern int getloadavg (double __loadavg[], int __nelem)
__attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
struct hash_entry
{
struct hash_entry *prev, *next;
char *name;
char *str_val;
int int_val;
} ;
typedef struct hash_entry **hash_table;
extern struct hash_entry *ndtbl[101];
extern struct hash_entry *sctbl[101];
extern struct hash_entry *ccltab[101];
extern int printstats, syntaxerror, eofseen, ddebug, trace, nowarn, spprdflt;
extern int interactive, caseins, lex_compat, do_yylineno;
extern int useecs, fulltbl, usemecs, fullspd;
extern int gen_line_dirs, performance_report, backing_up_report;
extern int C_plus_plus, long_align, use_read, yytext_is_array, do_yywrap;
extern int csize;
extern int yymore_used, reject, real_reject, continued_action, in_rule;
extern int yymore_really_used, reject_really_used;
extern int datapos, dataline, linenum, out_linenum;
extern FILE *skelfile, *yyin, *backing_up_file;
extern const char *skel[];
extern int skel_ind;
extern char *infilename, *outfilename;
extern int did_outfilename;
extern char *prefix, *yyclass;
extern int do_stdinit, use_stdout;
extern char **input_files;
extern int num_input_files;
extern char *program_name;
extern char *action_array;
extern int action_size;
extern int defs1_offset, prolog_offset, action_offset, action_index;
extern int onestate[500], onesym[500];
extern int onenext[500], onedef[500], onesp;
extern int current_mns, current_max_rules;
extern int num_rules, num_eof_rules, default_rule, lastnfa;
extern int *firstst, *lastst, *finalst, *transchar, *trans1, *trans2;
extern int *accptnum, *assoc_rule, *state_type;
extern int *rule_type, *rule_linenum, *rule_useful;
extern int current_state_type;
extern int variable_trailing_context_rules;
extern int numtemps, numprots, protprev[50], protnext[50], prottbl[50];
extern int protcomst[50], firstprot, lastprot, protsave[2000];
extern int numecs, nextecm[256 + 1], ecgroup[256 + 1], nummecs;
extern int tecfwd[256 + 1], tecbck[256 + 1];
extern int lastsc, *scset, *scbol, *scxclu, *sceof;
extern int current_max_scs;
extern char **scname;
extern int current_max_dfa_size, current_max_xpairs;
extern int current_max_template_xpairs, current_max_dfas;
extern int lastdfa, *nxt, *chk, *tnxt;
extern int *base, *def, *nultrans, NUL_ec, tblend, firstfree, **dss, *dfasiz;
extern union dfaacc_union
{
int *dfaacc_set;
int dfaacc_state;
} *dfaacc;
extern int *accsiz, *dhash, numas;
extern int numsnpairs, jambase, jamstate;
extern int end_of_buffer_state;
extern int lastccl, *cclmap, *ccllen, *cclng, cclreuse;
extern int current_maxccls, current_max_ccl_tbl_size;
extern unsigned char *ccltbl;
extern char nmstr[2048];
extern int sectnum, nummt, hshcol, dfaeql, numeps, eps2, num_reallocs;
extern int tmpuses, totnst, peakpairs, numuniq, numdup, hshsave;
extern int num_backing_up, bol_needed;
void *allocate_array (int, size_t);
void *reallocate_array (void*, int, size_t);
void *flex_alloc (size_t);
void *flex_realloc (void*, size_t);
void flex_free (void*);
extern int yylval;
extern void ccladd (int, int);
extern int cclinit (void);
extern void cclnegate (int);
extern void list_character_set (FILE*, int[]);
extern void check_for_backing_up (int, int[]);
extern void check_trailing_context (int*, int, int*, int);
extern int *epsclosure (int*, int*, int[], int*, int*);
extern void increase_max_dfas (void);
extern void ntod (void);
extern int snstods (int[], int, int[], int, int, int*);
extern void ccl2ecl (void);
extern int cre8ecs (int[], int[], int);
extern void mkeccl (unsigned char[], int, int[], int[], int, int);
extern void mkechar (int, int[], int[]);
extern void do_indent (void);
extern void gen_backing_up (void);
extern void gen_bu_action (void);
extern void genctbl (void);
extern void gen_find_action (void);
extern void genftbl (void);
extern void gen_next_compressed_state (char*);
extern void gen_next_match (void);
extern void gen_next_state (int);
extern void gen_NUL_trans (void);
extern void gen_start_state (void);
extern void gentabs (void);
extern void indent_put2s (char[], char[]);
extern void indent_puts (char[]);
extern void make_tables (void);
extern void check_options (void);
extern void flexend (int);
extern void usage (void);
extern void action_define ( char *defname, int value );
extern void add_action ( char *new_text );
extern int all_lower (register char *);
extern int all_upper (register char *);
extern void bubble (int [], int);
extern void check_char (int c);
extern unsigned char clower (int);
extern char *copy_string (register const char *);
extern unsigned char *copy_unsigned_string (register unsigned char *);
extern void cshell (unsigned char [], int, int);
extern void dataend (void);
extern void dataflush (void);
extern void flexerror (const char[]);
extern void flexfatal (const char[]);
extern int htoi (unsigned char[]);
extern void lerrif (const char[], int);
extern void lerrsf (const char[], const char[]);
extern void line_directive_out (FILE*, int);
extern void mark_defs1 (void);
extern void mark_prolog (void);
extern void mk2data (int);
extern void mkdata (int);
extern int myctoi (char []);
extern unsigned char myesc (unsigned char[]);
extern int otoi (unsigned char [] );
extern void out (const char []);
extern void out_dec (const char [], int);
extern void out_dec2 (const char [], int, int);
extern void out_hex (const char [], unsigned int);
extern void out_line_count (const char []);
extern void out_str (const char [], const char []);
extern void out_str3
(const char [], const char [], const char [], const char []);
extern void out_str_dec (const char [], const char [], int);
extern void outc (int);
extern void outn (const char []);
extern char *readable_form (int);
extern void skelout (void);
extern void transition_struct_out (int, int);
extern void *yy_flex_xmalloc ( int );
extern void zero_out (char *, size_t);
extern void add_accept (int, int);
extern int copysingl (int, int);
extern void dumpnfa (int);
extern void finish_rule (int, int, int, int);
extern int link_machines (int, int);
extern void mark_beginning_as_normal (register int);
extern int mkbranch (int, int);
extern int mkclos (int);
extern int mkopt (int);
extern int mkor (int, int);
extern int mkposcl (int);
extern int mkrep (int, int, int);
extern int mkstate (int);
extern void new_rule (void);
extern void build_eof_action (void);
extern void format_pinpoint_message (char[], char[]);
extern void pinpoint_message (char[]);
extern void line_warning ( char[], int );
extern void line_pinpoint ( char[], int );
extern void format_synerr (char [], char[]);
extern void synerr (char []);
extern void format_warn (char [], char[]);
extern void warn (char []);
extern void yyerror (char []);
extern int yyparse (void);
extern int flexscan (void);
extern void set_input_file (char*);
extern int yywrap (void);
extern int addsym (register char[], char*, int, hash_table, int);
extern void cclinstal (unsigned char [], int);
extern int ccllookup (unsigned char []);
extern struct hash_entry *findsym (register char[], hash_table, int );
extern void ndinstal (char[], unsigned char[]);
extern unsigned char *ndlookup (char[]);
extern void scextend (void);
extern void scinstal (char[], int);
extern int sclookup (char[]);
extern void bldtbl (int[], int, int, int, int);
extern void cmptmps (void);
extern void expand_nxt_chk (void);
extern int find_table_space (int*, int);
extern void inittbl (void);
extern void mkdeftbl (void);
extern void mk1tbl (int, int, int, int);
extern void place_state (int*, int, int);
extern void stack1 (int, int, int, int);
extern int yylex (void);
extern int yylval;
static char flex_version[] = "2.5.1";
void flexinit (int, char**);
void readin (void);
void set_up_initial_allocations (void);
int printstats, syntaxerror, eofseen, ddebug, trace, nowarn, spprdflt;
int interactive, caseins, lex_compat, do_yylineno, useecs, fulltbl, usemecs;
int fullspd, gen_line_dirs, performance_report, backing_up_report;
int C_plus_plus, long_align, use_read, yytext_is_array, do_yywrap, csize;
int yymore_used, reject, real_reject, continued_action, in_rule;
int yymore_really_used, reject_really_used;
int datapos, dataline, linenum, out_linenum;
FILE *skelfile = ((void *)0);
FILE *err = ((void *)0);
int skel_ind = 0;
char *action_array;
int action_size, defs1_offset, prolog_offset, action_offset, action_index;
char *infilename = ((void *)0), *outfilename = ((void *)0);
int did_outfilename;
char *prefix, *yyclass;
int do_stdinit, use_stdout;
int onestate[500], onesym[500];
int onenext[500], onedef[500], onesp;
int current_mns, current_max_rules;
int num_rules, num_eof_rules, default_rule, lastnfa;
int *firstst, *lastst, *finalst, *transchar, *trans1, *trans2;
int *accptnum, *assoc_rule, *state_type;
int *rule_type, *rule_linenum, *rule_useful;
int current_state_type;
int variable_trailing_context_rules;
int numtemps, numprots, protprev[50], protnext[50], prottbl[50];
int protcomst[50], firstprot, lastprot, protsave[2000];
int numecs, nextecm[256 + 1], ecgroup[256 + 1], nummecs, tecfwd[256 + 1];
int tecbck[256 + 1];
int lastsc, *scset, *scbol, *scxclu, *sceof;
int current_max_scs;
char **scname;
int current_max_dfa_size, current_max_xpairs;
int current_max_template_xpairs, current_max_dfas;
int lastdfa, *nxt, *chk, *tnxt;
int *base, *def, *nultrans, NUL_ec, tblend, firstfree, **dss, *dfasiz;
union dfaacc_union *dfaacc;
int *accsiz, *dhash, numas;
int numsnpairs, jambase, jamstate;
int lastccl, *cclmap, *ccllen, *cclng, cclreuse;
int current_maxccls, current_max_ccl_tbl_size;
unsigned char *ccltbl;
char nmstr[2048];
int sectnum, nummt, hshcol, dfaeql, numeps, eps2, num_reallocs;
int tmpuses, totnst, peakpairs, numuniq, numdup, hshsave;
int num_backing_up, bol_needed;
FILE *backing_up_file;
int end_of_buffer_state;
char **input_files;
int num_input_files;
char *program_name = "flex";
static char *outfile_template = "lex.%s.%s";
static char *backing_name = "lex.backup";
static char outfile_path[2048];
static int outfile_created = 0;
static char *skelname = ((void *)0);
int main( argc, argv )
int argc;
char **argv;
{
int i;
if(--argc >0){
err = fopen( *++argv, "w" );
--argv; ++argc;
}
flexinit( argc, argv );
readin();
ntod();
for ( i = 1; i <= num_rules; ++i )
if ( ! rule_useful[i] && i != default_rule )
line_warning( ("rule cannot be matched"),
rule_linenum[i] );
if ( spprdflt && ! reject && rule_useful[default_rule] )
line_warning(
("-s option given but default rule can be matched"),
rule_linenum[default_rule] );
make_tables();
flexend( 0 );
return 0;
}
void check_options()
{
int i;
if ( lex_compat )
{
if ( C_plus_plus )
flexerror( ("Can't use -+ with -l option") );
if ( fulltbl || fullspd )
flexerror( ("Can't use -f or -F with -l option") );
yymore_really_used = reject_really_used = 1;
yytext_is_array = 1;
do_yylineno = 1;
use_read = 0;
}
if ( do_yylineno )
reject_really_used = 1;
if ( csize == -1 )
{
if ( (fulltbl || fullspd) && ! useecs )
csize = 128;
else
csize = 256;
}
if ( interactive == -1 )
{
if ( fulltbl || fullspd )
interactive = 0;
else
interactive = 1;
}
if ( fulltbl || fullspd )
{
if ( usemecs )
flexerror(
("-Cf/-CF and -Cm don't make sense together") );
if ( interactive )
flexerror( ("-Cf/-CF and -I are incompatible") );
if ( lex_compat )
flexerror(
("-Cf/-CF are incompatible with lex-compatibility mode") );
if ( do_yylineno )
flexerror(
("-Cf/-CF and %option yylineno are incompatible") );
if ( fulltbl && fullspd )
flexerror( ("-Cf and -CF are mutually exclusive") );
}
if ( C_plus_plus && fullspd )
flexerror( ("Can't use -+ with -CF option") );
if ( C_plus_plus && yytext_is_array )
{
warn( ("%array incompatible with -+ option") );
yytext_is_array = 0;
}
if ( useecs )
{
ecgroup[1] = 0;
for ( i = 2; i <= csize; ++i )
{
ecgroup[i] = i - 1;
nextecm[i - 1] = i;
}
nextecm[csize] = 0;
}
else
{
for ( i = 1; i <= csize; ++i )
{
ecgroup[i] = i;
nextecm[i] = -32767;
}
}
if ( ! use_stdout )
{
FILE *prev_stdout;
if ( ! did_outfilename )
{
char *suffix;
if ( C_plus_plus )
suffix = "cc";
else
suffix = "c";
sprintf( outfile_path, outfile_template,
prefix, suffix );
outfilename = outfile_path;
}
prev_stdout = freopen( outfilename, "w", stdout );
if ( prev_stdout == ((void *)0) )
lerrsf( ("could not create %s"), outfilename );
outfile_created = 1;
}
if ( skelname && (skelfile = fopen( skelname, "r" )) == ((void *)0) )
lerrsf( ("can't open skeleton file %s"), skelname );
if ( strcmp( prefix, "yy" ) )
{
if ( C_plus_plus )
out_str3( "#define yy%s %s%s\n", "FlexLexer", prefix, "FlexLexer" );
else
{
out_str3( "#define yy%s %s%s\n", "_create_buffer", prefix, "_create_buffer" );
out_str3( "#define yy%s %s%s\n", "_delete_buffer", prefix, "_delete_buffer" );
out_str3( "#define yy%s %s%s\n", "_scan_buffer", prefix, "_scan_buffer" );
out_str3( "#define yy%s %s%s\n", "_scan_string", prefix, "_scan_string" );
out_str3( "#define yy%s %s%s\n", "_scan_bytes", prefix, "_scan_bytes" );
out_str3( "#define yy%s %s%s\n", "_flex_debug", prefix, "_flex_debug" );
out_str3( "#define yy%s %s%s\n", "_init_buffer", prefix, "_init_buffer" );
out_str3( "#define yy%s %s%s\n", "_flush_buffer", prefix, "_flush_buffer" );
out_str3( "#define yy%s %s%s\n", "_load_buffer_state", prefix, "_load_buffer_state" );
out_str3( "#define yy%s %s%s\n", "_switch_to_buffer", prefix, "_switch_to_buffer" );
out_str3( "#define yy%s %s%s\n", "in", prefix, "in" );
out_str3( "#define yy%s %s%s\n", "leng", prefix, "leng" );
out_str3( "#define yy%s %s%s\n", "lex", prefix, "lex" );
out_str3( "#define yy%s %s%s\n", "out", prefix, "out" );
out_str3( "#define yy%s %s%s\n", "restart", prefix, "restart" );
out_str3( "#define yy%s %s%s\n", "text", prefix, "text" );
if ( do_yylineno )
out_str3( "#define yy%s %s%s\n", "lineno", prefix, "lineno" );
}
if ( do_yywrap )
out_str3( "#define yy%s %s%s\n", "wrap", prefix, "wrap" );
outn( "" );
}
if ( did_outfilename )
line_directive_out( stdout, 0 );
skelout();
}
void flexend( exit_status )
int exit_status;
{
int tblsiz;
int unlink();
if ( skelfile != ((void *)0) )
{
if ( ferror( skelfile ) )
lerrsf( ("input error reading skeleton file %s"),
skelname );
else if ( fclose( skelfile ) )
lerrsf( ("error closing skeleton file %s"),
skelname );
}
if ( exit_status != 0 && outfile_created )
{
if ( ferror( stdout ) )
lerrsf( ("error writing output file %s"),
outfilename );
else if ( fclose( stdout ) )
lerrsf( ("error closing output file %s"),
outfilename );
else if ( unlink( outfilename ) )
lerrsf( ("error deleting output file %s"),
outfilename );
}
if ( backing_up_report && backing_up_file )
{
if ( num_backing_up == 0 )
fprintf( backing_up_file, ("No backing up.\n") );
else if ( fullspd || fulltbl )
fprintf( backing_up_file,
("%d backing up (non-accepting) states.\n"),
num_backing_up );
else
fprintf( backing_up_file,
("Compressed tables always back up.\n") );
if ( ferror( backing_up_file ) )
lerrsf( ("error writing backup file %s"),
backing_name );
else if ( fclose( backing_up_file ) )
lerrsf( ("error closing backup file %s"),
backing_name );
}
if ( printstats )
{
fprintf( err, ("%s version %s usage statistics:\n"),
program_name, flex_version );
fprintf( err, (" scanner options: -") );
if ( C_plus_plus )
_IO_putc ('+', err);
if ( backing_up_report )
_IO_putc ('b', err);
if ( ddebug )
_IO_putc ('d', err);
if ( caseins )
_IO_putc ('i', err);
if ( lex_compat )
_IO_putc ('l', err);
if ( performance_report > 0 )
_IO_putc ('p', err);
if ( performance_report > 1 )
_IO_putc ('p', err);
if ( spprdflt )
_IO_putc ('s', err);
if ( use_stdout )
_IO_putc ('t', err);
if ( printstats )
_IO_putc ('v', err);
if ( nowarn )
_IO_putc ('w', err);
if ( interactive == 0 )
_IO_putc ('B', err);
if ( interactive == 1 )
_IO_putc ('I', err);
if ( ! gen_line_dirs )
_IO_putc ('L', err);
if ( trace )
_IO_putc ('T', err);
if ( csize == -1 )
csize = 256;
if ( csize == 128 )
_IO_putc ('7', err);
else
_IO_putc ('8', err);
fprintf( err, " -C" );
if ( long_align )
_IO_putc ('a', err);
if ( fulltbl )
_IO_putc ('f', err);
if ( fullspd )
_IO_putc ('F', err);
if ( useecs )
_IO_putc ('e', err);
if ( usemecs )
_IO_putc ('m', err);
if ( use_read )
_IO_putc ('r', err);
if ( did_outfilename )
fprintf( err, " -o%s", outfilename );
if ( skelname )
fprintf( err, " -S%s", skelname );
if ( strcmp( prefix, "yy" ) )
fprintf( err, " -P%s", prefix );
_IO_putc ('\n', err);
fprintf( err, (" %d/%d NFA states\n"),
lastnfa, current_mns );
fprintf( err, (" %d/%d DFA states (%d words)\n"),
lastdfa, current_max_dfas, totnst );
fprintf( err, (" %d rules\n"),
num_rules + num_eof_rules - 1 );
if ( num_backing_up == 0 )
fprintf( err, (" No backing up\n") );
else if ( fullspd || fulltbl )
fprintf( err,
(" %d backing-up (non-accepting) states\n"),
num_backing_up );
else
fprintf( err,
(" Compressed tables always back-up\n") );
if ( bol_needed )
fprintf( err,
(" Beginning-of-line patterns used\n") );
fprintf( err, (" %d/%d start conditions\n"), lastsc,
current_max_scs );
fprintf( err,
(" %d epsilon states, %d double epsilon states\n"),
numeps, eps2 );
if ( lastccl == 0 )
fprintf( err, (" no character classes\n") );
else
fprintf( err,
(" %d/%d character classes needed %d/%d words of storage, %d reused\n"),
lastccl, current_maxccls,
cclmap[lastccl] + ccllen[lastccl],
current_max_ccl_tbl_size, cclreuse );
fprintf( err, (" %d state/nextstate pairs created\n"),
numsnpairs );
fprintf( err, (" %d/%d unique/duplicate transitions\n"),
numuniq, numdup );
if ( fulltbl )
{
tblsiz = lastdfa * numecs;
fprintf( err, (" %d table entries\n"), tblsiz );
}
else
{
tblsiz = 2 * (lastdfa + numtemps) + 2 * tblend;
fprintf( err,
(" %d/%d base-def entries created\n"),
lastdfa + numtemps, current_max_dfas );
fprintf( err,
(" %d/%d (peak %d) nxt-chk entries created\n"),
tblend, current_max_xpairs, peakpairs );
fprintf( err,
(" %d/%d (peak %d) template nxt-chk entries created\n"),
numtemps * nummecs,
current_max_template_xpairs,
numtemps * numecs );
fprintf( err, (" %d empty table entries\n"),
nummt );
fprintf( err, (" %d protos created\n"),
numprots );
fprintf( err,
(" %d templates created, %d uses\n"),
numtemps, tmpuses );
}
if ( useecs )
{
tblsiz = tblsiz + csize;
fprintf( err,
(" %d/%d equivalence classes created\n"),
numecs, csize );
}
if ( usemecs )
{
tblsiz = tblsiz + numecs;
fprintf( err,
(" %d/%d meta-equivalence classes created\n"),
nummecs, csize );
}
fprintf( err,
(" %d (%d saved) hash collisions, %d DFAs equal\n"),
hshcol, hshsave, dfaeql );
fprintf( err, (" %d sets of reallocations needed\n"),
num_reallocs );
fprintf( err, (" %d total table entries needed\n"),
tblsiz );
}
exit( exit_status );
}
void flexinit( argc, argv )
int argc;
char **argv;
{
int i, sawcmpflag;
char *arg, *mktemp();
printstats = syntaxerror = trace = spprdflt = caseins = 0;
lex_compat = C_plus_plus = backing_up_report = ddebug = fulltbl = 0;
fullspd = long_align = nowarn = yymore_used = continued_action = 0;
do_yylineno = yytext_is_array = in_rule = reject = 0;
yymore_really_used = reject_really_used = -1;
interactive = csize = -1;
do_yywrap = gen_line_dirs = usemecs = useecs = do_stdinit = 1;
performance_report = 0;
did_outfilename = 0;
prefix = "yy";
yyclass = 0;
use_read = use_stdout = 0;
sawcmpflag = 0;
action_size = 2048;
action_array = (char *) allocate_array( action_size, sizeof( char ) );
defs1_offset = prolog_offset = action_offset = action_index = 0;
action_array[0] = '\0';
program_name = "Executable";
if ( program_name[0] != '\0' &&
program_name[strlen( program_name ) - 1] == '+' )
C_plus_plus = 1;
++argv;--argc;
for ( --argc, ++argv; argc ; --argc, ++argv )
{
arg = argv[0];
if ( arg[0] != '-' || arg[1] == '\0' )
break;
if ( arg[1] == '-' )
{
if ( ! strcmp( arg, "--help" ) )
arg = "-h";
else if ( ! strcmp( arg, "--version" ) )
arg = "-V";
}
for ( i = 1; arg[i] != '\0'; ++i )
switch ( arg[i] )
{
case '+':
C_plus_plus = 1;
break;
case 'B':
interactive = 0;
break;
case 'b':
backing_up_report = 1;
break;
case 'c':
break;
case 'C':
if ( i != 1 )
flexerror(
("-C flag must be given separately") );
if ( ! sawcmpflag )
{
useecs = 0;
usemecs = 0;
fulltbl = 0;
sawcmpflag = 1;
}
for ( ++i; arg[i] != '\0'; ++i )
switch ( arg[i] )
{
case 'a':
long_align =
1;
break;
case 'e':
useecs = 1;
break;
case 'F':
fullspd = 1;
break;
case 'f':
fulltbl = 1;
break;
case 'm':
usemecs = 1;
break;
case 'r':
use_read = 1;
break;
default:
lerrif(
("unknown -C option '%c'"),
(int) arg[i] );
break;
}
goto get_next_arg;
case 'd':
ddebug = 1;
break;
case 'f':
useecs = usemecs = 0;
use_read = fulltbl = 1;
break;
case 'F':
useecs = usemecs = 0;
use_read = fullspd = 1;
break;
case '?':
case 'h':
usage();
exit( 0 );
case 'I':
interactive = 1;
break;
case 'i':
caseins = 1;
break;
case 'l':
lex_compat = 1;
break;
case 'L':
gen_line_dirs = 0;
break;
case 'n':
break;
case 'o':
if ( i != 1 )
flexerror(
("-o flag must be given separately") );
outfilename = arg + i + 1;
did_outfilename = 1;
goto get_next_arg;
case 'P':
if ( i != 1 )
flexerror(
("-P flag must be given separately") );
prefix = arg + i + 1;
goto get_next_arg;
case 'p':
++performance_report;
break;
case 'S':
if ( i != 1 )
flexerror(
("-S flag must be given separately") );
skelname = arg + i + 1;
goto get_next_arg;
case 's':
spprdflt = 1;
break;
case 't':
use_stdout = 1;
break;
case 'T':
trace = 1;
break;
case 'v':
printstats = 1;
break;
case 'V':
printf( ("%s version %s\n"),
program_name, flex_version );
exit( 0 );
case 'w':
nowarn = 1;
break;
case '7':
csize = 128;
break;
case '8':
csize = 256;
break;
default:
fprintf( err,
("%s: unknown flag '%c'. For usage, try\n\t%s --help\n"),
program_name, (int) arg[i],
program_name );
exit( 1 );
}
get_next_arg: ;
}
num_input_files = argc;
input_files = argv;
set_input_file( num_input_files > 0 ? input_files[0] : ((void *)0) );
lastccl = lastsc = lastdfa = lastnfa = 0;
num_rules = num_eof_rules = default_rule = 0;
numas = numsnpairs = tmpuses = 0;
numecs = numeps = eps2 = num_reallocs = hshcol = dfaeql = totnst = 0;
numuniq = numdup = hshsave = eofseen = datapos = dataline = 0;
num_backing_up = onesp = numprots = 0;
variable_trailing_context_rules = bol_needed = 0;
out_linenum = linenum = sectnum = 1;
firstprot = 0;
lastprot = 1;
set_up_initial_allocations();
}
void readin()
{
static char yy_stdinit[] = "FILE *yyin = stdin, *yyout = stdout;";
static char yy_nostdinit[] =
"FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;";
line_directive_out( (FILE *) 0, 1 );
if ( yyparse() )
{
pinpoint_message( ("fatal parse error") );
flexend( 1 );
}
if ( syntaxerror )
flexend( 1 );
if ( backing_up_report )
{
backing_up_file = fopen( backing_name, "w" );
if ( backing_up_file == ((void *)0) )
lerrsf(
("could not create backing-up info file %s"),
backing_name );
}
else
backing_up_file = ((void *)0);
if ( yymore_really_used == 1 )
yymore_used = 1;
else if ( yymore_really_used == 0 )
yymore_used = 0;
if ( reject_really_used == 1 )
reject = 1;
else if ( reject_really_used == 0 )
reject = 0;
if ( performance_report > 0 )
{
if ( lex_compat )
{
fprintf( err,
("-l AT&T lex compatibility option entails a large performance penalty\n") );
fprintf( err,
(" and may be the actual source of other reported performance penalties\n") );
}
else if ( do_yylineno )
{
fprintf( err,
("%%option yylineno entails a large performance penalty\n") );
}
if ( performance_report > 1 )
{
if ( interactive )
fprintf( err,
("-I (interactive) entails a minor performance penalty\n") );
if ( yymore_used )
fprintf( err,
("yymore() entails a minor performance penalty\n") );
}
if ( reject )
fprintf( err,
("REJECT entails a large performance penalty\n") );
if ( variable_trailing_context_rules )
fprintf( err,
("Variable trailing context rules entail a large performance penalty\n") );
}
if ( reject )
real_reject = 1;
if ( variable_trailing_context_rules )
reject = 1;
if ( (fulltbl || fullspd) && reject )
{
if ( real_reject )
flexerror(
("REJECT cannot be used with -f or -F") );
else if ( do_yylineno )
flexerror(
("%option yylineno cannot be used with -f or -F") );
else
flexerror(
("variable trailing context rules cannot be used with -f or -F") );
}
if ( reject )
outn( "\n#define YY_USES_REJECT" );
if ( ! do_yywrap )
{
outn( "\n#define yywrap() 1" );
outn( "#define YY_SKIP_YYWRAP" );
}
if ( ddebug )
outn( "\n#define FLEX_DEBUG" );
if ( csize == 256 )
outn( "typedef unsigned char YY_CHAR;" );
else
outn( "typedef char YY_CHAR;" );
if ( C_plus_plus )
{
outn( "#define yytext_ptr yytext" );
if ( interactive )
outn( "#define YY_INTERACTIVE" );
}
else
{
if ( do_stdinit )
{
outn( "#ifdef VMS" );
outn( "#ifndef __VMS_POSIX" );
outn( yy_nostdinit );
outn( "#else" );
outn( yy_stdinit );
outn( "#endif" );
outn( "#else" );
outn( yy_stdinit );
outn( "#endif" );
}
else
outn( yy_nostdinit );
}
if ( fullspd )
outn( "typedef const struct yy_trans_info *yy_state_type;" );
else if ( ! C_plus_plus )
outn( "typedef int yy_state_type;" );
if ( ddebug )
outn( "\n#define FLEX_DEBUG" );
if ( lex_compat )
outn( "#define YY_FLEX_LEX_COMPAT" );
if ( do_yylineno && ! C_plus_plus )
{
outn( "extern int yylineno;" );
outn( "int yylineno = 1;" );
}
if ( C_plus_plus )
{
outn( "\n#include <FlexLexer.h>" );
if ( yyclass )
{
outn( "int yyFlexLexer::yylex()" );
outn( "\t{" );
outn(
"\tLexerError( \"yyFlexLexer::yylex invoked but %option yyclass used\" );" );
outn( "\treturn 0;" );
outn( "\t}" );
out_str( "\n#define YY_DECL int %s::yylex()\n",
yyclass );
}
}
else
{
if ( yytext_is_array )
outn( "extern char yytext[];\n" );
else
{
outn( "extern char *yytext;" );
outn( "#define yytext_ptr yytext" );
}
if ( yyclass )
flexerror(
("%option yyclass only meaningful for C++ scanners") );
}
if ( useecs )
numecs = cre8ecs( nextecm, ecgroup, csize );
else
numecs = csize;
ecgroup[0] = ecgroup[csize];
NUL_ec = ((ecgroup[0]) < 0 ? -(ecgroup[0]) : (ecgroup[0]));
if ( useecs )
ccl2ecl();
}
void set_up_initial_allocations()
{
current_mns = 2000;
firstst = (int *) allocate_array( current_mns, sizeof( int ) );
lastst = (int *) allocate_array( current_mns, sizeof( int ) );
finalst = (int *) allocate_array( current_mns, sizeof( int ) );
transchar = (int *) allocate_array( current_mns, sizeof( int ) );
trans1 = (int *) allocate_array( current_mns, sizeof( int ) );
trans2 = (int *) allocate_array( current_mns, sizeof( int ) );
accptnum = (int *) allocate_array( current_mns, sizeof( int ) );
assoc_rule = (int *) allocate_array( current_mns, sizeof( int ) );
state_type = (int *) allocate_array( current_mns, sizeof( int ) );
current_max_rules = 100;
rule_type = (int *) allocate_array( current_max_rules, sizeof( int ) );
rule_linenum = (int *) allocate_array( current_max_rules, sizeof( int ) );
rule_useful = (int *) allocate_array( current_max_rules, sizeof( int ) );
current_max_scs = 40;
scset = (int *) allocate_array( current_max_scs, sizeof( int ) );
scbol = (int *) allocate_array( current_max_scs, sizeof( int ) );
scxclu = (int *) allocate_array( current_max_scs, sizeof( int ) );
sceof = (int *) allocate_array( current_max_scs, sizeof( int ) );
scname = (char **) allocate_array( current_max_scs, sizeof( char * ) );
current_maxccls = 100;
cclmap = (int *) allocate_array( current_maxccls, sizeof( int ) );
ccllen = (int *) allocate_array( current_maxccls, sizeof( int ) );
cclng = (int *) allocate_array( current_maxccls, sizeof( int ) );
current_max_ccl_tbl_size = 500;
ccltbl = (unsigned char *) allocate_array( current_max_ccl_tbl_size, sizeof( unsigned char ) );
current_max_dfa_size = 750;
current_max_xpairs = 2000;
nxt = (int *) allocate_array( current_max_xpairs, sizeof( int ) );
chk = (int *) allocate_array( current_max_xpairs, sizeof( int ) );
current_max_template_xpairs = 2500;
tnxt = (int *) allocate_array( current_max_template_xpairs, sizeof( int ) );
current_max_dfas = 1000;
base = (int *) allocate_array( current_max_dfas, sizeof( int ) );
def = (int *) allocate_array( current_max_dfas, sizeof( int ) );
dfasiz = (int *) allocate_array( current_max_dfas, sizeof( int ) );
accsiz = (int *) allocate_array( current_max_dfas, sizeof( int ) );
dhash = (int *) allocate_array( current_max_dfas, sizeof( int ) );
dss = (int **) allocate_array( current_max_dfas, sizeof( int * ) );
dfaacc = (union dfaacc_union *) allocate_array( current_max_dfas, sizeof( union dfaacc_union ) );
nultrans = (int *) 0;
}
void usage()
{
fprintf( err,
("%s [-bcdfhilnpstvwBFILTV78+? -C[aefFmr] -ooutput -Pprefix -Sskeleton]\n"),
program_name );
fprintf( err, ("\t[--help --version] [file ...]\n") );
fprintf( err, ("\t-b generate backing-up information to %s\n"),
backing_name );
fprintf( err, ("\t-c do-nothing POSIX option\n") );
fprintf( err, ("\t-d turn on debug mode in generated scanner\n") );
fprintf( err, ("\t-f generate fast, large scanner\n") );
fprintf( err, ("\t-h produce this help message\n") );
fprintf( err, ("\t-i generate case-insensitive scanner\n") );
fprintf( err, ("\t-l maximal compatibility with original lex\n") );
fprintf( err, ("\t-n do-nothing POSIX option\n") );
fprintf( err, ("\t-p generate performance report to err\n") );
fprintf( err,
("\t-s suppress default rule to ECHO unmatched text\n") );
if ( ! did_outfilename )
{
sprintf( outfile_path, outfile_template,
prefix, C_plus_plus ? "cc" : "c" );
outfilename = outfile_path;
}
fprintf( err,
("\t-t write generated scanner on stdout instead of %s\n"),
outfilename );
fprintf( err,
("\t-v write summary of scanner statistics to f\n") );
fprintf( err, ("\t-w do not generate warnings\n") );
fprintf( err, ("\t-B generate batch scanner (opposite of -I)\n") );
fprintf( err,
("\t-F use alternative fast scanner representation\n") );
fprintf( err,
("\t-I generate interactive scanner (opposite of -B)\n") );
fprintf( err, ("\t-L suppress #line directives in scanner\n") );
fprintf( err, ("\t-T %s should run in trace mode\n"), program_name );
fprintf( err, ("\t-V report %s version\n"), program_name );
fprintf( err, ("\t-7 generate 7-bit scanner\n") );
fprintf( err, ("\t-8 generate 8-bit scanner\n") );
fprintf( err, ("\t-+ generate C++ scanner class\n") );
fprintf( err, ("\t-? produce this help message\n") );
fprintf( err,
("\t-C specify degree of table compression (default is -Cem):\n") );
fprintf( err,
("\t\t-Ca trade off larger tables for better memory alignment\n") );
fprintf( err, ("\t\t-Ce construct equivalence classes\n") );
fprintf( err,
("\t\t-Cf do not compress scanner tables; use -f representation\n") );
fprintf( err,
("\t\t-CF do not compress scanner tables; use -F representation\n") );
fprintf( err, ("\t\t-Cm construct meta-equivalence classes\n") );
fprintf( err,
("\t\t-Cr use read() instead of stdio for scanner input\n") );
fprintf( err, ("\t-o specify output filename\n") );
fprintf( err, ("\t-P specify scanner prefix other than \"yy\"\n") );
fprintf( err, ("\t-S specify skeleton file\n") );
fprintf( err, ("\t--help produce this help message\n") );
fprintf( err, ("\t--version report %s version\n"), program_name );
}
void ccladd( cclp, ch )
int cclp;
int ch;
{
int ind, len, newpos, i;
check_char( ch );
len = ccllen[cclp];
ind = cclmap[cclp];
for ( i = 0; i < len; ++i )
if ( ccltbl[ind + i] == ch )
return;
newpos = ind + len;
if ( newpos >= current_max_ccl_tbl_size )
{
current_max_ccl_tbl_size += 250;
++num_reallocs;
ccltbl = (unsigned char *) reallocate_array( (void *) ccltbl, current_max_ccl_tbl_size, sizeof( unsigned char ) );
}
ccllen[cclp] = len + 1;
ccltbl[newpos] = ch;
}
int cclinit()
{
if ( ++lastccl >= current_maxccls )
{
current_maxccls += 100;
++num_reallocs;
cclmap = (int *) reallocate_array( (void *) cclmap, current_maxccls, sizeof( int ) );
ccllen = (int *) reallocate_array( (void *) ccllen, current_maxccls, sizeof( int ) );
cclng = (int *) reallocate_array( (void *) cclng, current_maxccls, sizeof( int ) );
}
if ( lastccl == 1 )
cclmap[lastccl] = 0;
else
cclmap[lastccl] = cclmap[lastccl - 1] + ccllen[lastccl - 1];
ccllen[lastccl] = 0;
cclng[lastccl] = 0;
return lastccl;
}
void cclnegate( cclp )
int cclp;
{
cclng[cclp] = 1;
}
void list_character_set( file, cset )
FILE *file;
int cset[];
{
register int i;
_IO_putc ('[', file);
for ( i = 0; i < csize; ++i )
{
if ( cset[i] )
{
register int start_char = i;
_IO_putc (' ', file);
fputs( readable_form( i ), file );
while ( ++i < csize && cset[i] )
;
if ( i - 1 > start_char )
fprintf( err, "-%s", readable_form( i - 1 ) );
_IO_putc (' ', file);
}
}
_IO_putc (']', file);
}
void dump_associated_rules (FILE*, int);
void dump_transitions (FILE*, int[]);
void sympartition (int[], int, int[], int[]);
int symfollowset (int[], int, int, int[]);
void check_for_backing_up( ds, state )
int ds;
int state[];
{
if ( (reject && ! dfaacc[ds].dfaacc_set) ||
(! reject && ! dfaacc[ds].dfaacc_state) )
{
++num_backing_up;
if ( backing_up_report )
{
fprintf( backing_up_file,
("State #%d is non-accepting -\n"), ds );
dump_associated_rules( backing_up_file, ds );
dump_transitions( backing_up_file, state );
_IO_putc ('\n', backing_up_file);
}
}
}
void check_trailing_context( nfa_states, num_states, accset, nacc )
int *nfa_states, num_states;
int *accset;
int nacc;
{
register int i, j;
for ( i = 1; i <= num_states; ++i )
{
int ns = nfa_states[i];
register int type = state_type[ns];
register int ar = assoc_rule[ns];
if ( type == 0x1 || rule_type[ar] != 1 )
{
}
else if ( type == 0x2 )
{
for ( j = 1; j <= nacc; ++j )
if ( accset[j] & 0x4000 )
{
line_warning(
("dangerous trailing context"),
rule_linenum[ar] );
return;
}
}
}
}
void dump_associated_rules( file, ds )
FILE *file;
int ds;
{
register int i, j;
register int num_associated_rules = 0;
int rule_set[100 + 1];
int *dset = dss[ds];
int size = dfasiz[ds];
for ( i = 1; i <= size; ++i )
{
register int rule_num = rule_linenum[assoc_rule[dset[i]]];
for ( j = 1; j <= num_associated_rules; ++j )
if ( rule_num == rule_set[j] )
break;
if ( j > num_associated_rules )
{
if ( num_associated_rules < 100 )
rule_set[++num_associated_rules] = rule_num;
}
}
bubble( rule_set, num_associated_rules );
fprintf( file, (" associated rule line numbers:") );
for ( i = 1; i <= num_associated_rules; ++i )
{
if ( i % 8 == 1 )
_IO_putc ('\n', err);
fprintf( file, "\t%d", rule_set[i] );
}
_IO_putc ('\n', file);
}
void dump_transitions( file, state )
FILE *file;
int state[];
{
register int i, ec;
int out_char_set[256];
for ( i = 0; i < csize; ++i )
{
ec = ((ecgroup[i]) < 0 ? -(ecgroup[i]) : (ecgroup[i]));
out_char_set[i] = state[ec];
}
fprintf( file, (" out-transitions: ") );
list_character_set( file, out_char_set );
for ( i = 0; i < csize; ++i )
out_char_set[i] = ! out_char_set[i];
fprintf( file, ("\n jam-transitions: EOF ") );
list_character_set( file, out_char_set );
_IO_putc ('\n', file);
}
int *epsclosure( t, ns_addr, accset, nacc_addr, hv_addr )
int *t, *ns_addr, accset[], *nacc_addr, *hv_addr;
{
register int stkpos, ns, tsp;
int numstates = *ns_addr, nacc, hashval, transsym, nfaccnum;
int stkend, nstate;
static int did_stk_init = 0, *stk;
if ( ! did_stk_init )
{
stk = (int *) allocate_array( current_max_dfa_size, sizeof( int ) );
did_stk_init = 1;
}
nacc = stkend = hashval = 0;
for ( nstate = 1; nstate <= numstates; ++nstate )
{
ns = t[nstate];
if ( ! (trans1[ns] < 0) )
{
{ if ( ++stkend >= current_max_dfa_size ) { current_max_dfa_size += 750; ++num_reallocs; t = (int *) reallocate_array( (void *) t, current_max_dfa_size, sizeof( int ) ); stk = (int *) reallocate_array( (void *) stk, current_max_dfa_size, sizeof( int ) ); } stk[stkend] = ns; trans1[ns] = trans1[ns] - (31999 +2); }
{ nfaccnum = accptnum[ns]; if ( nfaccnum != 0 ) accset[++nacc] = nfaccnum; }
hashval += ns;
}
}
for ( stkpos = 1; stkpos <= stkend; ++stkpos )
{
ns = stk[stkpos];
transsym = transchar[ns];
if ( transsym == (256 + 1) )
{
tsp = trans1[ns] + (31999 +2);
if ( tsp != 0 )
{
if ( ! (trans1[tsp] < 0) )
{ { if ( ++stkend >= current_max_dfa_size ) { current_max_dfa_size += 750; ++num_reallocs; t = (int *) reallocate_array( (void *) t, current_max_dfa_size, sizeof( int ) ); stk = (int *) reallocate_array( (void *) stk, current_max_dfa_size, sizeof( int ) ); } stk[stkend] = tsp; trans1[tsp] = trans1[tsp] - (31999 +2); } { nfaccnum = accptnum[tsp]; if ( nfaccnum != 0 ) accset[++nacc] = nfaccnum; } if ( nfaccnum != 0 || transchar[tsp] != (256 + 1) ) { if ( ++numstates >= current_max_dfa_size ) { current_max_dfa_size += 750; ++num_reallocs; t = (int *) reallocate_array( (void *) t, current_max_dfa_size, sizeof( int ) ); stk = (int *) reallocate_array( (void *) stk, current_max_dfa_size, sizeof( int ) ); } t[numstates] = tsp; hashval += tsp; } }
tsp = trans2[ns];
if ( tsp != 0 && ! (trans1[tsp] < 0) )
{ { if ( ++stkend >= current_max_dfa_size ) { current_max_dfa_size += 750; ++num_reallocs; t = (int *) reallocate_array( (void *) t, current_max_dfa_size, sizeof( int ) ); stk = (int *) reallocate_array( (void *) stk, current_max_dfa_size, sizeof( int ) ); } stk[stkend] = tsp; trans1[tsp] = trans1[tsp] - (31999 +2); } { nfaccnum = accptnum[tsp]; if ( nfaccnum != 0 ) accset[++nacc] = nfaccnum; } if ( nfaccnum != 0 || transchar[tsp] != (256 + 1) ) { if ( ++numstates >= current_max_dfa_size ) { current_max_dfa_size += 750; ++num_reallocs; t = (int *) reallocate_array( (void *) t, current_max_dfa_size, sizeof( int ) ); stk = (int *) reallocate_array( (void *) stk, current_max_dfa_size, sizeof( int ) ); } t[numstates] = tsp; hashval += tsp; } }
}
}
}
for ( stkpos = 1; stkpos <= stkend; ++stkpos )
{
if ( (trans1[stk[stkpos]] < 0) )
trans1[stk[stkpos]] = trans1[stk[stkpos]] + (31999 +2);
else
flexfatal(
("consistency check failed in epsclosure()") );
}
*ns_addr = numstates;
*hv_addr = hashval;
*nacc_addr = nacc;
return t;
}
void increase_max_dfas()
{
current_max_dfas += 1000;
++num_reallocs;
base = (int *) reallocate_array( (void *) base, current_max_dfas, sizeof( int ) );
def = (int *) reallocate_array( (void *) def, current_max_dfas, sizeof( int ) );
dfasiz = (int *) reallocate_array( (void *) dfasiz, current_max_dfas, sizeof( int ) );
accsiz = (int *) reallocate_array( (void *) accsiz, current_max_dfas, sizeof( int ) );
dhash = (int *) reallocate_array( (void *) dhash, current_max_dfas, sizeof( int ) );
dss = (int **) reallocate_array( (void *) dss, current_max_dfas, sizeof( int * ) );
dfaacc = (union dfaacc_union *) reallocate_array( (void *) dfaacc, current_max_dfas, sizeof( union dfaacc_union ) );
if ( nultrans )
nultrans =
(int *) reallocate_array( (void *) nultrans, current_max_dfas, sizeof( int ) );
}
void ntod()
{
int *accset, ds, nacc, newds;
int sym, hashval, numstates, dsize;
int num_full_table_rows;
int *nset, *dset;
int targptr, totaltrans, i, comstate, comfreq, targ;
int symlist[256 + 1];
int num_start_states;
int todo_head, todo_next;
int duplist[256 + 1], state[256 + 1];
int targfreq[256 + 1], targstate[256 + 1];
accset = (int *) allocate_array( num_rules + 1, sizeof( int ) );
nset = (int *) allocate_array( current_max_dfa_size, sizeof( int ) );
todo_head = todo_next = 0;
for ( i = 0; i <= csize; ++i )
{
duplist[i] = 0;
symlist[i] = 0;
}
for ( i = 0; i <= num_rules; ++i )
accset[i] = 0;
if ( trace )
{
dumpnfa( scset[1] );
fputs( ("\n\nDFA Dump:\n\n"), err );
}
inittbl();
if ( ! fullspd && ecgroup[0] == numecs )
{
int use_NUL_table = (numecs == csize);
if ( fulltbl && ! use_NUL_table )
{
int power_of_two;
for ( power_of_two = 1; power_of_two <= csize;
power_of_two *= 2 )
if ( numecs == power_of_two )
{
use_NUL_table = 1;
break;
}
}
if ( use_NUL_table )
nultrans = (int *) allocate_array( current_max_dfas, sizeof( int ) );
}
if ( fullspd )
{
for ( i = 0; i <= numecs; ++i )
state[i] = 0;
place_state( state, 0, 0 );
dfaacc[0].dfaacc_state = 0;
}
else if ( fulltbl )
{
if ( nultrans )
num_full_table_rows = numecs;
else
num_full_table_rows = numecs + 1;
out_str_dec( "static const %s yy_nxt[][%d] =\n {\n",
long_align ? "long" : "short", num_full_table_rows );
outn( " {" );
for ( i = 0; i < num_full_table_rows; ++i )
mk2data( 0 );
dataflush();
outn( " },\n" );
}
num_start_states = lastsc * 2;
for ( i = 1; i <= num_start_states; ++i )
{
numstates = 1;
if ( i % 2 == 1 )
nset[numstates] = scset[(i / 2) + 1];
else
nset[numstates] =
mkbranch( scbol[i / 2], scset[i / 2] );
nset = epsclosure( nset, &numstates, accset, &nacc, &hashval );
if ( snstods( nset, numstates, accset, nacc, hashval, &ds ) )
{
numas += nacc;
totnst += numstates;
++todo_next;
if ( variable_trailing_context_rules && nacc > 0 )
check_trailing_context( nset, numstates,
accset, nacc );
}
}
if ( ! fullspd )
{
if ( ! snstods( nset, 0, accset, 0, 0, &end_of_buffer_state ) )
flexfatal(
("could not create unique end-of-buffer state") );
++numas;
++num_start_states;
++todo_next;
}
while ( todo_head < todo_next )
{
targptr = 0;
totaltrans = 0;
for ( i = 1; i <= numecs; ++i )
state[i] = 0;
ds = ++todo_head;
dset = dss[ds];
dsize = dfasiz[ds];
if ( trace )
fprintf( err, ("state # %d:\n"), ds );
sympartition( dset, dsize, symlist, duplist );
for ( sym = 1; sym <= numecs; ++sym )
{
if ( symlist[sym] )
{
symlist[sym] = 0;
if ( duplist[sym] == 0 )
{
numstates = symfollowset( dset, dsize,
sym, nset );
nset = epsclosure( nset, &numstates,
accset, &nacc, &hashval );
if ( snstods( nset, numstates, accset,
nacc, hashval, &newds ) )
{
totnst = totnst + numstates;
++todo_next;
numas += nacc;
if (
variable_trailing_context_rules &&
nacc > 0 )
check_trailing_context(
nset, numstates,
accset, nacc );
}
state[sym] = newds;
if ( trace )
fprintf( err, "\t%d\t%d\n",
sym, newds );
targfreq[++targptr] = 1;
targstate[targptr] = newds;
++numuniq;
}
else
{
targ = state[duplist[sym]];
state[sym] = targ;
if ( trace )
fprintf( err, "\t%d\t%d\n",
sym, targ );
i = 0;
while ( targstate[++i] != targ )
;
++targfreq[i];
++numdup;
}
++totaltrans;
duplist[sym] = 0;
}
}
if ( caseins && ! useecs )
{
register int j;
for ( i = 'A', j = 'a'; i <= 'Z'; ++i, ++j )
{
if ( state[i] == 0 && state[j] != 0 )
++totaltrans;
else if ( state[i] != 0 && state[j] == 0 )
--totaltrans;
state[i] = state[j];
}
}
numsnpairs += totaltrans;
if ( ds > num_start_states )
check_for_backing_up( ds, state );
if ( nultrans )
{
nultrans[ds] = state[NUL_ec];
state[NUL_ec] = 0;
}
if ( fulltbl )
{
outn( " {" );
if ( ds == end_of_buffer_state )
mk2data( -end_of_buffer_state );
else
mk2data( end_of_buffer_state );
for ( i = 1; i < num_full_table_rows; ++i )
mk2data( state[i] ? state[i] : -ds );
dataflush();
outn( " },\n" );
}
else if ( fullspd )
place_state( state, ds, totaltrans );
else if ( ds == end_of_buffer_state )
stack1( ds, 0, 0, -32766 );
else
{
comfreq = 0;
comstate = 0;
for ( i = 1; i <= targptr; ++i )
if ( targfreq[i] > comfreq )
{
comfreq = targfreq[i];
comstate = targstate[i];
}
bldtbl( state, ds, totaltrans, comstate, comfreq );
}
}
if ( fulltbl )
dataend();
else if ( ! fullspd )
{
cmptmps();
while ( onesp > 0 )
{
mk1tbl( onestate[onesp], onesym[onesp], onenext[onesp],
onedef[onesp] );
--onesp;
}
mkdeftbl();
}
flex_free( (void *) accset );
flex_free( (void *) nset );
}
int snstods( sns, numstates, accset, nacc, hashval, newds_addr )
int sns[], numstates, accset[], nacc, hashval, *newds_addr;
{
int didsort = 0;
register int i, j;
int newds, *oldsns;
for ( i = 1; i <= lastdfa; ++i )
if ( hashval == dhash[i] )
{
if ( numstates == dfasiz[i] )
{
oldsns = dss[i];
if ( ! didsort )
{
bubble( sns, numstates );
didsort = 1;
}
for ( j = 1; j <= numstates; ++j )
if ( sns[j] != oldsns[j] )
break;
if ( j > numstates )
{
++dfaeql;
*newds_addr = i;
return 0;
}
++hshcol;
}
else
++hshsave;
}
if ( ++lastdfa >= current_max_dfas )
increase_max_dfas();
newds = lastdfa;
dss[newds] = (int *) allocate_array( numstates + 1, sizeof( int ) );
if ( ! didsort )
bubble( sns, numstates );
for ( i = 1; i <= numstates; ++i )
dss[newds][i] = sns[i];
dfasiz[newds] = numstates;
dhash[newds] = hashval;
if ( nacc == 0 )
{
if ( reject )
dfaacc[newds].dfaacc_set = (int *) 0;
else
dfaacc[newds].dfaacc_state = 0;
accsiz[newds] = 0;
}
else if ( reject )
{
bubble( accset, nacc );
dfaacc[newds].dfaacc_set = (int *) allocate_array( nacc + 1, sizeof( int ) );
for ( i = 1; i <= nacc; ++i )
{
dfaacc[newds].dfaacc_set[i] = accset[i];
if ( accset[i] <= num_rules )
rule_useful[accset[i]] = 1;
}
accsiz[newds] = nacc;
}
else
{
j = num_rules + 1;
for ( i = 1; i <= nacc; ++i )
if ( accset[i] < j )
j = accset[i];
dfaacc[newds].dfaacc_state = j;
if ( j <= num_rules )
rule_useful[j] = 1;
}
*newds_addr = newds;
return 1;
}
int symfollowset( ds, dsize, transsym, nset )
int ds[], dsize, transsym, nset[];
{
int ns, tsp, sym, i, j, lenccl, ch, numstates, ccllist;
numstates = 0;
for ( i = 1; i <= dsize; ++i )
{
ns = ds[i];
sym = transchar[ns];
tsp = trans1[ns];
if ( sym < 0 )
{
sym = -sym;
ccllist = cclmap[sym];
lenccl = ccllen[sym];
if ( cclng[sym] )
{
for ( j = 0; j < lenccl; ++j )
{
ch = ccltbl[ccllist + j];
if ( ch == 0 )
ch = NUL_ec;
if ( ch > transsym )
break;
else if ( ch == transsym )
goto bottom;
}
nset[++numstates] = tsp;
}
else
for ( j = 0; j < lenccl; ++j )
{
ch = ccltbl[ccllist + j];
if ( ch == 0 )
ch = NUL_ec;
if ( ch > transsym )
break;
else if ( ch == transsym )
{
nset[++numstates] = tsp;
break;
}
}
}
else if ( sym >= 'A' && sym <= 'Z' && caseins )
flexfatal(
("consistency check failed in symfollowset") );
else if ( sym == (256 + 1) )
{
}
else if ( ((ecgroup[sym]) < 0 ? -(ecgroup[sym]) : (ecgroup[sym])) == transsym )
nset[++numstates] = tsp;
bottom: ;
}
return numstates;
}
void sympartition( ds, numstates, symlist, duplist )
int ds[], numstates;
int symlist[], duplist[];
{
int tch, i, j, k, ns, dupfwd[256 + 1], lenccl, cclp, ich;
for ( i = 1; i <= numecs; ++i )
{
duplist[i] = i - 1;
dupfwd[i] = i + 1;
}
duplist[1] = 0;
dupfwd[numecs] = 0;
for ( i = 1; i <= numstates; ++i )
{
ns = ds[i];
tch = transchar[ns];
if ( tch != (256 + 1) )
{
if ( tch < -lastccl || tch >= csize )
{
flexfatal(
("bad transition character detected in sympartition()") );
}
if ( tch >= 0 )
{
int ec = ecgroup[tch];
mkechar( ec, dupfwd, duplist );
symlist[ec] = 1;
}
else
{
tch = -tch;
lenccl = ccllen[tch];
cclp = cclmap[tch];
mkeccl( ccltbl + cclp, lenccl, dupfwd,
duplist, numecs, NUL_ec );
if ( cclng[tch] )
{
j = 0;
for ( k = 0; k < lenccl; ++k )
{
ich = ccltbl[cclp + k];
if ( ich == 0 )
ich = NUL_ec;
for ( ++j; j < ich; ++j )
symlist[j] = 1;
}
for ( ++j; j <= numecs; ++j )
symlist[j] = 1;
}
else
for ( k = 0; k < lenccl; ++k )
{
ich = ccltbl[cclp + k];
if ( ich == 0 )
ich = NUL_ec;
symlist[ich] = 1;
}
}
}
}
}
void ccl2ecl()
{
int i, ich, newlen, cclp, ccls, cclmec;
for ( i = 1; i <= lastccl; ++i )
{
newlen = 0;
cclp = cclmap[i];
for ( ccls = 0; ccls < ccllen[i]; ++ccls )
{
ich = ccltbl[cclp + ccls];
cclmec = ecgroup[ich];
if ( cclmec > 0 )
{
ccltbl[cclp + newlen] = cclmec;
++newlen;
}
}
ccllen[i] = newlen;
}
}
int cre8ecs( fwd, bck, num )
int fwd[], bck[], num;
{
int i, j, numcl;
numcl = 0;
for ( i = 1; i <= num; ++i )
if ( bck[i] == 0 )
{
bck[i] = ++numcl;
for ( j = fwd[i]; j != 0; j = fwd[j] )
bck[j] = -numcl;
}
return numcl;
}
void mkeccl( ccls, lenccl, fwd, bck, llsiz, NUL_mapping )
unsigned char ccls[];
int lenccl, fwd[], bck[], llsiz, NUL_mapping;
{
int cclp, oldec, newec;
int cclm, i, j;
static unsigned char cclflags[256];
cclp = 0;
while ( cclp < lenccl )
{
cclm = ccls[cclp];
if ( NUL_mapping && cclm == 0 )
cclm = NUL_mapping;
oldec = bck[cclm];
newec = cclm;
j = cclp + 1;
for ( i = fwd[cclm]; i != 0 && i <= llsiz; i = fwd[i] )
{
for ( ; j < lenccl; ++j )
{
register int ccl_char;
if ( NUL_mapping && ccls[j] == 0 )
ccl_char = NUL_mapping;
else
ccl_char = ccls[j];
if ( ccl_char > i )
break;
if ( ccl_char == i && ! cclflags[j] )
{
bck[i] = newec;
fwd[newec] = i;
newec = i;
cclflags[j] = 1;
goto next_pt;
}
}
bck[i] = oldec;
if ( oldec != 0 )
fwd[oldec] = i;
oldec = i;
next_pt: ;
}
if ( bck[cclm] != 0 || oldec != bck[cclm] )
{
bck[cclm] = 0;
fwd[oldec] = 0;
}
fwd[newec] = 0;
for ( ++cclp; cclflags[cclp] && cclp < lenccl; ++cclp )
{
cclflags[cclp] = 0;
}
}
}
void mkechar( tch, fwd, bck )
int tch, fwd[], bck[];
{
if ( fwd[tch] != 0 )
bck[fwd[tch]] = bck[tch];
if ( bck[tch] != 0 )
fwd[bck[tch]] = fwd[tch];
fwd[tch] = 0;
bck[tch] = 0;
}
void gen_next_state (int);
void genecs (void);
void indent_put2s (char [], char []);
void indent_puts (char []);
static int indent_level = 0;
static char C_int_decl[] = "static const int %s[%d] =\n { 0,\n";
static char C_short_decl[] = "static const short int %s[%d] =\n { 0,\n";
static char C_long_decl[] = "static const long int %s[%d] =\n { 0,\n";
static char C_state_decl[] =
"static const yy_state_type %s[%d] =\n { 0,\n";
void do_indent()
{
register int i = indent_level * 8;
while ( i >= 8 )
{
outc( '\t' );
i -= 8;
}
while ( i > 0 )
{
outc( ' ' );
--i;
}
}
void gen_backing_up()
{
if ( reject || num_backing_up == 0 )
return;
if ( fullspd )
indent_puts( "if ( yy_current_state[-1].yy_nxt )" );
else
indent_puts( "if ( yy_accept[yy_current_state] )" );
(++indent_level);
indent_puts( "{" );
indent_puts( "yy_last_accepting_state = yy_current_state;" );
indent_puts( "yy_last_accepting_cpos = yy_cp;" );
indent_puts( "}" );
(--indent_level);
}
void gen_bu_action()
{
if ( reject || num_backing_up == 0 )
return;
indent_level = 3;
indent_puts( "case 0: /* must back up */" );
indent_puts( "/* undo the effects of YY_DO_BEFORE_ACTION */" );
indent_puts( "*yy_cp = yy_hold_char;" );
if ( fullspd || fulltbl )
indent_puts( "yy_cp = yy_last_accepting_cpos + 1;" );
else
indent_puts( "yy_cp = yy_last_accepting_cpos;" );
indent_puts( "yy_current_state = yy_last_accepting_state;" );
indent_puts( "goto yy_find_action;" );
outc( '\n' );
indent_level = 0;
}
void genctbl()
{
register int i;
int end_of_buffer_action = num_rules + 1;
out_dec( "static const struct yy_trans_info yy_transition[%d] =\n",
tblend + numecs + 1 );
outn( " {" );
while ( tblend + 2 >= current_max_xpairs )
expand_nxt_chk();
while ( lastdfa + 1 >= current_max_dfas )
increase_max_dfas();
base[lastdfa + 1] = tblend + 2;
nxt[tblend + 1] = end_of_buffer_action;
chk[tblend + 1] = numecs + 1;
chk[tblend + 2] = 1;
nxt[tblend + 2] = 0;
for ( i = 0; i <= lastdfa; ++i )
{
int anum = dfaacc[i].dfaacc_state;
int offset = base[i];
chk[offset] = -1;
chk[offset - 1] = -2;
nxt[offset - 1] = anum;
}
for ( i = 0; i <= tblend; ++i )
{
if ( chk[i] == -1 )
transition_struct_out( 0, base[lastdfa + 1] - i );
else if ( chk[i] == -2 )
transition_struct_out( 0, nxt[i] );
else if ( chk[i] > numecs || chk[i] == 0 )
transition_struct_out( 0, 0 );
else
transition_struct_out( chk[i],
base[nxt[i]] - (i - chk[i]) );
}
transition_struct_out( chk[tblend + 1], nxt[tblend + 1] );
transition_struct_out( chk[tblend + 2], nxt[tblend + 2] );
outn( " };\n" );
out_dec(
"static const struct yy_trans_info *yy_start_state_list[%d] =\n",
lastsc * 2 + 1 );
outn( " {" );
for ( i = 0; i <= lastsc * 2; ++i )
out_dec( " &yy_transition[%d],\n", base[i] );
dataend();
if ( useecs )
genecs();
}
void genecs()
{
register int i, j;
int numrows;
out_str_dec( C_int_decl, "yy_ec", csize );
for ( i = 1; i < csize; ++i )
{
if ( caseins && (i >= 'A') && (i <= 'Z') )
ecgroup[i] = ecgroup[clower( i )];
ecgroup[i] = ((ecgroup[i]) < 0 ? -(ecgroup[i]) : (ecgroup[i]));
mkdata( ecgroup[i] );
}
dataend();
if ( trace )
{
fputs( ("\n\nEquivalence Classes:\n\n"), err );
numrows = csize / 8;
for ( j = 0; j < numrows; ++j )
{
for ( i = j; i < csize; i = i + numrows )
{
fprintf( err, "%4s = %-2d",
readable_form( i ), ecgroup[i] );
_IO_putc (' ', err);
}
_IO_putc ('\n', err);
}
}
}
void gen_find_action()
{
if ( fullspd )
indent_puts( "yy_act = yy_current_state[-1].yy_nxt;" );
else if ( fulltbl )
indent_puts( "yy_act = yy_accept[yy_current_state];" );
else if ( reject )
{
indent_puts( "yy_current_state = *--yy_state_ptr;" );
indent_puts( "yy_lp = yy_accept[yy_current_state];" );
outn(
"find_rule: /* we branch to this label when backing up */" );
indent_puts(
"for ( ; ; ) /* until we find what rule we matched */" );
(++indent_level);
indent_puts( "{" );
indent_puts(
"if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )" );
(++indent_level);
indent_puts( "{" );
indent_puts( "yy_act = yy_acclist[yy_lp];" );
if ( variable_trailing_context_rules )
{
indent_puts( "if ( yy_act & YY_TRAILING_HEAD_MASK ||" );
indent_puts( " yy_looking_for_trail_begin )" );
(++indent_level);
indent_puts( "{" );
indent_puts(
"if ( yy_act == yy_looking_for_trail_begin )" );
(++indent_level);
indent_puts( "{" );
indent_puts( "yy_looking_for_trail_begin = 0;" );
indent_puts( "yy_act &= ~YY_TRAILING_HEAD_MASK;" );
indent_puts( "break;" );
indent_puts( "}" );
(--indent_level);
indent_puts( "}" );
(--indent_level);
indent_puts( "else if ( yy_act & YY_TRAILING_MASK )" );
(++indent_level);
indent_puts( "{" );
indent_puts(
"yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;" );
indent_puts(
"yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;" );
if ( real_reject )
{
indent_puts( "yy_full_match = yy_cp;" );
indent_puts( "yy_full_state = yy_state_ptr;" );
indent_puts( "yy_full_lp = yy_lp;" );
}
indent_puts( "}" );
(--indent_level);
indent_puts( "else" );
(++indent_level);
indent_puts( "{" );
indent_puts( "yy_full_match = yy_cp;" );
indent_puts( "yy_full_state = yy_state_ptr;" );
indent_puts( "yy_full_lp = yy_lp;" );
indent_puts( "break;" );
indent_puts( "}" );
(--indent_level);
indent_puts( "++yy_lp;" );
indent_puts( "goto find_rule;" );
}
else
{
(++indent_level);
indent_puts( "{" );
indent_puts( "yy_full_match = yy_cp;" );
indent_puts( "break;" );
indent_puts( "}" );
(--indent_level);
}
indent_puts( "}" );
(--indent_level);
indent_puts( "--yy_cp;" );
indent_puts( "yy_current_state = *--yy_state_ptr;" );
indent_puts( "yy_lp = yy_accept[yy_current_state];" );
indent_puts( "}" );
(--indent_level);
}
else
{
indent_puts( "yy_act = yy_accept[yy_current_state];" );
if ( interactive && ! reject )
{
indent_puts( "if ( yy_act == 0 )" );
(++indent_level);
indent_puts( "{ /* have to back up */" );
indent_puts( "yy_cp = yy_last_accepting_cpos;" );
indent_puts(
"yy_current_state = yy_last_accepting_state;" );
indent_puts( "yy_act = yy_accept[yy_current_state];" );
indent_puts( "}" );
(--indent_level);
}
}
}
void genftbl()
{
register int i;
int end_of_buffer_action = num_rules + 1;
out_str_dec( long_align ? C_long_decl : C_short_decl,
"yy_accept", lastdfa + 1 );
dfaacc[end_of_buffer_state].dfaacc_state = end_of_buffer_action;
for ( i = 1; i <= lastdfa; ++i )
{
register int anum = dfaacc[i].dfaacc_state;
mkdata( anum );
if ( trace && anum )
fprintf( err, ("state # %d accepts: [%d]\n"),
i, anum );
}
dataend();
if ( useecs )
genecs();
}
void gen_next_compressed_state( char_map )
char *char_map;
{
indent_put2s( "register YY_CHAR yy_c = %s;", char_map );
gen_backing_up();
indent_puts(
"while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )" );
(++indent_level);
indent_puts( "{" );
indent_puts( "yy_current_state = (int) yy_def[yy_current_state];" );
if ( usemecs )
{
do_indent();
out_dec( "if ( yy_current_state >= %d )\n", lastdfa + 2 );
(++indent_level);
indent_puts( "yy_c = yy_meta[(unsigned int) yy_c];" );
(--indent_level);
}
indent_puts( "}" );
(--indent_level);
indent_puts(
"yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];" );
}
void gen_next_match()
{
char *char_map = useecs ?
"yy_ec[YY_SC_TO_UI(*yy_cp)]" :
"YY_SC_TO_UI(*yy_cp)";
char *char_map_2 = useecs ?
"yy_ec[YY_SC_TO_UI(*++yy_cp)]" :
"YY_SC_TO_UI(*++yy_cp)";
if ( fulltbl )
{
indent_put2s(
"while ( (yy_current_state = yy_nxt[yy_current_state][%s]) > 0 )",
char_map );
(++indent_level);
if ( num_backing_up > 0 )
{
indent_puts( "{" );
gen_backing_up();
outc( '\n' );
}
indent_puts( "++yy_cp;" );
if ( num_backing_up > 0 )
indent_puts( "}" );
(--indent_level);
outc( '\n' );
indent_puts( "yy_current_state = -yy_current_state;" );
}
else if ( fullspd )
{
indent_puts( "{" );
indent_puts(
"register const struct yy_trans_info *yy_trans_info;\n" );
indent_puts( "register YY_CHAR yy_c;\n" );
indent_put2s( "for ( yy_c = %s;", char_map );
indent_puts(
" (yy_trans_info = &yy_current_state[(unsigned int) yy_c])->" );
indent_puts( "yy_verify == yy_c;" );
indent_put2s( " yy_c = %s )", char_map_2 );
(++indent_level);
if ( num_backing_up > 0 )
indent_puts( "{" );
indent_puts( "yy_current_state += yy_trans_info->yy_nxt;" );
if ( num_backing_up > 0 )
{
outc( '\n' );
gen_backing_up();
indent_puts( "}" );
}
(--indent_level);
indent_puts( "}" );
}
else
{
indent_puts( "do" );
(++indent_level);
indent_puts( "{" );
gen_next_state( 0 );
indent_puts( "++yy_cp;" );
indent_puts( "}" );
(--indent_level);
do_indent();
if ( interactive )
out_dec( "while ( yy_base[yy_current_state] != %d );\n",
jambase );
else
out_dec( "while ( yy_current_state != %d );\n",
jamstate );
if ( ! reject && ! interactive )
{
indent_puts( "yy_cp = yy_last_accepting_cpos;" );
indent_puts(
"yy_current_state = yy_last_accepting_state;" );
}
}
}
void gen_next_state( worry_about_NULs )
int worry_about_NULs;
{
char char_map[256];
if ( worry_about_NULs && ! nultrans )
{
if ( useecs )
(void) sprintf( char_map,
"(*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : %d)",
NUL_ec );
else
(void) sprintf( char_map,
"(*yy_cp ? YY_SC_TO_UI(*yy_cp) : %d)", NUL_ec );
}
else
strcpy( char_map, useecs ?
"yy_ec[YY_SC_TO_UI(*yy_cp)]" : "YY_SC_TO_UI(*yy_cp)" );
if ( worry_about_NULs && nultrans )
{
if ( ! fulltbl && ! fullspd )
gen_backing_up();
indent_puts( "if ( *yy_cp )" );
(++indent_level);
indent_puts( "{" );
}
if ( fulltbl )
indent_put2s(
"yy_current_state = yy_nxt[yy_current_state][%s];",
char_map );
else if ( fullspd )
indent_put2s(
"yy_current_state += yy_current_state[%s].yy_nxt;",
char_map );
else
gen_next_compressed_state( char_map );
if ( worry_about_NULs && nultrans )
{
indent_puts( "}" );
(--indent_level);
indent_puts( "else" );
(++indent_level);
indent_puts(
"yy_current_state = yy_NUL_trans[yy_current_state];" );
(--indent_level);
}
if ( fullspd || fulltbl )
gen_backing_up();
if ( reject )
indent_puts( "*yy_state_ptr++ = yy_current_state;" );
}
void gen_NUL_trans()
{
int need_backing_up = (num_backing_up > 0 && ! reject);
if ( need_backing_up && ! nultrans )
indent_puts( "register char *yy_cp = yy_c_buf_p;" );
outc( '\n' );
if ( nultrans )
{
indent_puts(
"yy_current_state = yy_NUL_trans[yy_current_state];" );
indent_puts( "yy_is_jam = (yy_current_state == 0);" );
}
else if ( fulltbl )
{
do_indent();
out_dec( "yy_current_state = yy_nxt[yy_current_state][%d];\n",
NUL_ec );
indent_puts( "yy_is_jam = (yy_current_state <= 0);" );
}
else if ( fullspd )
{
do_indent();
out_dec( "register int yy_c = %d;\n", NUL_ec );
indent_puts(
"register const struct yy_trans_info *yy_trans_info;\n" );
indent_puts(
"yy_trans_info = &yy_current_state[(unsigned int) yy_c];" );
indent_puts( "yy_current_state += yy_trans_info->yy_nxt;" );
indent_puts(
"yy_is_jam = (yy_trans_info->yy_verify != yy_c);" );
}
else
{
char NUL_ec_str[20];
(void) sprintf( NUL_ec_str, "%d", NUL_ec );
gen_next_compressed_state( NUL_ec_str );
if ( reject )
indent_puts( "*yy_state_ptr++ = yy_current_state;" );
do_indent();
out_dec( "yy_is_jam = (yy_current_state == %d);\n", jamstate );
}
if ( need_backing_up && (fullspd || fulltbl) )
{
outc( '\n' );
indent_puts( "if ( ! yy_is_jam )" );
(++indent_level);
indent_puts( "{" );
gen_backing_up();
indent_puts( "}" );
(--indent_level);
}
}
void gen_start_state()
{
if ( fullspd )
{
if ( bol_needed )
{
indent_puts(
"yy_current_state = yy_start_state_list[yy_start + YY_AT_BOL()];" );
}
else
indent_puts(
"yy_current_state = yy_start_state_list[yy_start];" );
}
else
{
indent_puts( "yy_current_state = yy_start;" );
if ( bol_needed )
indent_puts( "yy_current_state += YY_AT_BOL();" );
if ( reject )
{
indent_puts( "yy_state_ptr = yy_state_buf;" );
indent_puts( "*yy_state_ptr++ = yy_current_state;" );
}
}
}
void gentabs()
{
int i, j, k, *accset, nacc, *acc_array, total_states;
int end_of_buffer_action = num_rules + 1;
acc_array = (int *) allocate_array( current_max_dfas, sizeof( int ) );
nummt = 0;
++num_backing_up;
if ( reject )
{
int EOB_accepting_list[2];
EOB_accepting_list[0] = 0;
EOB_accepting_list[1] = end_of_buffer_action;
accsiz[end_of_buffer_state] = 1;
dfaacc[end_of_buffer_state].dfaacc_set = EOB_accepting_list;
out_str_dec( long_align ? C_long_decl : C_short_decl,
"yy_acclist", ((numas) > (1) ? (numas) : (1)) + 1 );
j = 1;
for ( i = 1; i <= lastdfa; ++i )
{
acc_array[i] = j;
if ( accsiz[i] != 0 )
{
accset = dfaacc[i].dfaacc_set;
nacc = accsiz[i];
if ( trace )
fprintf( err,
("state # %d accepts: "),
i );
for ( k = 1; k <= nacc; ++k )
{
int accnum = accset[k];
++j;
if ( variable_trailing_context_rules &&
! (accnum & 0x4000) &&
accnum > 0 && accnum <= num_rules &&
rule_type[accnum] == 1 )
{
accnum |= 0x2000;
}
mkdata( accnum );
if ( trace )
{
fprintf( err, "[%d]",
accset[k] );
if ( k < nacc )
fputs( ", ", err );
else
_IO_putc ('\n', err);
}
}
}
}
acc_array[i] = j;
dataend();
}
else
{
dfaacc[end_of_buffer_state].dfaacc_state = end_of_buffer_action;
for ( i = 1; i <= lastdfa; ++i )
acc_array[i] = dfaacc[i].dfaacc_state;
acc_array[i] = 0;
}
k = lastdfa + 2;
if ( reject )
++k;
out_str_dec( long_align ? C_long_decl : C_short_decl, "yy_accept", k );
for ( i = 1; i <= lastdfa; ++i )
{
mkdata( acc_array[i] );
if ( ! reject && trace && acc_array[i] )
fprintf( err, ("state # %d accepts: [%d]\n"),
i, acc_array[i] );
}
mkdata( acc_array[i] );
if ( reject )
mkdata( acc_array[i] );
dataend();
if ( useecs )
genecs();
if ( usemecs )
{
if ( trace )
fputs( ("\n\nMeta-Equivalence Classes:\n"),
err );
out_str_dec( C_int_decl, "yy_meta", numecs + 1 );
for ( i = 1; i <= numecs; ++i )
{
if ( trace )
fprintf( err, "%d = %d\n",
i, ((tecbck[i]) < 0 ? -(tecbck[i]) : (tecbck[i])) );
mkdata( ((tecbck[i]) < 0 ? -(tecbck[i]) : (tecbck[i])) );
}
dataend();
}
total_states = lastdfa + numtemps;
out_str_dec( (tblend >= 32700 || long_align) ?
C_long_decl : C_short_decl,
"yy_base", total_states + 1 );
for ( i = 1; i <= lastdfa; ++i )
{
register int d = def[i];
if ( base[i] == -32766 )
base[i] = jambase;
if ( d == -32766 )
def[i] = jamstate;
else if ( d < 0 )
{
++tmpuses;
def[i] = lastdfa - d + 1;
}
mkdata( base[i] );
}
mkdata( base[i] );
for ( ++i ; i <= total_states; ++i )
{
mkdata( base[i] );
def[i] = jamstate;
}
dataend();
out_str_dec( (total_states >= 32700 || long_align) ?
C_long_decl : C_short_decl,
"yy_def", total_states + 1 );
for ( i = 1; i <= total_states; ++i )
mkdata( def[i] );
dataend();
out_str_dec( (total_states >= 32700 || long_align) ?
C_long_decl : C_short_decl,
"yy_nxt", tblend + 1 );
for ( i = 1; i <= tblend; ++i )
{
if ( chk[i] == 0 || nxt[i] == 0 )
nxt[i] = jamstate;
mkdata( nxt[i] );
}
dataend();
out_str_dec( (total_states >= 32700 || long_align) ?
C_long_decl : C_short_decl,
"yy_chk", tblend + 1 );
for ( i = 1; i <= tblend; ++i )
{
if ( chk[i] == 0 )
++nummt;
mkdata( chk[i] );
}
dataend();
}
void indent_put2s( fmt, arg )
char fmt[], arg[];
{
do_indent();
out_str( fmt, arg );
outn( "" );
}
void indent_puts( str )
char str[];
{
do_indent();
outn( str );
}
void make_tables()
{
register int i;
int did_eof_rule = 0;
skelout();
indent_level = 1;
if ( yymore_used )
{
indent_puts( "yytext_ptr -= yy_more_len; \\" );
indent_puts( "yyleng = (int) (yy_cp - yytext_ptr); \\" );
}
else
indent_puts( "yyleng = (int) (yy_cp - yy_bp); \\" );
skelout();
if ( yytext_is_array )
{
indent_puts( "if ( yyleng >= YYLMAX ) \\" );
(++indent_level);
indent_puts(
"YY_FATAL_ERROR( \"token too large, exceeds YYLMAX\" ); \\" );
(--indent_level);
indent_puts(
"yy_flex_strncpy( yytext, yytext_ptr, yyleng + 1 ); \\" );
}
indent_level = 0;
skelout();
out_dec( "#define YY_NUM_RULES %d\n", num_rules );
out_dec( "#define YY_END_OF_BUFFER %d\n", num_rules + 1 );
if ( fullspd )
{
int total_table_size = tblend + numecs + 1;
char *trans_offset_type =
(total_table_size >= 32700 || long_align) ?
"long" : "short";
indent_level = 0;
indent_puts( "struct yy_trans_info" );
(++indent_level);
indent_puts( "{" );
if ( long_align )
indent_puts( "long yy_verify;" );
else
indent_puts( "short yy_verify;" );
indent_put2s( "%s yy_nxt;", trans_offset_type );
indent_puts( "};" );
(--indent_level);
}
if ( fullspd )
genctbl();
else if ( fulltbl )
genftbl();
else
gentabs();
if ( num_backing_up > 0 && ! reject )
{
if ( ! C_plus_plus )
{
indent_puts(
"static yy_state_type yy_last_accepting_state;" );
indent_puts(
"static char *yy_last_accepting_cpos;\n" );
}
}
if ( nultrans )
{
out_str_dec( C_state_decl, "yy_NUL_trans", lastdfa + 1 );
for ( i = 1; i <= lastdfa; ++i )
{
if ( fullspd )
out_dec( " &yy_transition[%d],\n", base[i] );
else
mkdata( nultrans[i] );
}
dataend();
}
if ( ddebug )
{
if ( ! C_plus_plus )
{
indent_puts( "extern int yy_flex_debug;" );
indent_puts( "int yy_flex_debug = 1;\n" );
}
out_str_dec( long_align ? C_long_decl : C_short_decl,
"yy_rule_linenum", num_rules );
for ( i = 1; i < num_rules; ++i )
mkdata( rule_linenum[i] );
dataend();
}
if ( reject )
{
if ( ! C_plus_plus )
{
outn(
"static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;" );
outn( "static char *yy_full_match;" );
outn( "static int yy_lp;" );
}
if ( variable_trailing_context_rules )
{
if ( ! C_plus_plus )
{
outn(
"static int yy_looking_for_trail_begin = 0;" );
outn( "static int yy_full_lp;" );
outn( "static int *yy_full_state;" );
}
out_hex( "#define YY_TRAILING_MASK 0x%x\n",
(unsigned int) 0x2000 );
out_hex( "#define YY_TRAILING_HEAD_MASK 0x%x\n",
(unsigned int) 0x4000 );
}
outn( "#define REJECT \\" );
outn( "{ \\" );
outn(
"*yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \\" );
outn(
"yy_cp = yy_full_match; /* restore poss. backed-over text */ \\" );
if ( variable_trailing_context_rules )
{
outn(
"yy_lp = yy_full_lp; /* restore orig. accepting pos. */ \\" );
outn(
"yy_state_ptr = yy_full_state; /* restore orig. state */ \\" );
outn(
"yy_current_state = *yy_state_ptr; /* restore curr. state */ \\" );
}
outn( "++yy_lp; \\" );
outn( "goto find_rule; \\" );
outn( "}" );
}
else
{
outn(
"/* The intent behind this definition is that it'll catch" );
outn( " * any uses of REJECT which flex missed." );
outn( " */" );
outn( "#define REJECT reject_used_but_not_detected" );
}
if ( yymore_used )
{
if ( ! C_plus_plus )
{
indent_puts( "static int yy_more_flag = 0;" );
indent_puts( "static int yy_more_len = 0;" );
}
indent_puts( "#define yymore() (yy_more_flag = 1)" );
indent_puts( "#define YY_MORE_ADJ yy_more_len" );
}
else
{
indent_puts( "#define yymore() yymore_used_but_not_detected" );
indent_puts( "#define YY_MORE_ADJ 0" );
}
if ( ! C_plus_plus )
{
if ( yytext_is_array )
{
outn( "#ifndef YYLMAX" );
outn( "#define YYLMAX 8192" );
outn( "#endif\n" );
outn( "char yytext[YYLMAX];" );
outn( "char *yytext_ptr;" );
}
else
outn( "char *yytext;" );
}
out( &action_array[defs1_offset] );
line_directive_out( stdout, 0 );
skelout();
if ( ! C_plus_plus )
{
if ( use_read )
{
outn(
"\tif ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) \\" );
outn(
"\t\tYY_FATAL_ERROR( \"input in flex scanner failed\" );" );
}
else
{
outn(
"\tif ( yy_current_buffer->yy_is_interactive ) \\" );
outn( "\t\t{ \\" );
outn( "\t\tint c = '*', n; \\" );
outn( "\t\tfor ( n = 0; n < max_size && \\" );
outn( "\t\t\t (c = getc( yyin )) != EOF && c != '\\n'; ++n ) \\" );
outn( "\t\t\tbuf[n] = (char) c; \\" );
outn( "\t\tif ( c == '\\n' ) \\" );
outn( "\t\t\tbuf[n++] = (char) c; \\" );
outn( "\t\tif ( c == EOF && ferror( yyin ) ) \\" );
outn(
"\t\t\tYY_FATAL_ERROR( \"input in flex scanner failed\" ); \\" );
outn( "\t\tresult = n; \\" );
outn( "\t\t} \\" );
outn(
"\telse if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \\" );
outn( "\t\t && ferror( yyin ) ) \\" );
outn(
"\t\tYY_FATAL_ERROR( \"input in flex scanner failed\" );" );
}
}
skelout();
indent_puts( "#define YY_RULE_SETUP \\" );
(++indent_level);
if ( bol_needed )
{
indent_puts( "if ( yyleng > 0 ) \\" );
(++indent_level);
indent_puts( "yy_current_buffer->yy_at_bol = \\" );
indent_puts( "\t\t(yytext[yyleng - 1] == '\\n'); \\" );
(--indent_level);
}
indent_puts( "YY_USER_ACTION" );
(--indent_level);
skelout();
out( &action_array[prolog_offset] );
line_directive_out( stdout, 0 );
skelout();
indent_level = 2;
if ( yymore_used )
{
indent_puts( "yy_more_len = 0;" );
indent_puts( "if ( yy_more_flag )" );
(++indent_level);
indent_puts( "{" );
indent_puts( "yy_more_len = yyleng;" );
indent_puts( "yy_more_flag = 0;" );
indent_puts( "}" );
(--indent_level);
}
skelout();
gen_start_state();
outn( "yy_match:" );
gen_next_match();
skelout();
indent_level = 2;
gen_find_action();
skelout();
if ( do_yylineno )
{
indent_puts( "if ( yy_act != YY_END_OF_BUFFER )" );
(++indent_level);
indent_puts( "{" );
indent_puts( "int yyl;" );
indent_puts( "for ( yyl = 0; yyl < yyleng; ++yyl )" );
(++indent_level);
indent_puts( "if ( yytext[yyl] == '\\n' )" );
(++indent_level);
indent_puts( "++yylineno;" );
(--indent_level);
(--indent_level);
indent_puts( "}" );
(--indent_level);
}
skelout();
if ( ddebug )
{
indent_puts( "if ( yy_flex_debug )" );
(++indent_level);
indent_puts( "{" );
indent_puts( "if ( yy_act == 0 )" );
(++indent_level);
indent_puts( C_plus_plus ?
"cerr << \"--scanner backing up\\n\";" :
"fprintf( err, \"--scanner backing up\\n\" );" );
(--indent_level);
do_indent();
out_dec( "else if ( yy_act < %d )\n", num_rules );
(++indent_level);
if ( C_plus_plus )
{
indent_puts(
"cerr << \"--accepting rule at line \" << yy_rule_linenum[yy_act] <<" );
indent_puts(
" \"(\\\"\" << yytext << \"\\\")\\n\";" );
}
else
{
indent_puts(
"fprintf( err, \"--accepting rule at line %d (\\\"%s\\\")\\n\"," );
indent_puts(
" yy_rule_linenum[yy_act], yytext );" );
}
(--indent_level);
do_indent();
out_dec( "else if ( yy_act == %d )\n", num_rules );
(++indent_level);
if ( C_plus_plus )
{
indent_puts(
"cerr << \"--accepting default rule (\\\"\" << yytext << \"\\\")\\n\";" );
}
else
{
indent_puts(
"fprintf( err, \"--accepting default rule (\\\"%s\\\")\\n\"," );
indent_puts( " yytext );" );
}
(--indent_level);
do_indent();
out_dec( "else if ( yy_act == %d )\n", num_rules + 1 );
(++indent_level);
indent_puts( C_plus_plus ?
"cerr << \"--(end of buffer or a NUL)\\n\";" :
"fprintf( err, \"--(end of buffer or a NUL)\\n\" );" );
(--indent_level);
do_indent();
outn( "else" );
(++indent_level);
if ( C_plus_plus )
{
indent_puts(
"cerr << \"--EOF (start condition \" << YY_START << \")\\n\";" );
}
else
{
indent_puts(
"fprintf( err, \"--EOF (start condition %d)\\n\", YY_START );" );
}
(--indent_level);
indent_puts( "}" );
(--indent_level);
}
skelout();
(++indent_level);
gen_bu_action();
out( &action_array[action_offset] );
line_directive_out( stdout, 0 );
for ( i = 1; i <= lastsc; ++i )
if ( ! sceof[i] )
{
do_indent();
out_str( "case YY_STATE_EOF(%s):\n", scname[i] );
did_eof_rule = 1;
}
if ( did_eof_rule )
{
(++indent_level);
indent_puts( "yyterminate();" );
(--indent_level);
}
skelout();
indent_level = 4;
if ( fullspd || fulltbl )
indent_puts( "yy_cp = yy_c_buf_p;" );
else
{
if ( ! reject && ! interactive )
{
indent_puts( "yy_cp = yy_last_accepting_cpos;" );
indent_puts(
"yy_current_state = yy_last_accepting_state;" );
}
else
indent_puts( "yy_cp = yy_c_buf_p;" );
}
indent_level = 1;
skelout();
gen_start_state();
indent_level = 2;
skelout();
gen_next_state( 1 );
indent_level = 1;
skelout();
gen_NUL_trans();
skelout();
if ( do_yylineno )
{
indent_puts( "if ( c == '\\n' )" );
(++indent_level);
indent_puts( "--yylineno;" );
(--indent_level);
}
skelout();
if ( bol_needed )
{
indent_puts( "yy_current_buffer->yy_at_bol = (c == '\\n');" );
if ( do_yylineno )
{
indent_puts( "if ( yy_current_buffer->yy_at_bol )" );
(++indent_level);
indent_puts( "++yylineno;" );
(--indent_level);
}
}
else if ( do_yylineno )
{
indent_puts( "if ( c == '\\n' )" );
(++indent_level);
indent_puts( "++yylineno;" );
(--indent_level);
}
skelout();
line_directive_out( stdout, 1 );
if ( sectnum == 3 )
(void) flexscan();
}
void dataflush (void);
int otoi (unsigned char []);
void action_define( defname, value )
char *defname;
int value;
{
char buf[2048];
if ( strlen( defname ) > 2048 / 2 )
{
format_pinpoint_message( ("name \"%s\" ridiculously long"),
defname );
return;
}
sprintf( buf, "#define %s %d\n", defname, value );
add_action( buf );
}
void add_action( new_text )
char *new_text;
{
int len = strlen( new_text );
while ( len + action_index >= action_size - 10 )
{
int new_size = action_size * 2;
if ( new_size <= 0 )
action_size += action_size / 8;
else
action_size = new_size;
action_array =
(char *) reallocate_array( (void *) action_array, action_size, sizeof( char ) );
}
strcpy( &action_array[action_index], new_text );
action_index += len;
}
void *allocate_array( size, element_size )
int size;
size_t element_size;
{
register void *mem;
size_t num_bytes = element_size * size;
mem = flex_alloc( num_bytes );
if ( ! mem )
flexfatal(
("memory allocation failed in allocate_array()") );
return mem;
}
int all_lower( str )
register char *str;
{
while ( *str )
{
if ( ! ((((unsigned char) *str) & ~0x7f) == 0) || ! ((*__ctype_b_loc ())[(int) ((*str))] & (unsigned short int) _ISlower) )
return 0;
++str;
}
return 1;
}
int all_upper( str )
register char *str;
{
while ( *str )
{
if ( ! ((((unsigned char) *str) & ~0x7f) == 0) || ! ((*__ctype_b_loc ())[(int) ((*str))] & (unsigned short int) _ISupper) )
return 0;
++str;
}
return 1;
}
void bubble( v, n )
int v[], n;
{
register int i, j, k;
for ( i = n; i > 1; --i )
for ( j = 1; j < i; ++j )
if ( v[j] > v[j + 1] )
{
k = v[j];
v[j] = v[j + 1];
v[j + 1] = k;
}
}
void check_char( c )
int c;
{
if ( c >= 256 )
lerrsf( ("bad character '%s' detected in check_char()"),
readable_form( c ) );
if ( c >= csize )
lerrsf(
("scanner requires -8 flag to use the character %s"),
readable_form( c ) );
}
unsigned char clower( c )
register int c;
{
return (unsigned char) (((((c) & ~0x7f) == 0) && ((*__ctype_b_loc ())[(int) ((c))] & (unsigned short int) _ISupper)) ? tolower( c ) : c);
}
char *copy_string( str )
register const char *str;
{
register const char *c1;
register char *c2;
char *copy;
unsigned int size;
for ( c1 = str; *c1; ++c1 )
;
size = (c1 - str + 1) * sizeof( char );
copy = (char *) flex_alloc( size );
if ( copy == ((void *)0) )
flexfatal( ("dynamic memory failure in copy_string()") );
for ( c2 = copy; (*c2++ = *str++) != 0; )
;
return copy;
}
unsigned char *copy_unsigned_string( str )
register unsigned char *str;
{
register unsigned char *c;
unsigned char *copy;
for ( c = str; *c; ++c )
;
copy = (unsigned char *) allocate_array( c - str + 1, sizeof( unsigned char ) );
for ( c = copy; (*c++ = *str++) != 0; )
;
return copy;
}
void cshell( v, n, special_case_0 )
unsigned char v[];
int n, special_case_0;
{
int gap, i, j, jg;
unsigned char k;
for ( gap = n / 2; gap > 0; gap = gap / 2 )
for ( i = gap; i < n; ++i )
for ( j = i - gap; j >= 0; j = j - gap )
{
jg = j + gap;
if ( special_case_0 )
{
if ( v[jg] == 0 )
break;
else if ( v[j] != 0 && v[j] <= v[jg] )
break;
}
else if ( v[j] <= v[jg] )
break;
k = v[j];
v[j] = v[jg];
v[jg] = k;
}
}
void dataend()
{
if ( datapos > 0 )
dataflush();
outn( " } ;\n" );
dataline = 0;
datapos = 0;
}
void dataflush()
{
outc( '\n' );
if ( ++dataline >= 10 )
{
outc( '\n' );
dataline = 0;
}
datapos = 0;
}
void flexerror( msg )
const char msg[];
{
fprintf( err, "%s: %s\n", program_name, msg );
flexend( 1 );
}
void flexfatal( msg )
const char msg[];
{
fprintf( err, ("%s: fatal internal error, %s\n"),
program_name, msg );
exit( 1 );
}
int htoi( str )
unsigned char str[];
{
unsigned int result;
(void) sscanf( (char *) str, "%x", &result );
return result;
}
void lerrif( msg, arg )
const char msg[];
int arg;
{
char errmsg[2048];
(void) sprintf( errmsg, msg, arg );
flexerror( errmsg );
}
void lerrsf( msg, arg )
const char msg[], arg[];
{
char errmsg[2048];
(void) sprintf( errmsg, msg, arg );
flexerror( errmsg );
}
void line_directive_out( output_file, do_infile )
FILE *output_file;
int do_infile;
{
char directive[2048], filename[2048];
char *s1, *s2, *s3;
static char line_fmt[] = "#line %d \"%s\"\n";
if ( ! gen_line_dirs )
return;
if ( (do_infile && ! infilename) || (! do_infile && ! outfilename) )
return;
s1 = do_infile ? infilename : outfilename;
s2 = filename;
s3 = &filename[sizeof( filename ) - 2];
while ( s2 < s3 && *s1 )
{
if ( *s1 == '\\' )
*s2++ = '\\';
*s2++ = *s1++;
}
*s2 = '\0';
if ( do_infile )
sprintf( directive, line_fmt, linenum, filename );
else
{
if ( output_file == stdout )
++out_linenum;
sprintf( directive, line_fmt, out_linenum, filename );
}
if ( output_file )
{
fputs( directive, output_file );
}
else
add_action( directive );
}
void mark_defs1()
{
defs1_offset = 0;
action_array[action_index++] = '\0';
action_offset = prolog_offset = action_index;
action_array[action_index] = '\0';
}
void mark_prolog()
{
action_array[action_index++] = '\0';
action_offset = action_index;
action_array[action_index] = '\0';
}
void mk2data( value )
int value;
{
if ( datapos >= 10 )
{
outc( ',' );
dataflush();
}
if ( datapos == 0 )
out( " " );
else
outc( ',' );
++datapos;
out_dec( "%5d", value );
}
void mkdata( value )
int value;
{
if ( datapos >= 10 )
{
outc( ',' );
dataflush();
}
if ( datapos == 0 )
out( " " );
else
outc( ',' );
++datapos;
out_dec( "%5d", value );
}
int myctoi( array )
char array[];
{
int val = 0;
(void) sscanf( array, "%d", &val );
return val;
}
unsigned char myesc( array )
unsigned char array[];
{
unsigned char c, esc_char;
switch ( array[1] )
{
case 'b': return '\b';
case 'f': return '\f';
case 'n': return '\n';
case 'r': return '\r';
case 't': return '\t';
case 'a': return '\a';
case 'v': return '\v';
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
{
int sptr = 1;
while ( (((array[sptr]) & ~0x7f) == 0) &&
((*__ctype_b_loc ())[(int) ((array[sptr]))] & (unsigned short int) _ISdigit) )
++sptr;
c = array[sptr];
array[sptr] = '\0';
esc_char = otoi( array + 1 );
array[sptr] = c;
return esc_char;
}
case 'x':
{
int sptr = 2;
while ( (((array[sptr]) & ~0x7f) == 0) &&
((*__ctype_b_loc ())[(int) (((char) array[sptr]))] & (unsigned short int) _ISxdigit) )
++sptr;
c = array[sptr];
array[sptr] = '\0';
esc_char = htoi( array + 2 );
array[sptr] = c;
return esc_char;
}
default:
return array[1];
}
}
int otoi( str )
unsigned char str[];
{
unsigned int result;
(void) sscanf( (char *) str, "%o", &result );
return result;
}
void out( str )
const char str[];
{
fputs( str, stdout );
out_line_count( str );
}
void out_dec( fmt, n )
const char fmt[];
int n;
{
printf( fmt, n );
out_line_count( fmt );
}
void out_dec2( fmt, n1, n2 )
const char fmt[];
int n1, n2;
{
printf( fmt, n1, n2 );
out_line_count( fmt );
}
void out_hex( fmt, x )
const char fmt[];
unsigned int x;
{
printf( fmt, x );
out_line_count( fmt );
}
void out_line_count( str )
const char str[];
{
register int i;
for ( i = 0; str[i]; ++i )
if ( str[i] == '\n' )
++out_linenum;
}
void out_str( fmt, str )
const char fmt[], str[];
{
printf( fmt, str );
out_line_count( fmt );
out_line_count( str );
}
void out_str3( fmt, s1, s2, s3 )
const char fmt[], s1[], s2[], s3[];
{
printf( fmt, s1, s2, s3 );
out_line_count( fmt );
out_line_count( s1 );
out_line_count( s2 );
out_line_count( s3 );
}
void out_str_dec( fmt, str, n )
const char fmt[], str[];
int n;
{
printf( fmt, str, n );
out_line_count( fmt );
out_line_count( str );
}
void outc( c )
int c;
{
_IO_putc (c, stdout);
if ( c == '\n' )
++out_linenum;
}
void outn( str )
const char str[];
{
puts( str );
out_line_count( str );
++out_linenum;
}
char *readable_form( c )
register int c;
{
static char rform[10];
if ( (c >= 0 && c < 32) || c >= 127 )
{
switch ( c )
{
case '\b': return "\\b";
case '\f': return "\\f";
case '\n': return "\\n";
case '\r': return "\\r";
case '\t': return "\\t";
case '\a': return "\\a";
case '\v': return "\\v";
default:
(void) sprintf( rform, "\\%.3o",
(unsigned int) c );
return rform;
}
}
else if ( c == ' ' )
return "' '";
else
{
rform[0] = c;
rform[1] = '\0';
return rform;
}
}
void *reallocate_array( array, size, element_size )
void *array;
int size;
size_t element_size;
{
register void *new_array;
size_t num_bytes = element_size * size;
new_array = flex_realloc( array, num_bytes );
if ( ! new_array )
flexfatal( ("attempt to increase array size failed") );
return new_array;
}
void skelout()
{
char buf_storage[2048];
char *buf = buf_storage;
int do_copy = 1;
while ( skelfile ?
(fgets( buf, 2048, skelfile ) != ((void *)0)) :
((buf = (char *) skel[skel_ind++]) != 0) )
{
if ( buf[0] == '%' )
{
switch ( buf[1] )
{
case '%':
return;
case '+':
do_copy = C_plus_plus;
break;
case '-':
do_copy = ! C_plus_plus;
break;
case '*':
do_copy = 1;
break;
default:
flexfatal(
("bad line in skeleton file") );
}
}
else if ( do_copy )
{
if ( skelfile )
out( buf );
else
outn( buf );
}
}
}
void transition_struct_out( element_v, element_n )
int element_v, element_n;
{
out_dec2( " {%4d,%4d },", element_v, element_n );
datapos += 14;
if ( datapos >= 79 - 14 )
{
outc( '\n' );
if ( ++dataline % 10 == 0 )
outc( '\n' );
datapos = 0;
}
}
void *yy_flex_xmalloc( size )
int size;
{
void *result = flex_alloc( (size_t) size );
if ( ! result )
flexfatal(
("memory allocation failed in yy_flex_xmalloc()") );
return result;
}
void zero_out( region_ptr, size_in_bytes )
char *region_ptr;
size_t size_in_bytes;
{
register char *rp, *rp_end;
rp = region_ptr;
rp_end = region_ptr + size_in_bytes;
while ( rp < rp_end )
*rp++ = 0;
}
int dupmachine (int);
void mkxtion (int, int);
void add_accept( mach, accepting_number )
int mach, accepting_number;
{
if ( transchar[finalst[mach]] == (256 + 1) )
accptnum[finalst[mach]] = accepting_number;
else
{
int astate = mkstate( (256 + 1) );
accptnum[astate] = accepting_number;
(void) link_machines( mach, astate );
}
}
int copysingl( singl, num )
int singl, num;
{
int copy, i;
copy = mkstate( (256 + 1) );
for ( i = 1; i <= num; ++i )
copy = link_machines( copy, dupmachine( singl ) );
return copy;
}
void dumpnfa( state1 )
int state1;
{
int sym, tsp1, tsp2, anum, ns;
fprintf( err,
("\n\n********** beginning dump of nfa with start state %d\n"),
state1 );
for ( ns = 1; ns <= lastnfa; ++ns )
{
fprintf( err, ("state # %4d\t"), ns );
sym = transchar[ns];
tsp1 = trans1[ns];
tsp2 = trans2[ns];
anum = accptnum[ns];
fprintf( err, "%3d: %4d, %4d", sym, tsp1, tsp2 );
if ( anum != 0 )
fprintf( err, " [%d]", anum );
fprintf( err, "\n" );
}
fprintf( err, ("********** end of dump\n") );
}
int dupmachine( mach )
int mach;
{
int i, init, state_offset;
int state = 0;
int last = lastst[mach];
for ( i = firstst[mach]; i <= last; ++i )
{
state = mkstate( transchar[i] );
if ( trans1[i] != 0 )
{
mkxtion( finalst[state], trans1[i] + state - i );
if ( transchar[i] == (256 + 1) &&
trans2[i] != 0 )
mkxtion( finalst[state],
trans2[i] + state - i );
}
accptnum[state] = accptnum[i];
}
if ( state == 0 )
flexfatal( ("empty machine in dupmachine()") );
state_offset = state - i + 1;
init = mach + state_offset;
firstst[init] = firstst[mach] + state_offset;
finalst[init] = finalst[mach] + state_offset;
lastst[init] = lastst[mach] + state_offset;
return init;
}
void finish_rule( mach, variable_trail_rule, headcnt, trailcnt )
int mach, variable_trail_rule, headcnt, trailcnt;
{
char action_text[2048];
add_accept( mach, num_rules );
rule_linenum[num_rules] = linenum;
if ( continued_action )
--rule_linenum[num_rules];
sprintf( action_text, "case %d:\n", num_rules );
add_action( action_text );
if ( variable_trail_rule )
{
rule_type[num_rules] = 1;
if ( performance_report > 0 )
fprintf( err,
("Variable trailing context rule at line %d\n"),
rule_linenum[num_rules] );
variable_trailing_context_rules = 1;
}
else
{
rule_type[num_rules] = 0;
if ( headcnt > 0 || trailcnt > 0 )
{
char *scanner_cp = "yy_c_buf_p = yy_cp";
char *scanner_bp = "yy_bp";
add_action(
"*yy_cp = yy_hold_char; /* undo effects of setting up yytext */\n" );
if ( headcnt > 0 )
{
sprintf( action_text, "%s = %s + %d;\n",
scanner_cp, scanner_bp, headcnt );
add_action( action_text );
}
else
{
sprintf( action_text, "%s -= %d;\n",
scanner_cp, trailcnt );
add_action( action_text );
}
add_action(
"YY_DO_BEFORE_ACTION; /* set up yytext again */\n" );
}
}
if ( ! continued_action )
add_action( "YY_RULE_SETUP\n" );
line_directive_out( (FILE *) 0, 1 );
}
int link_machines( first, last )
int first, last;
{
if ( first == 0 )
return last;
else if ( last == 0 )
return first;
else
{
mkxtion( finalst[first], last );
finalst[first] = finalst[last];
lastst[first] = ((lastst[first]) > (lastst[last]) ? (lastst[first]) : (lastst[last]));
firstst[first] = ((firstst[first]) < (firstst[last]) ? (firstst[first]) : (firstst[last]));
return first;
}
}
void mark_beginning_as_normal( mach )
register int mach;
{
switch ( state_type[mach] )
{
case 0x1:
return;
case 0x2:
state_type[mach] = 0x1;
if ( transchar[mach] == (256 + 1) )
{
if ( trans1[mach] != 0 )
mark_beginning_as_normal(
trans1[mach] );
if ( trans2[mach] != 0 )
mark_beginning_as_normal(
trans2[mach] );
}
break;
default:
flexerror(
("bad state type in mark_beginning_as_normal()") );
break;
}
}
int mkbranch( first, second )
int first, second;
{
int eps;
if ( first == 0 )
return second;
else if ( second == 0 )
return first;
eps = mkstate( (256 + 1) );
mkxtion( eps, first );
mkxtion( eps, second );
return eps;
}
int mkclos( state )
int state;
{
return mkopt( mkposcl( state ) );
}
int mkopt( mach )
int mach;
{
int eps;
if ( ! (transchar[finalst[mach]] == (256 + 1) && trans1[finalst[mach]] == 0) )
{
eps = mkstate( (256 + 1) );
mach = link_machines( mach, eps );
}
eps = mkstate( (256 + 1) );
mach = link_machines( eps, mach );
mkxtion( mach, finalst[mach] );
return mach;
}
int mkor( first, second )
int first, second;
{
int eps, orend;
if ( first == 0 )
return second;
else if ( second == 0 )
return first;
else
{
eps = mkstate( (256 + 1) );
first = link_machines( eps, first );
mkxtion( first, second );
if ( (transchar[finalst[first]] == (256 + 1) && trans1[finalst[first]] == 0) &&
accptnum[finalst[first]] == 0 )
{
orend = finalst[first];
mkxtion( finalst[second], orend );
}
else if ( (transchar[finalst[second]] == (256 + 1) && trans1[finalst[second]] == 0) &&
accptnum[finalst[second]] == 0 )
{
orend = finalst[second];
mkxtion( finalst[first], orend );
}
else
{
eps = mkstate( (256 + 1) );
first = link_machines( first, eps );
orend = finalst[first];
mkxtion( finalst[second], orend );
}
}
finalst[first] = orend;
return first;
}
int mkposcl( state )
int state;
{
int eps;
if ( (transchar[finalst[state]] == (256 + 1) && trans1[finalst[state]] == 0) )
{
mkxtion( finalst[state], state );
return state;
}
else
{
eps = mkstate( (256 + 1) );
mkxtion( eps, state );
return link_machines( state, eps );
}
}
int mkrep( mach, lb, ub )
int mach, lb, ub;
{
int base_mach, tail, copy, i;
base_mach = copysingl( mach, lb - 1 );
if ( ub == -1 )
{
copy = dupmachine( mach );
mach = link_machines( mach,
link_machines( base_mach, mkclos( copy ) ) );
}
else
{
tail = mkstate( (256 + 1) );
for ( i = lb; i < ub; ++i )
{
copy = dupmachine( mach );
tail = mkopt( link_machines( copy, tail ) );
}
mach = link_machines( mach, link_machines( base_mach, tail ) );
}
return mach;
}
int mkstate( sym )
int sym;
{
if ( ++lastnfa >= current_mns )
{
if ( (current_mns += 1000) >= 31999 )
lerrif(
("input rules are too complicated (>= %d NFA states)"),
current_mns );
++num_reallocs;
firstst = (int *) reallocate_array( (void *) firstst, current_mns, sizeof( int ) );
lastst = (int *) reallocate_array( (void *) lastst, current_mns, sizeof( int ) );
finalst = (int *) reallocate_array( (void *) finalst, current_mns, sizeof( int ) );
transchar = (int *) reallocate_array( (void *) transchar, current_mns, sizeof( int ) );
trans1 = (int *) reallocate_array( (void *) trans1, current_mns, sizeof( int ) );
trans2 = (int *) reallocate_array( (void *) trans2, current_mns, sizeof( int ) );
accptnum = (int *) reallocate_array( (void *) accptnum, current_mns, sizeof( int ) );
assoc_rule =
(int *) reallocate_array( (void *) assoc_rule, current_mns, sizeof( int ) );
state_type =
(int *) reallocate_array( (void *) state_type, current_mns, sizeof( int ) );
}
firstst[lastnfa] = lastnfa;
finalst[lastnfa] = lastnfa;
lastst[lastnfa] = lastnfa;
transchar[lastnfa] = sym;
trans1[lastnfa] = 0;
trans2[lastnfa] = 0;
accptnum[lastnfa] = 0;
assoc_rule[lastnfa] = num_rules;
state_type[lastnfa] = current_state_type;
if ( sym < 0 )
{
}
else if ( sym == (256 + 1) )
++numeps;
else
{
check_char( sym );
if ( useecs )
mkechar( sym ? sym : csize, nextecm, ecgroup );
}
return lastnfa;
}
void mkxtion( statefrom, stateto )
int statefrom, stateto;
{
if ( trans1[statefrom] == 0 )
trans1[statefrom] = stateto;
else if ( (transchar[statefrom] != (256 + 1)) ||
(trans2[statefrom] != 0) )
flexfatal( ("found too many transitions in mkxtion()") );
else
{
++eps2;
trans2[statefrom] = stateto;
}
}
void new_rule()
{
if ( ++num_rules >= current_max_rules )
{
++num_reallocs;
current_max_rules += 100;
rule_type = (int *) reallocate_array( (void *) rule_type, current_max_rules, sizeof( int ) );
rule_linenum = (int *) reallocate_array( (void *) rule_linenum, current_max_rules, sizeof( int ) );
rule_useful = (int *) reallocate_array( (void *) rule_useful, current_max_rules, sizeof( int ) );
}
if ( num_rules > (0x2000 - 1) )
lerrif( ("too many rules (> %d)!"), (0x2000 - 1) );
rule_linenum[num_rules] = linenum;
rule_useful[num_rules] = 0;
}
const char *skel[] = {
"/* A lexical scanner generated by flex */",
"",
"/* Scanner skeleton version:",
" * $Header: /a1/cvsadm/cvsroot/expsir/csubjects/flex/versions.alt/versions.seeded/v2/flex.c,v 1.1.1.2 2003/09/02 20:21:59 expsir Exp $",
" */",
"",
"#define FLEX_SCANNER",
"#define YY_FLEX_MAJOR_VERSION 2",
"#define YY_FLEX_MINOR_VERSION 5",
"",
"%-",
"#include <stdio.h>",
"%*",
"",
"",
"/* cfront 1.2 defines \"c_plusplus\" instead of \"__cplusplus\" */",
"#ifdef c_plusplus",
"#ifndef __cplusplus",
"#define __cplusplus",
"#endif",
"#endif",
"",
"",
"#ifdef __cplusplus",
"",
"#include <stdlib.h>",
"%+",
"class istream;",
"%*",
"#include <unistd.h>",
"",
"/* Use prototypes in function declarations. */",
"#define YY_USE_PROTOS",
"",
"/* The \"const\" storage-class-modifier is valid. */",
"#define YY_USE_CONST",
"",
"#else /* ! __cplusplus */",
"",
"#if __STDC__",
"",
"#define YY_USE_PROTOS",
"#define YY_USE_CONST",
"",
"#endif /* __STDC__ */",
"#endif /* ! __cplusplus */",
"",
"#ifdef __TURBOC__",
" #pragma warn -rch",
" #pragma warn -use",
"#include <io.h>",
"#include <stdlib.h>",
"#define YY_USE_CONST",
"#define YY_USE_PROTOS",
"#endif",
"",
"#ifndef YY_USE_CONST",
"#ifndef const",
"#define const",
"#endif",
"#endif",
"",
"",
"#ifdef YY_USE_PROTOS",
"#define YY_PROTO(proto) proto",
"#else",
"#define YY_PROTO(proto) ()",
"#endif",
"",
"/* Returned upon end-of-file. */",
"#define YY_NULL 0",
"",
"/* Promotes a possibly negative, possibly signed char to an unsigned",
" * integer for use as an array index. If the signed char is negative,",
" * we want to instead treat it as an 8-bit unsigned char, hence the",
" * double cast.",
" */",
"#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)",
"",
"/* Enter a start condition. This macro really ought to take a parameter,",
" * but we do it the disgusting crufty way forced on us by the ()-less",
" * definition of BEGIN.",
" */",
"#define BEGIN yy_start = 1 + 2 *",
"",
"/* Translate the current start state into a value that can be later handed",
" * to BEGIN to return to the state. The YYSTATE alias is for lex",
" * compatibility.",
" */",
"#define YY_START ((yy_start - 1) / 2)",
"#define YYSTATE YY_START",
"",
"/* Action number for EOF rule of a given start state. */",
"#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)",
"",
"/* Special action meaning \"start processing a new file\". */",
"#define YY_NEW_FILE yyrestart( yyin )",
"",
"#define YY_END_OF_BUFFER_CHAR 0",
"",
"/* Size of default input buffer. */",
"#define YY_BUF_SIZE 16384",
"",
"typedef struct yy_buffer_state *YY_BUFFER_STATE;",
"",
"extern int yyleng;",
"%-",
"extern FILE *yyin, *yyout;",
"%*",
"",
"#define EOB_ACT_CONTINUE_SCAN 0",
"#define EOB_ACT_END_OF_FILE 1",
"#define EOB_ACT_LAST_MATCH 2",
"",
"/* The funky do-while in the following #define is used to turn the definition",
" * int a single C statement (which needs a semi-colon terminator). This",
" * avoids problems with code like:",
" *",
" * if ( condition_holds )",
" * yyless( 5 );",
" * else",
" * do_something_else();",
" *",
" * Prior to using the do-while the compiler would get upset at the",
" * \"else\" because it interpreted the \"if\" statement as being all",
" * done when it reached the ';' after the yyless() call.",
" */",
"",
"/* Return all but the first 'n' matched characters back to the input stream. */",
"",
"#define yyless(n) \\",
" do \\",
" { \\",
" /* Undo effects of setting up yytext. */ \\",
" *yy_cp = yy_hold_char; \\",
" yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \\",
" YY_DO_BEFORE_ACTION; /* set up yytext again */ \\",
" } \\",
" while ( 0 )",
"",
"#define unput(c) yyunput( c, yytext_ptr )",
"",
"/* The following is because we cannot portably get our hands on size_t",
" * (without autoconf's help, which isn't available because we want",
" * flex-generated scanners to compile on their own).",
" */",
"typedef unsigned int yy_size_t;",
"",
"",
"struct yy_buffer_state",
" {",
"%-",
" FILE *yy_input_file;",
"%+",
" istream* yy_input_file;",
"%*",
"",
" char *yy_ch_buf; /* input buffer */",
" char *yy_buf_pos; /* current position in input buffer */",
"",
" /* Size of input buffer in bytes, not including room for EOB",
" * characters.",
" */",
" yy_size_t yy_buf_size;",
"",
" /* Number of characters read into yy_ch_buf, not including EOB",
" * characters.",
" */",
" int yy_n_chars;",
"",
" /* Whether we \"own\" the buffer - i.e., we know we created it,",
" * and can realloc() it to grow it, and should free() it to",
" * delete it.",
" */",
" int yy_is_our_buffer;",
"",
" /* Whether this is an \"interactive\" input source; if so, and",
" * if we're using stdio for input, then we want to use getc()",
" * instead of fread(), to make sure we stop fetching input after",
" * each newline.",
" */",
" int yy_is_interactive;",
"",
" /* Whether we're considered to be at the beginning of a line.",
" * If so, '^' rules will be active on the next match, otherwise",
" * not.",
" */",
" int yy_at_bol;",
"",
" /* 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 yyrestart()), so that the user can continue scanning by",
" * just pointing yyin at a new input file.",
" */",
"#define YY_BUFFER_EOF_PENDING 2",
" };",
"",
"%- Standard (non-C++) definition",
"static YY_BUFFER_STATE yy_current_buffer = 0;",
"%*",
"",
"/* 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\".",
" */",
"#define YY_CURRENT_BUFFER yy_current_buffer",
"",
"",
"%- Standard (non-C++) definition",
"/* yy_hold_char holds the character lost when yytext is formed. */",
"static char yy_hold_char;",
"",
"static int yy_n_chars; /* number of characters read into yy_ch_buf */",
"",
"",
"int yyleng;",
"",
"/* Points to current character in buffer. */",
"static char *yy_c_buf_p = (char *) 0;",
"static int yy_init = 1; /* whether we need to initialize */",
"static int yy_start = 0; /* start state number */",
"",
"/* Flag which is used to allow yywrap()'s to do buffer switches",
" * instead of setting up a fresh yyin. A bit of a hack ...",
" */",
"static int yy_did_buffer_switch_on_eof;",
"",
"void yyrestart YY_PROTO(( FILE *input_file ));",
"",
"void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));",
"void yy_load_buffer_state YY_PROTO(( void ));",
"YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));",
"void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));",
"void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));",
"void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));",
"#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )",
"",
"YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));",
"YY_BUFFER_STATE yy_scan_string YY_PROTO(( const char *str ));",
"YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( const char *bytes, int len ));",
"%*",
"",
"static void *yy_flex_alloc YY_PROTO(( yy_size_t ));",
"static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));",
"static void yy_flex_free YY_PROTO(( void * ));",
"",
"#define yy_new_buffer yy_create_buffer",
"",
"#define yy_set_interactive(is_interactive) \\",
" { \\",
" if ( ! yy_current_buffer ) \\",
" yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \\",
" yy_current_buffer->yy_is_interactive = is_interactive; \\",
" }",
"",
"#define yy_set_bol(at_bol) \\",
" { \\",
" if ( ! yy_current_buffer ) \\",
" yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \\",
" yy_current_buffer->yy_at_bol = at_bol; \\",
" }",
"",
"#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)",
"",
"%% yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here",
"",
"#ifndef YY_SKIP_YYWRAP",
"#ifdef __cplusplus",
"extern \"C\" int yywrap YY_PROTO(( void ));",
"#else",
"extern int yywrap YY_PROTO(( void ));",
"#endif",
"#endif",
"",
"#ifndef YY_NO_UNPUT",
"static void yyunput YY_PROTO(( int c, char *buf_ptr ));",
"#endif",
"",
"#ifndef yytext_ptr",
"static void yy_flex_strncpy YY_PROTO(( char *, const char *, int ));",
"#endif",
"",
"#ifndef YY_NO_INPUT",
"%- Standard (non-C++) definition",
"#ifdef __cplusplus",
"static int yyinput YY_PROTO(( void ));",
"#else",
"static int input YY_PROTO(( void ));",
"#endif",
"%*",
"#endif",
"",
"%- Standard (non-C++) definition",
"static yy_state_type yy_get_previous_state YY_PROTO(( void ));",
"static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));",
"static int yy_get_next_buffer YY_PROTO(( void ));",
"static void yy_fatal_error YY_PROTO(( const char msg[] ));",
"%*",
"",
"/* Done after the current pattern has been matched and before the",
" * corresponding action - sets up yytext.",
" */",
"#define YY_DO_BEFORE_ACTION \\",
" yytext_ptr = yy_bp; \\",
"%% code to fiddle yytext and yyleng for yymore() goes here",
" yy_hold_char = *yy_cp; \\",
" *yy_cp = '\\0'; \\",
"%% code to copy yytext_ptr to yytext[] goes here, if %array",
" yy_c_buf_p = yy_cp;",
"",
"%% data tables for the DFA and the user's section 1 definitions go here",
"",
"/* Macros after this point can all be overridden by user definitions in",
" * section 1.",
" */",
"",
"#if YY_STACK_USED",
"static int yy_start_stack_ptr = 0;",
"static int yy_start_stack_depth = 0;",
"static int *yy_start_stack = 0;",
"#ifndef YY_NO_PUSH_STATE",
"static void yy_push_state YY_PROTO(( int new_state ));",
"#endif",
"#ifndef YY_NO_POP_STATE",
"static void yy_pop_state YY_PROTO(( void ));",
"#endif",
"#ifndef YY_NO_TOP_STATE",
"static int yy_top_state YY_PROTO(( void ));",
"#endif",
"",
"#else",
"#define YY_NO_PUSH_STATE 1",
"#define YY_NO_POP_STATE 1",
"#define YY_NO_TOP_STATE 1",
"#endif",
"",
"#ifdef YY_MALLOC_DECL",
"YY_MALLOC_DECL",
"#else",
"#if __STDC__",
"#ifndef __cplusplus",
"#include <stdlib.h>",
"#endif",
"#else",
"/* Just try to get by without declaring the routines. This will fail",
" * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)",
" * or sizeof(void*) != sizeof(int).",
" */",
"#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",
"%- Standard (non-C++) definition",
"/* 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 )",
"%+ C++ definition",
"#define ECHO LexerOutput( yytext, yyleng )",
"%*",
"#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) \\",
"%% fread()/read() definition of YY_INPUT goes here unless we're doing C++",
"%+ C++ definition",
" if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \\",
" 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 )",
"%+",
"#define YY_FATAL_ERROR(msg) LexerError( msg )",
"%*",
"#endif",
"",
"/* Default declaration of generated scanner - a define so the user can",
" * easily add parameters.",
" */",
"#ifndef YY_DECL",
"%- Standard (non-C++) definition",
"#define YY_DECL int yylex YY_PROTO(( void ))",
"%+ C++ definition",
"#define YY_DECL int yyFlexLexer::yylex()",
"%*",
"#endif",
"",
"/* 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",
"",
"%% YY_RULE_SETUP definition goes here",
"",
"YY_DECL",
" {",
" register yy_state_type yy_current_state;",
" register char *yy_cp, *yy_bp;",
" register int yy_act;",
"",
"%% user's declarations go here",
"",
" if ( yy_init )",
" {",
" yy_init = 0;",
"",
"#ifdef YY_USER_INIT",
" YY_USER_INIT;",
"#endif",
"",
" if ( ! yy_start )",
" yy_start = 1; /* first start state */",
"",
" if ( ! yyin )",
"%-",
" yyin = stdin;",
"%+",
" yyin = &cin;",
"%*",
"",
" if ( ! yyout )",
"%-",
" yyout = stdout;",
"%+",
" yyout = &cout;",
"%*",
"",
" if ( ! yy_current_buffer )",
" yy_current_buffer =",
" yy_create_buffer( yyin, YY_BUF_SIZE );",
"",
" yy_load_buffer_state();",
" }",
"",
" while ( 1 ) /* loops until end-of-file is reached */",
" {",
"%% yymore()-related code goes here",
" yy_cp = yy_c_buf_p;",
"",
" /* Support of yytext. */",
" *yy_cp = yy_hold_char;",
"",
" /* yy_bp points to the position in yy_ch_buf of the start of",
" * the current run.",
" */",
" yy_bp = yy_cp;",
"",
"%% code to set up and find next match goes here",
"",
"yy_find_action:",
"%% code to find the action number goes here",
"",
" YY_DO_BEFORE_ACTION;",
"",
"%% code for yylineno update goes here",
"",
"do_action: /* This label is used only to access EOF actions. */",
"",
"%% debug code goes here",
"",
" switch ( yy_act )",
" { /* beginning of action switch */",
"%% actions go here",
"",
" case YY_END_OF_BUFFER:",
" {",
" /* Amount of text matched not including the EOB char. */",
" int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;",
"",
" /* Undo the effects of YY_DO_BEFORE_ACTION. */",
" *yy_cp = yy_hold_char;",
"",
" if ( yy_current_buffer->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",
" * 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.",
" */",
" yy_n_chars = yy_current_buffer->yy_n_chars;",
" yy_current_buffer->yy_input_file = yyin;",
" yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;",
" }",
"",
" /* Note that here we test for yy_c_buf_p \"<=\" to the position",
" * of the first EOB in the buffer, since yy_c_buf_p will",
" * already have been incremented past the NUL character",
" * (since all states make transitions on EOB to the",
" * end-of-buffer state). Contrast this with the test",
" * in input().",
" */",
" if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )",
" { /* This was really a NUL. */",
" yy_state_type yy_next_state;",
"",
" yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;",
"",
" yy_current_state = yy_get_previous_state();",
"",
" /* Okay, we're now positioned to make the NUL",
" * transition. We couldn't have",
" * yy_get_previous_state() go ahead and do it",
" * for us because it doesn't know how to deal",
" * with the possibility of jamming (and we don't",
" * want to build jamming into it because then it",
" * will run more slowly).",
" */",
"",
" yy_next_state = yy_try_NUL_trans( yy_current_state );",
"",
" yy_bp = yytext_ptr + YY_MORE_ADJ;",
"",
" if ( yy_next_state )",
" {",
" /* Consume the NUL. */",
" yy_cp = ++yy_c_buf_p;",
" yy_current_state = yy_next_state;",
" goto yy_match;",
" }",
"",
" else",
" {",
"%% code to do back-up for compressed tables and set up yy_cp goes here",
" goto yy_find_action;",
" }",
" }",
"",
" else switch ( yy_get_next_buffer() )",
" {",
" case EOB_ACT_END_OF_FILE:",
" {",
" yy_did_buffer_switch_on_eof = 0;",
"",
" if ( yywrap() )",
" {",
" /* 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.",
" */",
" yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;",
"",
" yy_act = YY_STATE_EOF(YY_START);",
" goto do_action;",
" }",
"",
" else",
" {",
" if ( ! yy_did_buffer_switch_on_eof )",
" YY_NEW_FILE;",
" }",
" break;",
" }",
"",
" case EOB_ACT_CONTINUE_SCAN:",
" yy_c_buf_p =",
" yytext_ptr + yy_amount_of_matched_text;",
"",
" yy_current_state = yy_get_previous_state();",
"",
" yy_cp = yy_c_buf_p;",
" yy_bp = yytext_ptr + YY_MORE_ADJ;",
" goto yy_match;",
"",
" case EOB_ACT_LAST_MATCH:",
" yy_c_buf_p =",
" &yy_current_buffer->yy_ch_buf[yy_n_chars];",
"",
" yy_current_state = yy_get_previous_state();",
"",
" yy_cp = yy_c_buf_p;",
" yy_bp = yytext_ptr + YY_MORE_ADJ;",
" goto yy_find_action;",
" }",
" break;",
" }",
"",
" default:",
" YY_FATAL_ERROR(",
" \"fatal flex scanner internal error--no action found\" );",
" } /* end of action switch */",
" } /* end of scanning one token */",
" } /* end of yylex */",
"",
"%+",
"yyFlexLexer::yyFlexLexer( istream* arg_yyin, ostream* arg_yyout )",
" {",
" yyin = arg_yyin;",
" yyout = arg_yyout;",
" yy_c_buf_p = 0;",
" yy_init = 1;",
" yy_start = 0;",
" yy_flex_debug = 0;",
" yylineno = 1; // this will only get updated if %option yylineno",
"",
" yy_did_buffer_switch_on_eof = 0;",
"",
" yy_looking_for_trail_begin = 0;",
" yy_more_flag = 0;",
" yy_more_len = 0;",
"",
" yy_start_stack_ptr = yy_start_stack_depth = 0;",
" yy_start_stack = 0;",
"",
" yy_current_buffer = 0;",
"",
"#ifdef YY_USES_REJECT",
" yy_state_buf = new yy_state_type[YY_BUF_SIZE + 2];",
"#else",
" yy_state_buf = 0;",
"#endif",
" }",
"",
"yyFlexLexer::~yyFlexLexer()",
" {",
" delete yy_state_buf;",
" yy_delete_buffer( yy_current_buffer );",
" }",
"",
"void yyFlexLexer::switch_streams( istream* new_in, ostream* new_out )",
" {",
" if ( new_in )",
" {",
" yy_delete_buffer( yy_current_buffer );",
" yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) );",
" }",
"",
" if ( new_out )",
" yyout = new_out;",
" }",
"",
"#ifdef YY_INTERACTIVE",
"int yyFlexLexer::LexerInput( char* buf, int /* max_size */ )",
"#else",
"int yyFlexLexer::LexerInput( char* buf, int max_size )",
"#endif",
" {",
" if ( yyin->eof() || yyin->fail() )",
" return 0;",
"",
"#ifdef YY_INTERACTIVE",
" yyin->get( buf[0] );",
"",
" if ( yyin->eof() )",
" return 0;",
"",
" if ( yyin->bad() )",
" return -1;",
"",
" return 1;",
"",
"#else",
" (void) yyin->read( buf, max_size );",
"",
" if ( yyin->bad() )",
" return -1;",
" else",
" return yyin->gcount();",
"#endif",
" }",
"",
"void yyFlexLexer::LexerOutput( const char* buf, int size )",
" {",
" (void) yyout->write( buf, size );",
" }",
"%*",
"",
"/* 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()",
"%+",
"int yyFlexLexer::yy_get_next_buffer()",
"%*",
" {",
" register char *dest = yy_current_buffer->yy_ch_buf;",
" register char *source = yytext_ptr;",
" register int number_to_move, i;",
" int ret_val;",
"",
" if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )",
" YY_FATAL_ERROR(",
" \"fatal flex scanner internal error--end of buffer missed\" );",
"",
" if ( yy_current_buffer->yy_fill_buffer == 0 )",
" { /* Don't try to fill the buffer, so this is an EOF. */",
" if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )",
" {",
" /* We matched a singled characater, the EOB, so",
" * treat this as a final EOF.",
" */",
" return EOB_ACT_END_OF_FILE;",
" }",
"",
" else",
" {",
" /* We matched some text prior to the EOB, first",
" * process it.",
" */",
" return EOB_ACT_LAST_MATCH;",
" }",
" }",
"",
" /* Try to read more data. */",
"",
" /* First move last chars to start of buffer. */",
" number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;",
"",
" for ( i = 0; i < number_to_move; ++i )",
" *(dest++) = *(source++);",
"",
" if ( yy_current_buffer->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_n_chars = 0;",
"",
" else",
" {",
" int num_to_read =",
" yy_current_buffer->yy_buf_size - number_to_move - 1;",
"",
" while ( num_to_read <= 0 )",
" { /* Not enough room in the buffer - grow it. */",
"#ifdef YY_USES_REJECT",
" YY_FATAL_ERROR(",
"\"input buffer overflow, can't enlarge buffer because scanner uses REJECT\" );",
"#else",
"",
" /* just a shorter name for the current buffer */",
" YY_BUFFER_STATE b = yy_current_buffer;",
"",
" int yy_c_buf_p_offset =",
" (int) (yy_c_buf_p - b->yy_ch_buf);",
"",
" if ( b->yy_is_our_buffer )",
" {",
" int new_size = b->yy_buf_size * 2;",
"",
" if ( new_size <= 0 )",
" b->yy_buf_size += b->yy_buf_size / 8;",
" else",
" b->yy_buf_size *= 2;",
"",
" b->yy_ch_buf = (char *)",
" /* Include room in for 2 EOB chars. */",
" yy_flex_realloc( (void *) b->yy_ch_buf,",
" b->yy_buf_size + 2 );",
" }",
" else",
" /* Can't grow it, we don't own it. */",
" b->yy_ch_buf = 0;",
"",
" if ( ! b->yy_ch_buf )",
" YY_FATAL_ERROR(",
" \"fatal error - scanner input buffer overflow\" );",
"",
" yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];",
"",
" num_to_read = yy_current_buffer->yy_buf_size -",
" number_to_move - 1;",
"#endif",
" }",
"",
" if ( num_to_read > YY_READ_BUF_SIZE )",
" num_to_read = YY_READ_BUF_SIZE;",
"",
" /* Read in more data. */",
" YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),",
" yy_n_chars, num_to_read );",
" }",
"",
" if ( yy_n_chars == 0 )",
" {",
" if ( number_to_move == YY_MORE_ADJ )",
" {",
" ret_val = EOB_ACT_END_OF_FILE;",
" yyrestart( yyin );",
" }",
"",
" else",
" {",
" ret_val = EOB_ACT_LAST_MATCH;",
" yy_current_buffer->yy_buffer_status =",
" YY_BUFFER_EOF_PENDING;",
" }",
" }",
"",
" else",
" ret_val = EOB_ACT_CONTINUE_SCAN;",
"",
" yy_n_chars += number_to_move;",
" yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;",
" yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;",
"",
" yytext_ptr = &yy_current_buffer->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()",
"%+",
"yy_state_type yyFlexLexer::yy_get_previous_state()",
"%*",
" {",
" register yy_state_type yy_current_state;",
" register char *yy_cp;",
"",
"%% code to get the start state into yy_current_state goes here",
"",
" for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )",
" {",
"%% code to find the next state goes here",
" }",
"",
" 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 );",
" */",
"",
"%-",
"#ifdef YY_USE_PROTOS",
"static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )",
"#else",
"static yy_state_type yy_try_NUL_trans( yy_current_state )",
"yy_state_type yy_current_state;",
"#endif",
"%+",
"yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state )",
"%*",
" {",
" register int yy_is_jam;",
"%% code to find the next state, and perhaps do backing up, goes here",
"",
" return yy_is_jam ? 0 : yy_current_state;",
" }",
"",
"",
"%-",
"#ifdef YY_USE_PROTOS",
"static void yyunput( int c, register char *yy_bp )",
"#else",
"static void yyunput( c, yy_bp )",
"int c;",
"register char *yy_bp;",
"#endif",
"%+",
"void yyFlexLexer::yyunput( int c, register char* yy_bp )",
"%*",
" {",
" register char *yy_cp = yy_c_buf_p;",
"",
" /* undo effects of setting up yytext */",
" *yy_cp = yy_hold_char;",
"",
" if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )",
" { /* need to shift things up to make room */",
" /* +2 for EOB chars. */",
" register int number_to_move = yy_n_chars + 2;",
" register char *dest = &yy_current_buffer->yy_ch_buf[",
" yy_current_buffer->yy_buf_size + 2];",
" register char *source =",
" &yy_current_buffer->yy_ch_buf[number_to_move];",
"",
" while ( source > yy_current_buffer->yy_ch_buf )",
" *--dest = *--source;",
"",
" yy_cp += (int) (dest - source);",
" yy_bp += (int) (dest - source);",
" yy_n_chars = yy_current_buffer->yy_buf_size;",
"",
" if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )",
" YY_FATAL_ERROR( \"flex scanner push-back overflow\" );",
" }",
"",
" *--yy_cp = (char) c;",
"",
"%% update yylineno here",
"",
" yytext_ptr = yy_bp;",
" yy_hold_char = *yy_cp;",
" yy_c_buf_p = yy_cp;",
" }",
"",
"",
"%-",
"#ifdef __cplusplus",
"static int yyinput()",
"#else",
"static int input()",
"#endif",
"%+",
"int yyFlexLexer::yyinput()",
"%*",
" {",
" int c;",
"",
" *yy_c_buf_p = yy_hold_char;",
"",
" if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )",
" {",
" /* yy_c_buf_p now points to the character we want to return.",
" * If this occurs *before* the EOB characters, then it's a",
" * valid NUL; if not, then we've hit the end of the buffer.",
" */",
" if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )",
" /* This was really a NUL. */",
" *yy_c_buf_p = '\\0';",
"",
" else",
" { /* need more input */",
" yytext_ptr = yy_c_buf_p;",
" ++yy_c_buf_p;",
"",
" switch ( yy_get_next_buffer() )",
" {",
" case EOB_ACT_END_OF_FILE:",
" {",
" if ( yywrap() )",
" {",
" yy_c_buf_p =",
" yytext_ptr + YY_MORE_ADJ;",
" return EOF;",
" }",
"",
" if ( ! yy_did_buffer_switch_on_eof )",
" YY_NEW_FILE;",
"#ifdef __cplusplus",
" return yyinput();",
"#else",
" return input();",
"#endif",
" }",
"",
" case EOB_ACT_CONTINUE_SCAN:",
" yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;",
" break;",
"",
" case EOB_ACT_LAST_MATCH:",
"#ifdef __cplusplus",
" YY_FATAL_ERROR(",
" \"unexpected last match in yyinput()\" );",
"#else",
" YY_FATAL_ERROR(",
" \"unexpected last match in input()\" );",
"#endif",
" }",
" }",
" }",
"",
" c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */",
" *yy_c_buf_p = '\\0'; /* preserve yytext */",
" yy_hold_char = *++yy_c_buf_p;",
"",
"%% update BOL and yylineno",
"",
" return c;",
" }",
"",
"",
"%-",
"#ifdef YY_USE_PROTOS",
"void yyrestart( FILE *input_file )",
"#else",
"void yyrestart( input_file )",
"FILE *input_file;",
"#endif",
"%+",
"void yyFlexLexer::yyrestart( istream* input_file )",
"%*",
" {",
" if ( ! yy_current_buffer )",
" yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );",
"",
" yy_init_buffer( yy_current_buffer, input_file );",
" yy_load_buffer_state();",
" }",
"",
"",
"%-",
"#ifdef YY_USE_PROTOS",
"void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )",
"#else",
"void yy_switch_to_buffer( new_buffer )",
"YY_BUFFER_STATE new_buffer;",
"#endif",
"%+",
"void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )",
"%*",
" {",
" if ( yy_current_buffer == new_buffer )",
" return;",
"",
" if ( yy_current_buffer )",
" {",
" /* Flush out information for old buffer. */",
" *yy_c_buf_p = yy_hold_char;",
" yy_current_buffer->yy_buf_pos = yy_c_buf_p;",
" yy_current_buffer->yy_n_chars = yy_n_chars;",
" }",
"",
" yy_current_buffer = new_buffer;",
" yy_load_buffer_state();",
"",
" /* We don't actually know whether we did this switch during",
" * EOF (yywrap()) processing, but the only time this flag",
" * is looked at is after yywrap() is called, so it's safe",
" * to go ahead and always set it.",
" */",
" yy_did_buffer_switch_on_eof = 1;",
" }",
"",
"",
"%-",
"#ifdef YY_USE_PROTOS",
"void yy_load_buffer_state( void )",
"#else",
"void yy_load_buffer_state()",
"#endif",
"%+",
"void yyFlexLexer::yy_load_buffer_state()",
"%*",
" {",
" yy_n_chars = yy_current_buffer->yy_n_chars;",
" yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;",
" yyin = yy_current_buffer->yy_input_file;",
" yy_hold_char = *yy_c_buf_p;",
" }",
"",
"",
"%-",
"#ifdef YY_USE_PROTOS",
"YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )",
"#else",
"YY_BUFFER_STATE yy_create_buffer( file, size )",
"FILE *file;",
"int size;",
"#endif",
"%+",
"YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( istream* file, int size )",
"%*",
" {",
" YY_BUFFER_STATE b;",
"",
" b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );",
" if ( ! b )",
" YY_FATAL_ERROR( \"out of dynamic memory in yy_create_buffer()\" );",
"",
" b->yy_buf_size = size;",
"",
" /* yy_ch_buf has to be 2 characters longer than the size given because",
" * we need to put in 2 end-of-buffer characters.",
" */",
" b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );",
" if ( ! b->yy_ch_buf )",
" YY_FATAL_ERROR( \"out of dynamic memory in yy_create_buffer()\" );",
"",
" b->yy_is_our_buffer = 1;",
"",
" yy_init_buffer( b, file );",
"",
" return b;",
" }",
"",
"",
"%-",
"#ifdef YY_USE_PROTOS",
"void yy_delete_buffer( YY_BUFFER_STATE b )",
"#else",
"void yy_delete_buffer( b )",
"YY_BUFFER_STATE b;",
"#endif",
"%+",
"void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b )",
"%*",
" {",
" if ( b == yy_current_buffer )",
" yy_current_buffer = (YY_BUFFER_STATE) 0;",
"",
" if ( b->yy_is_our_buffer )",
" yy_flex_free( (void *) b->yy_ch_buf );",
"",
" yy_flex_free( (void *) b );",
" }",
"",
"",
"%-",
"#ifndef YY_ALWAYS_INTERACTIVE",
"#ifndef YY_NEVER_INTERACTIVE",
"extern int isatty YY_PROTO(( int ));",
"#endif",
"#endif",
"",
"#ifdef YY_USE_PROTOS",
"void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )",
"#else",
"void yy_init_buffer( b, file )",
"YY_BUFFER_STATE b;",
"FILE *file;",
"#endif",
"",
"%+",
"extern \"C\" int isatty YY_PROTO(( int ));",
"void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, istream* file )",
"%*",
"",
" {",
" yy_flush_buffer( b );",
"",
" b->yy_input_file = file;",
" b->yy_fill_buffer = 1;",
"",
"%-",
"#if YY_ALWAYS_INTERACTIVE",
" b->yy_is_interactive = 1;",
"#else",
"#if YY_NEVER_INTERACTIVE",
" b->yy_is_interactive = 0;",
"#else",
" b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;",
"#endif",
"#endif",
"%+",
" b->yy_is_interactive = 0;",
"%*",
" }",
"",
"",
"%-",
"#ifdef YY_USE_PROTOS",
"void yy_flush_buffer( YY_BUFFER_STATE b )",
"#else",
"void yy_flush_buffer( b )",
"YY_BUFFER_STATE b;",
"#endif",
"",
"%+",
"void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b )",
"%*",
" {",
" 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 )",
" yy_load_buffer_state();",
" }",
"%*",
"",
"",
"#ifndef YY_NO_SCAN_BUFFER",
"%-",
"#ifdef YY_USE_PROTOS",
"YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )",
"#else",
"YY_BUFFER_STATE yy_scan_buffer( base, size )",
"char *base;",
"yy_size_t size;",
"#endif",
" {",
" 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) yy_flex_alloc( sizeof( struct yy_buffer_state ) );",
" if ( ! b )",
" YY_FATAL_ERROR( \"out of dynamic memory in 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;",
"",
" yy_switch_to_buffer( b );",
"",
" return b;",
" }",
"%*",
"#endif",
"",
"",
"#ifndef YY_NO_SCAN_STRING",
"%-",
"#ifdef YY_USE_PROTOS",
"YY_BUFFER_STATE yy_scan_string( const char *str )",
"#else",
"YY_BUFFER_STATE yy_scan_string( str )",
"const char *str;",
"#endif",
" {",
" int len;",
" for ( len = 0; str[len]; ++len )",
" ;",
"",
" return yy_scan_bytes( str, len );",
" }",
"%*",
"#endif",
"",
"",
"#ifndef YY_NO_SCAN_BYTES",
"%-",
"#ifdef YY_USE_PROTOS",
"YY_BUFFER_STATE yy_scan_bytes( const char *bytes, int len )",
"#else",
"YY_BUFFER_STATE yy_scan_bytes( bytes, len )",
"const char *bytes;",
"int len;",
"#endif",
" {",
" YY_BUFFER_STATE b;",
" char *buf;",
" yy_size_t n;",
" int i;",
"",
" /* Get memory for full buffer, including space for trailing EOB's. */",
" n = len + 2;",
" buf = (char *) yy_flex_alloc( n );",
" if ( ! buf )",
" YY_FATAL_ERROR( \"out of dynamic memory in yy_scan_bytes()\" );",
"",
" for ( i = 0; i < len; ++i )",
" buf[i] = bytes[i];",
"",
" buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;",
"",
" b = yy_scan_buffer( buf, n );",
" if ( ! b )",
" YY_FATAL_ERROR( \"bad buffer in 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;",
" }",
"%*",
"#endif",
"",
"",
"#ifndef YY_NO_PUSH_STATE",
"%-",
"#ifdef YY_USE_PROTOS",
"static void yy_push_state( int new_state )",
"#else",
"static void yy_push_state( new_state )",
"int new_state;",
"#endif",
"%+",
"void yyFlexLexer::yy_push_state( int new_state )",
"%*",
" {",
" if ( yy_start_stack_ptr >= yy_start_stack_depth )",
" {",
" yy_size_t new_size;",
"",
" yy_start_stack_depth += YY_START_STACK_INCR;",
" new_size = yy_start_stack_depth * sizeof( int );",
"",
" if ( ! yy_start_stack )",
" yy_start_stack = (int *) yy_flex_alloc( new_size );",
"",
" else",
" yy_start_stack = (int *) yy_flex_realloc(",
" (void *) yy_start_stack, new_size );",
"",
" if ( ! yy_start_stack )",
" YY_FATAL_ERROR(",
" \"out of memory expanding start-condition stack\" );",
" }",
"",
" yy_start_stack[yy_start_stack_ptr++] = YY_START;",
"",
" BEGIN(new_state);",
" }",
"#endif",
"",
"",
"#ifndef YY_NO_POP_STATE",
"%-",
"static void yy_pop_state()",
"%+",
"void yyFlexLexer::yy_pop_state()",
"%*",
" {",
" if ( --yy_start_stack_ptr < 0 )",
" YY_FATAL_ERROR( \"start-condition stack underflow\" );",
"",
" BEGIN(yy_start_stack[yy_start_stack_ptr]);",
" }",
"#endif",
"",
"",
"#ifndef YY_NO_TOP_STATE",
"%-",
"static int yy_top_state()",
"%+",
"int yyFlexLexer::yy_top_state()",
"%*",
" {",
" return yy_start_stack[yy_start_stack_ptr - 1];",
" }",
"#endif",
"",
"#ifndef YY_EXIT_FAILURE",
"#define YY_EXIT_FAILURE 2",
"#endif",
"",
"%-",
"#ifdef YY_USE_PROTOS",
"static void yy_fatal_error( const char msg[] )",
"#else",
"static void yy_fatal_error( msg )",
"char msg[];",
"#endif",
" {",
"FILE *err;",
" (void) fprintf( err, \"%s\\n\", msg );",
" exit( YY_EXIT_FAILURE );",
" }",
"",
"%+",
"",
"void yyFlexLexer::LexerError( const char msg[] )",
" {",
" cerr << msg << '\\n';",
" 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. */ \\",
" yytext[yyleng] = yy_hold_char; \\",
" yy_c_buf_p = yytext + n - YY_MORE_ADJ; \\",
" yy_hold_char = *yy_c_buf_p; \\",
" *yy_c_buf_p = '\\0'; \\",
" yyleng = n; \\",
" } \\",
" while ( 0 )",
"",
"",
"/* Internal utility routines. */",
"",
"#ifndef yytext_ptr",
"#ifdef YY_USE_PROTOS",
"static void yy_flex_strncpy( char *s1, const char *s2, int n )",
"#else",
"static void yy_flex_strncpy( s1, s2, n )",
"char *s1;",
"const char *s2;",
"int n;",
"#endif",
" {",
" register int i;",
" for ( i = 0; i < n; ++i )",
" s1[i] = s2[i];",
" }",
"#endif",
"",
"",
"#ifdef YY_USE_PROTOS",
"static void *yy_flex_alloc( yy_size_t size )",
"#else",
"static void *yy_flex_alloc( size )",
"yy_size_t size;",
"#endif",
" {",
" return (void *) malloc( size );",
" }",
"",
"#ifdef YY_USE_PROTOS",
"static void *yy_flex_realloc( void *ptr, yy_size_t size )",
"#else",
"static void *yy_flex_realloc( ptr, size )",
"void *ptr;",
"yy_size_t size;",
"#endif",
" {",
" return (void *) realloc( ptr, size );",
" }",
"",
"#ifdef YY_USE_PROTOS",
"static void yy_flex_free( void *ptr )",
"#else",
"static void yy_flex_free( ptr )",
"void *ptr;",
"#endif",
" {",
" free( ptr );",
" }",
"",
"#if YY_MAIN",
"int main()",
" {",
" yylex();",
" return 0;",
" }",
"#endif",
0
};
int hashfunct (register char[], int);
struct hash_entry *ndtbl[101];
struct hash_entry *sctbl[101];
struct hash_entry *ccltab[101];
struct hash_entry *findsym();
int addsym( sym, str_def, int_def, table, table_size )
register char sym[];
char *str_def;
int int_def;
hash_table table;
int table_size;
{
int hash_val = hashfunct( sym, table_size );
register struct hash_entry *sym_entry = table[hash_val];
register struct hash_entry *new_entry;
register struct hash_entry *successor;
while ( sym_entry )
{
if ( ! strcmp( sym, sym_entry->name ) )
{
return -1;
}
sym_entry = sym_entry->next;
}
new_entry = (struct hash_entry *)
flex_alloc( sizeof( struct hash_entry ) );
if ( new_entry == ((void *)0) )
flexfatal( ("symbol table memory allocation failed") );
if ( (successor = table[hash_val]) != 0 )
{
new_entry->next = successor;
successor->prev = new_entry;
}
else
new_entry->next = ((void *)0);
new_entry->prev = ((void *)0);
new_entry->name = sym;
new_entry->str_val = str_def;
new_entry->int_val = int_def;
table[hash_val] = new_entry;
return 0;
}
void cclinstal( ccltxt, cclnum )
unsigned char ccltxt[];
int cclnum;
{
unsigned char *copy_unsigned_string();
(void) addsym( (char *) copy_unsigned_string( ccltxt ),
(char *) 0, cclnum,
ccltab, 101 );
}
int ccllookup( ccltxt )
unsigned char ccltxt[];
{
return findsym( (char *) ccltxt, ccltab, 101 )->int_val;
}
struct hash_entry *findsym( sym, table, table_size )
register char sym[];
hash_table table;
int table_size;
{
static struct hash_entry empty_entry =
{
(struct hash_entry *) 0, (struct hash_entry *) 0,
(char *) 0, (char *) 0, 0,
} ;
register struct hash_entry *sym_entry =
table[hashfunct( sym, table_size )];
while ( sym_entry )
{
if ( ! strcmp( sym, sym_entry->name ) )
return sym_entry;
sym_entry = sym_entry->next;
}
return &empty_entry;
}
int hashfunct( str, hash_size )
register char str[];
int hash_size;
{
register int hashval;
register int locstr;
hashval = 0;
locstr = 0;
while ( str[locstr] )
{
hashval = (hashval << 1) + (unsigned char) str[locstr++];
hashval %= hash_size;
}
return hashval;
}
void ndinstal( name, definition )
char name[];
unsigned char definition[];
{
char *copy_string();
unsigned char *copy_unsigned_string();
if ( addsym( copy_string( name ),
(char *) copy_unsigned_string( definition ), 0,
ndtbl, 101 ) )
synerr( ("name defined twice") );
}
unsigned char *ndlookup( nd )
char nd[];
{
return (unsigned char *) findsym( nd, ndtbl, 101 )->str_val;
}
void scextend()
{
current_max_scs += 40;
++num_reallocs;
scset = (int *) reallocate_array( (void *) scset, current_max_scs, sizeof( int ) );
scbol = (int *) reallocate_array( (void *) scbol, current_max_scs, sizeof( int ) );
scxclu = (int *) reallocate_array( (void *) scxclu, current_max_scs, sizeof( int ) );
sceof = (int *) reallocate_array( (void *) sceof, current_max_scs, sizeof( int ) );
scname = (char **) reallocate_array( (void *) scname, current_max_scs, sizeof( char * ) );
}
void scinstal( str, xcluflg )
char str[];
int xcluflg;
{
char *copy_string();
action_define( str, lastsc );
if ( ++lastsc >= current_max_scs )
scextend();
scname[lastsc] = copy_string( str );
if ( addsym( scname[lastsc], (char *) 0, lastsc,
sctbl, 101 ) )
format_pinpoint_message(
("start condition %s declared twice"),
str );
scset[lastsc] = mkstate( (256 + 1) );
scbol[lastsc] = mkstate( (256 + 1) );
scxclu[lastsc] = xcluflg;
sceof[lastsc] = 0;
}
int sclookup( str )
char str[];
{
return findsym( str, sctbl, 101 )->int_val;
}
void mkentry (register int*, int, int, int, int);
void mkprot (int[], int, int);
void mktemplate (int[], int, int);
void mv2front (int);
int tbldiff (int[], int, int[]);
void bldtbl( state, statenum, totaltrans, comstate, comfreq )
int state[], statenum, totaltrans, comstate, comfreq;
{
int extptr, extrct[2][256 + 1];
int mindiff, minprot, i, d;
extptr = 0;
if ( (totaltrans * 100) < (numecs * 15) )
mkentry( state, numecs, statenum, -32766, totaltrans );
else
{
int checkcom =
comfreq * 100 > totaltrans * 50;
minprot = firstprot;
mindiff = totaltrans;
if ( checkcom )
{
for ( i = firstprot; i != 0; i = protnext[i] )
if ( protcomst[i] == comstate )
{
minprot = i;
mindiff = tbldiff( state, minprot,
extrct[extptr] );
break;
}
}
else
{
comstate = 0;
if ( firstprot != 0 )
{
minprot = firstprot;
mindiff = tbldiff( state, minprot,
extrct[extptr] );
}
}
if ( mindiff * 100 > totaltrans * 10 )
{
for ( i = minprot; i != 0; i = protnext[i] )
{
d = tbldiff( state, i, extrct[1 - extptr] );
if ( d < mindiff )
{
extptr = 1 - extptr;
mindiff = d;
minprot = i;
}
}
}
if ( mindiff * 100 > totaltrans * 50 )
{
if ( comfreq * 100 >=
totaltrans * 60 )
mktemplate( state, statenum, comstate );
else
{
mkprot( state, statenum, comstate );
mkentry( state, numecs, statenum,
-32766, totaltrans );
}
}
else
{
mkentry( extrct[extptr], numecs, statenum,
prottbl[minprot], mindiff );
if ( mindiff * 100 >=
totaltrans * 20 )
mkprot( state, statenum, comstate );
mv2front( minprot );
}
}
}
void cmptmps()
{
int tmpstorage[256 + 1];
register int *tmp = tmpstorage, i, j;
int totaltrans, trans;
peakpairs = numtemps * numecs + tblend;
if ( usemecs )
{
nummecs = cre8ecs( tecfwd, tecbck, numecs );
}
else
nummecs = numecs;
while ( lastdfa + numtemps + 1 >= current_max_dfas )
increase_max_dfas();
for ( i = 1; i <= numtemps; ++i )
{
totaltrans = 0;
for ( j = 1; j <= numecs; ++j )
{
trans = tnxt[numecs * i + j];
if ( usemecs )
{
if ( tecbck[j] > 0 )
{
tmp[tecbck[j]] = trans;
if ( trans > 0 )
++totaltrans;
}
}
else
{
tmp[j] = trans;
if ( trans > 0 )
++totaltrans;
}
}
mkentry( tmp, nummecs, lastdfa + i + 1, -32766, totaltrans );
}
}
void expand_nxt_chk()
{
register int old_max = current_max_xpairs;
current_max_xpairs += 2000;
++num_reallocs;
nxt = (int *) reallocate_array( (void *) nxt, current_max_xpairs, sizeof( int ) );
chk = (int *) reallocate_array( (void *) chk, current_max_xpairs, sizeof( int ) );
zero_out( (char *) (chk + old_max),
(size_t) (2000 * sizeof( int )) );
}
int find_table_space( state, numtrans )
int *state, numtrans;
{
register int i;
register int *state_ptr, *chk_ptr;
register int *ptr_to_last_entry_in_state;
if ( numtrans > 4 )
{
if ( tblend < 2 )
return 1;
i = tblend - numecs;
}
else
i = firstfree;
while ( 1 )
{
while ( i + numecs >= current_max_xpairs )
expand_nxt_chk();
while ( 1 )
{
if ( chk[i - 1] == 0 )
{
if ( chk[i] == 0 )
break;
else
i += 2;
}
else
++i;
while ( i + numecs >= current_max_xpairs )
expand_nxt_chk();
}
if ( numtrans <= 4 )
firstfree = i + 1;
state_ptr = &state[1];
ptr_to_last_entry_in_state = &chk[i + numecs + 1];
for ( chk_ptr = &chk[i + 1];
chk_ptr != ptr_to_last_entry_in_state; ++chk_ptr )
if ( *(state_ptr++) != 0 && *chk_ptr != 0 )
break;
if ( chk_ptr == ptr_to_last_entry_in_state )
return i;
else
++i;
}
}
void inittbl()
{
register int i;
zero_out( (char *) chk, (size_t) (current_max_xpairs * sizeof( int )) );
tblend = 0;
firstfree = tblend + 1;
numtemps = 0;
if ( usemecs )
{
tecbck[1] = 0;
for ( i = 2; i <= numecs; ++i )
{
tecbck[i] = i - 1;
tecfwd[i - 1] = i;
}
tecfwd[numecs] = 0;
}
}
void mkdeftbl()
{
int i;
jamstate = lastdfa + 1;
++tblend;
while ( tblend + numecs >= current_max_xpairs )
expand_nxt_chk();
nxt[tblend] = end_of_buffer_state;
chk[tblend] = jamstate;
for ( i = 1; i <= numecs; ++i )
{
nxt[tblend + i] = 0;
chk[tblend + i] = jamstate;
}
jambase = tblend;
base[jamstate] = jambase;
def[jamstate] = 0;
tblend += numecs;
++numtemps;
}
void mkentry( state, numchars, statenum, deflink, totaltrans )
register int *state;
int numchars, statenum, deflink, totaltrans;
{
register int minec, maxec, i, baseaddr;
int tblbase, tbllast;
if ( totaltrans == 0 )
{
if ( deflink == -32766 )
base[statenum] = -32766;
else
base[statenum] = 0;
def[statenum] = deflink;
return;
}
for ( minec = 1; minec <= numchars; ++minec )
{
if ( state[minec] != -1 )
if ( state[minec] != 0 || deflink != -32766 )
break;
}
if ( totaltrans == 1 )
{
stack1( statenum, minec, state[minec], deflink );
return;
}
for ( maxec = numchars; maxec > 0; --maxec )
{
if ( state[maxec] != -1 )
if ( state[maxec] != 0 || deflink != -32766 )
break;
}
if ( totaltrans * 100 <= numchars * 15 )
{
baseaddr = firstfree;
while ( baseaddr < minec )
{
for ( ++baseaddr; chk[baseaddr] != 0; ++baseaddr )
;
}
while ( baseaddr + maxec - minec + 1 >= current_max_xpairs )
expand_nxt_chk();
for ( i = minec; i <= maxec; ++i )
if ( state[i] != -1 &&
(state[i] != 0 || deflink != -32766) &&
chk[baseaddr + i - minec] != 0 )
{
for ( ++baseaddr;
baseaddr < current_max_xpairs &&
chk[baseaddr] != 0; ++baseaddr )
;
while ( baseaddr + maxec - minec + 1 >=
current_max_xpairs )
expand_nxt_chk();
i = minec - 1;
}
}
else
{
baseaddr = ((tblend + 1) > (minec) ? (tblend + 1) : (minec));
}
tblbase = baseaddr - minec;
tbllast = tblbase + maxec;
while ( tbllast + 1 >= current_max_xpairs )
expand_nxt_chk();
base[statenum] = tblbase;
def[statenum] = deflink;
for ( i = minec; i <= maxec; ++i )
if ( state[i] != -1 )
if ( state[i] != 0 || deflink != -32766 )
{
nxt[tblbase + i] = state[i];
chk[tblbase + i] = statenum;
}
if ( baseaddr == firstfree )
for ( ++firstfree; chk[firstfree] != 0; ++firstfree )
;
tblend = ((tblend) > (tbllast) ? (tblend) : (tbllast));
}
void mk1tbl( state, sym, onenxt, onedef )
int state, sym, onenxt, onedef;
{
if ( firstfree < sym )
firstfree = sym;
while ( chk[firstfree] != 0 )
if ( ++firstfree >= current_max_xpairs )
expand_nxt_chk();
base[state] = firstfree - sym;
def[state] = onedef;
chk[firstfree] = state;
nxt[firstfree] = onenxt;
if ( firstfree > tblend )
{
tblend = firstfree++;
if ( firstfree >= current_max_xpairs )
expand_nxt_chk();
}
}
void mkprot( state, statenum, comstate )
int state[], statenum, comstate;
{
int i, slot, tblbase;
if ( ++numprots >= 50 || numecs * numprots >= 2000 )
{
slot = lastprot;
lastprot = protprev[lastprot];
protnext[lastprot] = 0;
}
else
slot = numprots;
protnext[slot] = firstprot;
if ( firstprot != 0 )
protprev[firstprot] = slot;
firstprot = slot;
prottbl[slot] = statenum;
protcomst[slot] = comstate;
tblbase = numecs * (slot - 1);
for ( i = 1; i <= numecs; ++i )
protsave[tblbase + i] = state[i];
}
void mktemplate( state, statenum, comstate )
int state[], statenum, comstate;
{
int i, numdiff, tmpbase, tmp[256 + 1];
unsigned char transset[256 + 1];
int tsptr;
++numtemps;
tsptr = 0;
tmpbase = numtemps * numecs;
if ( tmpbase + numecs >= current_max_template_xpairs )
{
current_max_template_xpairs += 2500;
++num_reallocs;
tnxt = (int *) reallocate_array( (void *) tnxt, current_max_template_xpairs, sizeof( int ) );
}
for ( i = 1; i <= numecs; ++i )
if ( state[i] == 0 )
tnxt[tmpbase + i] = 0;
else
{
transset[tsptr++] = i;
tnxt[tmpbase + i] = comstate;
}
if ( usemecs )
mkeccl( transset, tsptr, tecfwd, tecbck, numecs, 0 );
mkprot( tnxt + tmpbase, -numtemps, comstate );
numdiff = tbldiff( state, firstprot, tmp );
mkentry( tmp, numecs, statenum, -numtemps, numdiff );
}
void mv2front( qelm )
int qelm;
{
if ( firstprot != qelm )
{
if ( qelm == lastprot )
lastprot = protprev[lastprot];
protnext[protprev[qelm]] = protnext[qelm];
if ( protnext[qelm] != 0 )
protprev[protnext[qelm]] = protprev[qelm];
protprev[qelm] = 0;
protnext[qelm] = firstprot;
protprev[firstprot] = qelm;
firstprot = qelm;
}
}
void place_state( state, statenum, transnum )
int *state, statenum, transnum;
{
register int i;
register int *state_ptr;
int position = find_table_space( state, transnum );
base[statenum] = position;
chk[position - 1] = 1;
chk[position] = 1;
state_ptr = &state[1];
for ( i = 1; i <= numecs; ++i, ++state_ptr )
if ( *state_ptr != 0 )
{
chk[position + i] = i;
nxt[position + i] = *state_ptr;
}
if ( position + numecs > tblend )
tblend = position + numecs;
}
void stack1( statenum, sym, nextstate, deflink )
int statenum, sym, nextstate, deflink;
{
if ( onesp >= 500 - 1 )
mk1tbl( statenum, sym, nextstate, deflink );
else
{
++onesp;
onestate[onesp] = statenum;
onesym[onesp] = sym;
onenext[onesp] = nextstate;
onedef[onesp] = deflink;
}
}
int tbldiff( state, pr, ext )
int state[], pr, ext[];
{
register int i, *sp = state, *ep = ext, *protp;
register int numdiff = 0;
protp = &protsave[numecs * (pr - 1)];
for ( i = numecs; i > 0; --i )
{
if ( *++protp == *++sp )
*++ep = -1;
else
{
*++ep = *sp;
++numdiff;
}
}
return numdiff;
}
int yylex()
{
int toktype;
static int beglin = 0;
extern char *yytext;
if ( eofseen )
toktype = (-1);
else
toktype = flexscan();
if ( toktype == (-1) || toktype == 0 )
{
eofseen = 1;
if ( sectnum == 1 )
{
synerr( ("premature EOF") );
sectnum = 2;
toktype = 259;
}
else
toktype = 0;
}
if ( trace )
{
if ( beglin )
{
fprintf( err, "%d\t", num_rules + 1 );
beglin = 0;
}
switch ( toktype )
{
case '<':
case '>':
case '^':
case '$':
case '"':
case '[':
case ']':
case '{':
case '}':
case '|':
case '(':
case ')':
case '-':
case '/':
case '\\':
case '?':
case '.':
case '*':
case '+':
case ',':
(void) _IO_putc (toktype, err);
break;
case '\n':
(void) _IO_putc ('\n', err);
if ( sectnum == 2 )
beglin = 1;
break;
case 260:
fputs( "%s", err );
break;
case 261:
fputs( "%x", err );
break;
case 259:
fputs( "%%\n", err );
if ( sectnum == 2 )
beglin = 1;
break;
case 262:
fprintf( err, "'%s'", nmstr );
break;
case 257:
switch ( yylval )
{
case '<':
case '>':
case '^':
case '$':
case '"':
case '[':
case ']':
case '{':
case '}':
case '|':
case '(':
case ')':
case '-':
case '/':
case '\\':
case '?':
case '.':
case '*':
case '+':
case ',':
fprintf( err, "\\%c",
yylval );
break;
default:
if ( ! (((yylval) & ~0x7f) == 0) ||
! ((*__ctype_b_loc ())[(int) ((yylval))] & (unsigned short int) _ISprint) )
fprintf( err,
"\\%.3o",
(unsigned int) yylval );
else
(void) _IO_putc (yylval, err);
break;
}
break;
case 258:
fprintf( err, "%d", yylval );
break;
case 263:
fprintf( err, "[%d]", yylval );
break;
case 264:
fprintf( err, "<<EOF>>" );
break;
case 265:
fprintf( err, "%s ", yytext );
break;
case 266:
case 267:
case 269:
case 270:
case 271:
case 272:
case 273:
case 274:
case 275:
case 276:
case 277:
case 278:
case 279:
case 280:
fprintf( err, "%s", yytext );
break;
case 0:
fprintf( err, ("End Marker\n") );
break;
default:
fprintf( err,
("*Something Weird* - tok: %d val: %d\n"),
toktype, yylval );
break;
}
}
return toktype;
}
int pat, scnum, eps, headcnt, trailcnt, anyccl, lastchar, i, rulelen;
int trlcontxt, xcluflg, currccl, cclsorted, varlength, variable_trail_rule;
int *scon_stk;
int scon_stk_ptr;
static int madeany = 0;
int previous_continued_action;
static const char yytranslate[] = { 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 28,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 42, 2, 36, 2, 2, 2, 43,
44, 34, 39, 35, 47, 41, 38, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 32,
27, 33, 40, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
45, 2, 46, 31, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 29, 37, 30, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26
};
static const short yyr1[] = { 0,
48, 49, 50, 50, 50, 50, 51, 52, 52, 53,
53, 53, 54, 55, 55, 56, 56, 56, 57, 57,
57, 58, 59, 59, 59, 59, 60, 61, 61, 61,
62, 62, 62, 63, 64, 64, 64, 64, 65, 65,
66, 67, 67, 68, 68, 68, 68, 68, 68, 68,
68, 68, 68, 68, 68, 69, 69, 70, 70, 70,
70, 71, 71, 71, 71, 71, 71, 71, 71, 71,
71, 71, 71, 72, 72
};
static const short yyr2[] = { 0,
5, 0, 3, 2, 0, 1, 1, 1, 1, 2,
1, 1, 2, 2, 0, 3, 3, 3, 5, 5,
0, 0, 2, 1, 1, 1, 0, 4, 3, 0,
3, 1, 1, 1, 2, 3, 2, 1, 3, 1,
2, 2, 1, 2, 2, 2, 6, 5, 4, 1,
1, 1, 3, 3, 1, 3, 4, 4, 2, 2,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 2, 0
};
static const short yydefact[] = { 2,
0, 6, 0, 7, 8, 9, 15, 21, 0, 4,
13, 30, 12, 11, 3, 0, 0, 0, 14, 27,
1, 22, 10, 0, 0, 0, 0, 0, 21, 0,
16, 17, 18, 29, 33, 34, 0, 32, 30, 26,
55, 52, 25, 0, 50, 75, 0, 61, 0, 24,
38, 0, 40, 43, 51, 28, 0, 20, 23, 0,
0, 61, 0, 19, 37, 0, 41, 35, 42, 0,
44, 45, 46, 31, 74, 53, 54, 0, 59, 62,
63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
73, 56, 60, 39, 36, 0, 57, 0, 49, 0,
58, 0, 48, 47, 0, 0, 0
};
static const short yydefgoto[] = { 105,
1, 3, 8, 9, 15, 10, 11, 19, 12, 21,
49, 28, 22, 37, 38, 50, 51, 52, 53, 54,
55, 63, 93, 60
};
static const short yypact[] = {-32768,
78,-32768, 81,-32768,-32768,-32768,-32768,-32768, 6,-32768,
-2, 5,-32768,-32768, -7, -14, 1, 9,-32768, 28,
-32768, 14,-32768, 55, 65, 74, 57, 30,-32768, -1,
-32768,-32768,-32768,-32768,-32768,-32768, 58,-32768, 44,-32768,
-32768,-32768,-32768, 24,-32768,-32768, 24, 63, 69,-32768,
23, 24, 24, 41,-32768,-32768, 90,-32768,-32768, 26,
27,-32768, 0,-32768,-32768, 24,-32768, 59, 41, 95,
-32768,-32768,-32768,-32768,-32768,-32768,-32768, 32, 53,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,-32768, 24,-32768, 4,-32768, 98,-32768, 2,
-32768, 72,-32768,-32768, 103, 104,-32768
};
static const short yypgoto[] = {-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 76, 84,
-32768,-32768,-32768,-32768, 50, 64, 25,-32768, 43, -49,
-32768, 48,-32768,-32768
};
static const short yytable[] = { 40,
23, 41, 79, 69, -22, 102, 13, 42, 43, 16,
17, 18, 24, 14, 80, 81, 82, 83, 84, 85,
86, 87, 88, 89, 90, 91, 41, 25, 75, 44,
35, 103, 42, 99, 79, 26, 20, 36, 100, 45,
46, 47, 29, 48, 69, 92, 80, 81, 82, 83,
84, 85, 86, 87, 88, 89, 90, 91, 65, 66,
67, 27, 31, 66, 45, 46, 47, 76, 48, 70,
77, 61, 32, 58, 71, 20, 68, 97, 2, 72,
73, 33, -5, -5, -5, 4, 5, 6, -5, 34,
56, 7, 57, 62, 95, 66, 64, 36, 96, 98,
101, 104, 106, 107, 39, 30, 74, 59, 94, 78
};
static const short yycheck[] = { 1,
8, 3, 3, 53, 0, 4, 1, 9, 10, 12,
13, 14, 27, 8, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 3, 27, 3, 31,
1, 30, 9, 30, 3, 27, 32, 8, 35, 41,
42, 43, 29, 45, 94, 46, 15, 16, 17, 18,
19, 20, 21, 22, 23, 24, 25, 26, 36, 37,
38, 34, 8, 37, 41, 42, 43, 42, 45, 29,
44, 47, 8, 30, 34, 32, 52, 46, 1, 39,
40, 8, 5, 6, 7, 5, 6, 7, 11, 33,
33, 11, 35, 31, 36, 37, 28, 8, 4, 47,
3, 30, 0, 0, 29, 22, 57, 44, 66, 62
};
int yychar;
int yylval;
int yynerrs;
int yyparse (void);
int
yyparse()
{
register int yystate;
register int yyn;
register short *yyssp;
register int *yyvsp;
int yyerrstatus;
int yychar1 = 0;
short yyssa[200];
int yyvsa[200];
short *yyss = yyssa;
int *yyvs = yyvsa;
int yystacksize = 200;
int yyfree_stacks = 0;
int yyval;
int yylen;
yystate = 0;
yyerrstatus = 0;
yynerrs = 0;
yychar = -2;
yyssp = yyss - 1;
yyvsp = yyvs;
yynewstate:
*++yyssp = yystate;
if (yyssp >= yyss + yystacksize - 1)
{
int *yyvs1 = yyvs;
short *yyss1 = yyss;
int size = yyssp - yyss + 1;
if (yystacksize >= 10000)
{
yyerror("parser stack overflow");
if (yyfree_stacks)
{
free (yyss);
free (yyvs);
}
return 2;
}
yystacksize *= 2;
if (yystacksize > 10000)
yystacksize = 10000;
yyss = (short *) __builtin_alloca (yystacksize * sizeof (*yyssp));
__builtin_memcpy((char *)yyss,(char *)yyss1,size * (unsigned int) sizeof (*yyssp));
yyvs = (int *) __builtin_alloca (yystacksize * sizeof (*yyvsp));
__builtin_memcpy((char *)yyvs,(char *)yyvs1,size * (unsigned int) sizeof (*yyvsp));
yyssp = yyss + size - 1;
yyvsp = yyvs + size - 1;
if (yyssp >= yyss + yystacksize - 1)
goto yyabortlab;
}
goto yybackup;
yybackup:
yyn = yypact[yystate];
if (yyn == -32768)
goto yydefault;
if (yychar == -2)
{
yychar = yylex();
}
if (yychar <= 0)
{
yychar1 = 0;
yychar = 0;
}
else
{
yychar1 = ((unsigned)(yychar) <= 280 ? yytranslate[yychar] : 73);
}
yyn += yychar1;
if (yyn < 0 || yyn > 110 || yycheck[yyn] != yychar1)
goto yydefault;
yyn = yytable[yyn];
if (yyn < 0)
{
if (yyn == -32768)
goto yyerrlab;
yyn = -yyn;
goto yyreduce;
}
else if (yyn == 0)
goto yyerrlab;
if (yyn == 107)
goto yyacceptlab;
if (yychar != 0)
yychar = -2;
*++yyvsp = yylval;
if (yyerrstatus) yyerrstatus--;
yystate = yyn;
goto yynewstate;
yydefault:
yyn = yydefact[yystate];
if (yyn == 0)
goto yyerrlab;
yyreduce:
yylen = yyr2[yyn];
if (yylen > 0)
yyval = yyvsp[1-yylen];
switch (yyn) {
case 1:
{
int def_rule;
pat = cclinit();
cclnegate( pat );
def_rule = mkstate( -pat );
default_rule = num_rules;
finish_rule( def_rule, 0, 0, 0 );
for ( i = 1; i <= lastsc; ++i )
scset[i] = mkbranch( scset[i], def_rule );
if ( spprdflt )
add_action(
"YY_FATAL_ERROR( \"flex scanner jammed\" )" );
else
add_action( "ECHO" );
add_action( ";\n\tYY_BREAK\n" );
;
break;}
case 2:
{
scinstal( "INITIAL", 0 );
;
break;}
case 6:
{ synerr( "unknown error processing section 1" ); ;
break;}
case 7:
{
check_options();
scon_stk = (int *) allocate_array( lastsc + 1, sizeof( int ) );
scon_stk_ptr = 0;
;
break;}
case 8:
{ xcluflg = 0; ;
break;}
case 9:
{ xcluflg = 1; ;
break;}
case 10:
{ scinstal( nmstr, xcluflg ); ;
break;}
case 11:
{ scinstal( nmstr, xcluflg ); ;
break;}
case 12:
{ synerr( "bad start condition list" ); ;
break;}
case 16:
{
outfilename = copy_string( nmstr );
did_outfilename = 1;
;
break;}
case 17:
{ prefix = copy_string( nmstr ); ;
break;}
case 18:
{ yyclass = copy_string( nmstr ); ;
break;}
case 19:
{ scon_stk_ptr = yyvsp[-3]; ;
break;}
case 20:
{ scon_stk_ptr = yyvsp[-3]; ;
break;}
case 22:
{
trlcontxt = variable_trail_rule = varlength = 0;
trailcnt = headcnt = rulelen = 0;
current_state_type = 0x1;
previous_continued_action = continued_action;
in_rule = 1;
new_rule();
;
break;}
case 23:
{
pat = yyvsp[0];
finish_rule( pat, variable_trail_rule,
headcnt, trailcnt );
if ( scon_stk_ptr > 0 )
{
for ( i = 1; i <= scon_stk_ptr; ++i )
scbol[scon_stk[i]] =
mkbranch( scbol[scon_stk[i]],
pat );
}
else
{
for ( i = 1; i <= lastsc; ++i )
if ( ! scxclu[i] )
scbol[i] = mkbranch( scbol[i],
pat );
}
if ( ! bol_needed )
{
bol_needed = 1;
if ( performance_report > 1 )
pinpoint_message(
"'^' operator results in sub-optimal performance" );
}
;
break;}
case 24:
{
pat = yyvsp[0];
finish_rule( pat, variable_trail_rule,
headcnt, trailcnt );
if ( scon_stk_ptr > 0 )
{
for ( i = 1; i <= scon_stk_ptr; ++i )
scset[scon_stk[i]] =
mkbranch( scset[scon_stk[i]],
pat );
}
else
{
for ( i = 1; i <= lastsc; ++i )
if ( ! scxclu[i] )
scset[i] =
mkbranch( scset[i],
pat );
}
;
break;}
case 25:
{
if ( scon_stk_ptr > 0 )
build_eof_action();
else
{
for ( i = 1; i <= lastsc; ++i )
if ( ! sceof[i] )
scon_stk[++scon_stk_ptr] = i;
if ( scon_stk_ptr == 0 )
warn(
"all start conditions already have <<EOF>> rules" );
else
build_eof_action();
}
;
break;}
case 26:
{ synerr( "unrecognized rule" ); ;
break;}
case 27:
{ yyval = scon_stk_ptr; ;
break;}
case 28:
{ yyval = yyvsp[-2]; ;
break;}
case 29:
{
yyval = scon_stk_ptr;
for ( i = 1; i <= lastsc; ++i )
{
int j;
for ( j = 1; j <= scon_stk_ptr; ++j )
if ( scon_stk[j] == i )
break;
if ( j > scon_stk_ptr )
scon_stk[++scon_stk_ptr] = i;
}
;
break;}
case 30:
{ yyval = scon_stk_ptr; ;
break;}
case 33:
{ synerr( "bad start condition list" ); ;
break;}
case 34:
{
if ( (scnum = sclookup( nmstr )) == 0 )
format_pinpoint_message(
"undeclared start condition %s",
nmstr );
else
{
for ( i = 1; i <= scon_stk_ptr; ++i )
if ( scon_stk[i] == scnum )
{
format_warn(
"<%s> specified twice",
scname[scnum] );
break;
}
if ( i > scon_stk_ptr )
scon_stk[++scon_stk_ptr] = scnum;
}
;
break;}
case 35:
{
if ( transchar[lastst[yyvsp[0]]] != (256 + 1) )
yyvsp[0] = link_machines( yyvsp[0],
mkstate( (256 + 1) ) );
mark_beginning_as_normal( yyvsp[0] );
current_state_type = 0x1;
if ( previous_continued_action )
{
if ( ! varlength || headcnt != 0 )
warn(
"trailing context made variable due to preceding '|' action" );
varlength = 1;
headcnt = 0;
}
if ( lex_compat || (varlength && headcnt == 0) )
{
add_accept( yyvsp[-1],
num_rules | 0x4000 );
variable_trail_rule = 1;
}
else
trailcnt = rulelen;
yyval = link_machines( yyvsp[-1], yyvsp[0] );
;
break;}
case 36:
{ synerr( "trailing context used twice" ); ;
break;}
case 37:
{
headcnt = 0;
trailcnt = 1;
rulelen = 1;
varlength = 0;
current_state_type = 0x2;
if ( trlcontxt )
{
synerr( "trailing context used twice" );
yyval = mkstate( (256 + 1) );
}
else if ( previous_continued_action )
{
warn(
"trailing context made variable due to preceding '|' action" );
varlength = 1;
}
if ( lex_compat || varlength )
{
add_accept( yyvsp[-1],
num_rules | 0x4000 );
variable_trail_rule = 1;
}
trlcontxt = 1;
eps = mkstate( (256 + 1) );
yyval = link_machines( yyvsp[-1],
link_machines( eps, mkstate( '\n' ) ) );
;
break;}
case 38:
{
yyval = yyvsp[0];
if ( trlcontxt )
{
if ( lex_compat || (varlength && headcnt == 0) )
variable_trail_rule = 1;
else
trailcnt = rulelen;
}
;
break;}
case 39:
{
varlength = 1;
yyval = mkor( yyvsp[-2], yyvsp[0] );
;
break;}
case 40:
{ yyval = yyvsp[0]; ;
break;}
case 41:
{
if ( trlcontxt )
synerr( "trailing context used twice" );
else
trlcontxt = 1;
if ( varlength )
varlength = 0;
else
headcnt = rulelen;
rulelen = 0;
current_state_type = 0x2;
yyval = yyvsp[-1];
;
break;}
case 42:
{
yyval = link_machines( yyvsp[-1], yyvsp[0] );
;
break;}
case 43:
{ yyval = yyvsp[0]; ;
break;}
case 44:
{
varlength = 1;
yyval = mkclos( yyvsp[-1] );
;
break;}
case 45:
{
varlength = 1;
yyval = mkposcl( yyvsp[-1] );
;
break;}
case 46:
{
varlength = 1;
yyval = mkopt( yyvsp[-1] );
;
break;}
case 47:
{
varlength = 1;
if ( yyvsp[-3] > yyvsp[-1] || yyvsp[-3] < 0 )
{
synerr( "bad iteration values" );
yyval = yyvsp[-5];
}
else
{
if ( yyvsp[-3] == 0 )
{
if ( yyvsp[-1] <= 0 )
{
synerr(
"bad iteration values" );
yyval = yyvsp[-5];
}
else
yyval = mkopt(
mkrep( yyvsp[-5], 1, yyvsp[-1] ) );
}
else
yyval = mkrep( yyvsp[-5], yyvsp[-3], yyvsp[-1] );
}
;
break;}
case 48:
{
varlength = 1;
if ( yyvsp[-2] <= 0 )
{
synerr( "iteration value must be positive" );
yyval = yyvsp[-4];
}
else
yyval = mkrep( yyvsp[-4], yyvsp[-2], -1 );
;
break;}
case 49:
{
varlength = 1;
if ( yyvsp[-1] <= 0 )
{
synerr( "iteration value must be positive" );
yyval = yyvsp[-3];
}
else
yyval = link_machines( yyvsp[-3],
copysingl( yyvsp[-3], yyvsp[-1] - 1 ) );
;
break;}
case 50:
{
if ( ! madeany )
{
anyccl = cclinit();
ccladd( anyccl, '\n' );
cclnegate( anyccl );
if ( useecs )
mkeccl( ccltbl + cclmap[anyccl],
ccllen[anyccl], nextecm,
ecgroup, csize, csize );
madeany = 1;
}
++rulelen;
yyval = mkstate( -anyccl );
;
break;}
case 51:
{
if ( ! cclsorted )
cshell( ccltbl + cclmap[yyvsp[0]], ccllen[yyvsp[0]], 1 );
if ( useecs )
mkeccl( ccltbl + cclmap[yyvsp[0]], ccllen[yyvsp[0]],
nextecm, ecgroup, csize, csize );
++rulelen;
yyval = mkstate( -yyvsp[0] );
;
break;}
case 52:
{
++rulelen;
yyval = mkstate( -yyvsp[0] );
;
break;}
case 53:
{ yyval = yyvsp[-1]; ;
break;}
case 54:
{ yyval = yyvsp[-1]; ;
break;}
case 55:
{
++rulelen;
if ( caseins && yyvsp[0] >= 'A' && yyvsp[0] <= 'Z' )
yyvsp[0] = clower( yyvsp[0] );
yyval = mkstate( yyvsp[0] );
;
break;}
case 56:
{ yyval = yyvsp[-1]; ;
break;}
case 57:
{
cclnegate( yyvsp[-1] );
yyval = yyvsp[-1];
;
break;}
case 58:
{
if ( caseins )
{
if ( yyvsp[-2] >= 'A' && yyvsp[-2] <= 'Z' )
yyvsp[-2] = clower( yyvsp[-2] );
if ( yyvsp[0] >= 'A' && yyvsp[0] <= 'Z' )
yyvsp[0] = clower( yyvsp[0] );
}
if ( yyvsp[-2] > yyvsp[0] )
synerr( "negative range in character class" );
else
{
for ( i = yyvsp[-2]; i <= yyvsp[0]; ++i )
ccladd( yyvsp[-3], i );
cclsorted = cclsorted && (yyvsp[-2] > lastchar);
lastchar = yyvsp[0];
}
yyval = yyvsp[-3];
;
break;}
case 59:
{
if ( caseins && yyvsp[0] >= 'A' && yyvsp[0] <= 'Z' )
yyvsp[0] = clower( yyvsp[0] );
ccladd( yyvsp[-1], yyvsp[0] );
cclsorted = cclsorted && (yyvsp[0] > lastchar);
lastchar = yyvsp[0];
yyval = yyvsp[-1];
;
break;}
case 60:
{
cclsorted = 0;
yyval = yyvsp[-1];
;
break;}
case 61:
{
cclsorted = 1;
lastchar = 0;
currccl = yyval = cclinit();
;
break;}
case 62:
{ { int c; for ( c = 0; c < csize; ++c ) if ( (((c) & ~0x7f) == 0) && ((*__ctype_b_loc ())[(int) ((c))] & (unsigned short int) _ISalnum) ) ccladd( currccl, c ); } ;
break;}
case 63:
{ { int c; for ( c = 0; c < csize; ++c ) if ( (((c) & ~0x7f) == 0) && ((*__ctype_b_loc ())[(int) ((c))] & (unsigned short int) _ISalpha) ) ccladd( currccl, c ); } ;
break;}
case 64:
{ { int c; for ( c = 0; c < csize; ++c ) if ( (((c) & ~0x7f) == 0) && ((c) == ' ' || (c) == '\t') ) ccladd( currccl, c ); } ;
break;}
case 65:
{ { int c; for ( c = 0; c < csize; ++c ) if ( (((c) & ~0x7f) == 0) && ((*__ctype_b_loc ())[(int) ((c))] & (unsigned short int) _IScntrl) ) ccladd( currccl, c ); } ;
break;}
case 66:
{ { int c; for ( c = 0; c < csize; ++c ) if ( (((c) & ~0x7f) == 0) && ((*__ctype_b_loc ())[(int) ((c))] & (unsigned short int) _ISdigit) ) ccladd( currccl, c ); } ;
break;}
case 67:
{ { int c; for ( c = 0; c < csize; ++c ) if ( (((c) & ~0x7f) == 0) && ((*__ctype_b_loc ())[(int) ((c))] & (unsigned short int) _ISgraph) ) ccladd( currccl, c ); } ;
break;}
case 68:
{ { int c; for ( c = 0; c < csize; ++c ) if ( (((c) & ~0x7f) == 0) && ((*__ctype_b_loc ())[(int) ((c))] & (unsigned short int) _ISlower) ) ccladd( currccl, c ); } ;
break;}
case 69:
{ { int c; for ( c = 0; c < csize; ++c ) if ( (((c) & ~0x7f) == 0) && ((*__ctype_b_loc ())[(int) ((c))] & (unsigned short int) _ISprint) ) ccladd( currccl, c ); } ;
break;}
case 70:
{ { int c; for ( c = 0; c < csize; ++c ) if ( (((c) & ~0x7f) == 0) && ((*__ctype_b_loc ())[(int) ((c))] & (unsigned short int) _ISpunct) ) ccladd( currccl, c ); } ;
break;}
case 71:
{ { int c; for ( c = 0; c < csize; ++c ) if ( (((c) & ~0x7f) == 0) && ((*__ctype_b_loc ())[(int) ((c))] & (unsigned short int) _ISspace) ) ccladd( currccl, c ); } ;
break;}
case 72:
{
if ( caseins )
{ int c; for ( c = 0; c < csize; ++c ) if ( (((c) & ~0x7f) == 0) && ((*__ctype_b_loc ())[(int) ((c))] & (unsigned short int) _ISlower) ) ccladd( currccl, c ); }
else
{ int c; for ( c = 0; c < csize; ++c ) if ( (((c) & ~0x7f) == 0) && ((*__ctype_b_loc ())[(int) ((c))] & (unsigned short int) _ISupper) ) ccladd( currccl, c ); }
;
break;}
case 73:
{ { int c; for ( c = 0; c < csize; ++c ) if ( (((c) & ~0x7f) == 0) && ((*__ctype_b_loc ())[(int) ((c))] & (unsigned short int) _ISxdigit) ) ccladd( currccl, c ); } ;
break;}
case 74:
{
if ( caseins && yyvsp[0] >= 'A' && yyvsp[0] <= 'Z' )
yyvsp[0] = clower( yyvsp[0] );
++rulelen;
yyval = link_machines( yyvsp[-1], mkstate( yyvsp[0] ) );
;
break;}
case 75:
{ yyval = mkstate( (256 + 1) ); ;
break;}
}
yyvsp -= yylen;
yyssp -= yylen;
*++yyvsp = yyval;
yyn = yyr1[yyn];
yystate = yypgoto[yyn - 48] + *yyssp;
if (yystate >= 0 && yystate <= 110 && yycheck[yystate] == *yyssp)
yystate = yytable[yystate];
else
yystate = yydefgoto[yyn - 48];
goto yynewstate;
yyerrlab:
if (! yyerrstatus)
{
++yynerrs;
yyerror("parse error");
}
goto yyerrlab1;
yyerrlab1:
if (yyerrstatus == 3)
{
if (yychar == 0)
goto yyabortlab;
yychar = -2;
}
yyerrstatus = 3;
goto yyerrhandle;
yyerrdefault:
yyerrpop:
if (yyssp == yyss) goto yyabortlab;
yyvsp--;
yystate = *--yyssp;
yyerrhandle:
yyn = yypact[yystate];
if (yyn == -32768)
goto yyerrdefault;
yyn += 1;
if (yyn < 0 || yyn > 110 || yycheck[yyn] != 1)
goto yyerrdefault;
yyn = yytable[yyn];
if (yyn < 0)
{
if (yyn == -32768)
goto yyerrpop;
yyn = -yyn;
goto yyreduce;
}
else if (yyn == 0)
goto yyerrpop;
if (yyn == 107)
goto yyacceptlab;
*++yyvsp = yylval;
yystate = yyn;
goto yynewstate;
yyacceptlab:
if (yyfree_stacks)
{
free (yyss);
free (yyvs);
}
return 0;
yyabortlab:
if (yyfree_stacks)
{
free (yyss);
free (yyvs);
}
return 1;
}
void build_eof_action()
{
register int i;
char action_text[2048];
for ( i = 1; i <= scon_stk_ptr; ++i )
{
if ( sceof[scon_stk[i]] )
format_pinpoint_message(
"multiple <<EOF>> rules for start condition %s",
scname[scon_stk[i]] );
else
{
sceof[scon_stk[i]] = 1;
sprintf( action_text, "case YY_STATE_EOF(%s):\n",
scname[scon_stk[i]] );
add_action( action_text );
}
}
line_directive_out( (FILE *) 0, 1 );
--num_rules;
++num_eof_rules;
}
void format_synerr( msg, arg )
char msg[], arg[];
{
char errmsg[2048];
(void) sprintf( errmsg, msg, arg );
synerr( errmsg );
}
void synerr( str )
char str[];
{
syntaxerror = 1;
pinpoint_message( str );
}
void format_warn( msg, arg )
char msg[], arg[];
{
char warn_msg[2048];
(void) sprintf( warn_msg, msg, arg );
warn( warn_msg );
}
void warn( str )
char str[];
{
line_warning( str, linenum );
}
void format_pinpoint_message( msg, arg )
char msg[], arg[];
{
char errmsg[2048];
(void) sprintf( errmsg, msg, arg );
pinpoint_message( errmsg );
}
void pinpoint_message( str )
char str[];
{
line_pinpoint( str, linenum );
}
void line_warning( str, line )
char str[];
int line;
{
char warning[2048];
if ( ! nowarn )
{
sprintf( warning, "warning, %s", str );
line_pinpoint( warning, line );
}
}
void line_pinpoint( str, line )
char str[];
int line;
{
fprintf( err, "\"%s\", line %d: %s\n", infilename, line, str );
}
void yyerror( msg )
char msg[];
{
}
typedef struct yy_buffer_state *YY_BUFFER_STATE;
extern int yyleng;
extern FILE *yyin, *yyout;
typedef unsigned int yy_size_t;
struct yy_buffer_state
{
FILE *yy_input_file;
char *yy_ch_buf;
char *yy_buf_pos;
yy_size_t yy_buf_size;
int yy_n_chars;
int yy_is_our_buffer;
int yy_is_interactive;
int yy_at_bol;
int yy_fill_buffer;
int yy_buffer_status;
};
static YY_BUFFER_STATE yy_current_buffer = 0;
static char yy_hold_char;
static int yy_n_chars;
int yyleng;
static char *yy_c_buf_p = (char *) 0;
static int yy_init = 1;
static int yy_start = 0;
static int yy_did_buffer_switch_on_eof;
void yyrestart ( FILE *input_file );
void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer );
void yy_load_buffer_state ( void );
YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size );
void yy_delete_buffer ( YY_BUFFER_STATE b );
void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file );
void yy_flush_buffer ( YY_BUFFER_STATE b );
YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size );
YY_BUFFER_STATE yy_scan_string ( const char *str );
YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len );
static void *yy_flex_alloc ( yy_size_t );
static void *yy_flex_realloc ( void *, yy_size_t );
static void yy_flex_free ( void * );
typedef unsigned char YY_CHAR;
FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
typedef int yy_state_type;
extern char *yytext;
extern int yywrap ( void );
static void yyunput ( int c, char *buf_ptr );
static int input ( void );
static yy_state_type yy_get_previous_state ( void );
static yy_state_type yy_try_NUL_trans ( yy_state_type current_state );
static int yy_get_next_buffer ( void );
static void yy_fatal_error ( const char msg[] );
static const short int yy_accept[769] =
{ 0,
0, 0, 0, 0, 87, 87, 163, 163, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 166, 164,
7, 18, 164, 16, 1, 17, 164, 164, 164, 164,
15, 108, 100, 101, 108, 93, 108, 107, 108, 108,
108, 107, 99, 89, 108, 108, 91, 92, 87, 88,
87, 86, 85, 86, 86, 163, 163, 28, 29, 28,
28, 28, 28, 28, 28, 31, 30, 32, 31, 113,
109, 110, 112, 114, 141, 142, 141, 139, 138, 140,
115, 117, 115, 116, 115, 120, 120, 120, 120, 122,
124, 122, 122, 122, 122, 123, 151, 155, 151, 154,
156, 156, 152, 152, 152, 149, 150, 164, 82, 164,
21, 22, 21, 20, 157, 159, 157, 160, 161, 147,
147, 148, 147, 147, 147, 147, 147, 147, 147, 81,
34, 33, 81, 81, 81, 81, 35, 81, 81, 81,
81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
81, 81, 81, 81, 81, 81, 26, 23, 26, 24,
7, 18, 0, 16, 1, 17, 0, 0, 0, 14,
8, 0, 0, 0, 0, 4, 5, 0, 2, 15,
100, 101, 0, 0, 0, 95, 0, 0, 105, 105,
0, 162, 162, 162, 94, 0, 99, 89, 0, 0,
0, 91, 92, 104, 90, 0, 87, 88, 86, 85,
85, 83, 84, 163, 163, 28, 29, 28, 28, 28,
28, 31, 30, 32, 111, 112, 142, 138, 117, 0,
118, 119, 124, 121, 151, 155, 0, 153, 0, 144,
152, 152, 152, 0, 82, 0, 21, 22, 21, 19,
157, 159, 158, 147, 147, 147, 148, 143, 147, 147,
147, 34, 33, 0, 80, 0, 0, 81, 81, 81,
81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
81, 81, 81, 36, 81, 81, 81, 81, 81, 81,
81, 81, 81, 81, 0, 25, 24, 0, 14, 8,
0, 12, 0, 0, 0, 0, 0, 4, 5, 0,
6, 0, 96, 0, 97, 0, 0, 105, 105, 0,
105, 105, 105, 162, 162, 0, 106, 90, 98, 0,
104, 0, 83, 84, 28, 28, 28, 27, 28, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 152, 152, 143, 143, 147, 147, 0, 0, 81,
81, 81, 81, 81, 44, 81, 81, 81, 49, 81,
81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
81, 81, 81, 81, 81, 81, 81, 81, 0, 81,
81, 81, 81, 0, 0, 0, 12, 0, 0, 0,
0, 0, 0, 4, 5, 0, 105, 105, 105, 105,
105, 105, 162, 0, 0, 28, 28, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
152, 152, 147, 147, 37, 38, 81, 81, 81, 81,
81, 81, 81, 81, 50, 51, 81, 81, 81, 55,
81, 81, 81, 81, 81, 81, 60, 81, 81, 81,
81, 81, 81, 67, 0, 0, 0, 81, 81, 81,
81, 0, 13, 0, 0, 0, 0, 0, 0, 105,
105, 105, 105, 105, 105, 0, 0, 28, 28, 137,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 152, 152, 147, 147, 39, 81, 41, 81,
43, 81, 81, 81, 47, 81, 52, 81, 81, 81,
81, 81, 81, 81, 81, 81, 62, 81, 81, 65,
81, 0, 0, 0, 0, 81, 81, 81, 81, 3,
0, 0, 0, 0, 105, 105, 105, 0, 0, 28,
28, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 145, 146, 145, 146, 81, 42, 81,
81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
81, 78, 61, 81, 64, 81, 0, 0, 0, 0,
81, 81, 69, 70, 0, 10, 0, 11, 0, 103,
0, 102, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 81, 81, 81, 45, 81, 48,
81, 81, 81, 81, 77, 81, 59, 63, 66, 0,
0, 0, 0, 79, 81, 0, 102, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 81,
81, 81, 46, 81, 81, 56, 81, 81, 0, 0,
0, 0, 68, 0, 9, 0, 125, 126, 127, 128,
129, 130, 131, 132, 133, 134, 135, 0, 81, 81,
81, 81, 81, 81, 81, 0, 0, 0, 0, 0,
136, 81, 81, 81, 81, 54, 81, 81, 0, 0,
0, 0, 0, 0, 81, 81, 81, 53, 81, 58,
0, 0, 0, 0, 0, 0, 81, 81, 81, 81,
72, 0, 0, 0, 0, 73, 81, 81, 81, 81,
71, 0, 75, 0, 81, 81, 81, 74, 76, 81,
81, 81, 81, 81, 81, 57, 40, 0
} ;
static const int yy_ec[256] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 2, 1, 5, 6, 7, 8, 1, 9, 10,
10, 11, 12, 13, 14, 10, 15, 16, 16, 16,
16, 16, 16, 16, 17, 18, 16, 19, 1, 20,
21, 22, 10, 1, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
46, 47, 48, 49, 50, 51, 52, 53, 54, 46,
25, 26, 27, 28, 29, 1, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
54, 46, 55, 56, 57, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 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 const int yy_meta[58] =
{ 0,
1, 1, 2, 1, 3, 1, 1, 1, 4, 1,
5, 6, 1, 7, 4, 8, 8, 8, 1, 1,
1, 1, 9, 10, 1, 11, 12, 1, 13, 14,
14, 14, 14, 14, 14, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 4, 1, 16
} ;
static const short int yy_base[857] =
{ 0,
0, 57, 113, 169, 118, 127, 2676, 2675, 226, 2669,
138, 141, 283, 0, 2648, 2647, 133, 144, 149, 160,
179, 184, 188, 338, 365, 0, 123, 152, 155, 195,
420, 423, 449, 0, 506, 0, 340, 343, 2674, 2680,
214, 2680, 2670, 0, 217, 2680, 2669, 181, 556, 2660,
0, 2680, 563, 2680, 2667, 2680, 347, 2680, 2649, 328,
552, 413, 574, 2680, 2665, 565, 2647, 2680, 0, 2680,
2663, 0, 2663, 2661, 77, 2660, 2680, 0, 2680, 2659,
2680, 0, 2627, 2606, 2602, 0, 2656, 2680, 2654, 2680,
2680, 2628, 0, 2680, 2680, 2680, 2652, 2680, 416, 2680,
2680, 2680, 2651, 2680, 563, 2680, 2634, 575, 421, 2680,
2680, 2649, 0, 2632, 590, 2680, 0, 2680, 2647, 2680,
586, 2638, 0, 2614, 2593, 2680, 2680, 433, 2680, 435,
437, 2680, 439, 2631, 0, 2680, 2642, 2680, 0, 0,
613, 2680, 2641, 2586, 2680, 2631, 0, 2607, 2586, 2680,
2637, 2680, 2635, 2632, 2605, 2604, 2680, 576, 2604, 155,
2599, 2600, 158, 0, 2588, 2596, 166, 159, 2579, 540,
2594, 2578, 2583, 2591, 2594, 2569, 2680, 2680, 2617, 608,
629, 2680, 2618, 0, 632, 2680, 2617, 573, 2581, 0,
0, 635, 638, 642, 645, 0, 0, 441, 2680, 0,
662, 2680, 2615, 2562, 594, 2680, 2613, 2581, 642, 650,
655, 2680, 661, 0, 2680, 2557, 682, 2680, 2610, 2557,
2600, 2590, 2680, 0, 2680, 2575, 0, 2680, 0, 0,
2606, 0, 0, 2604, 2680, 0, 2680, 0, 2567, 2563,
738, 0, 2602, 2680, 2680, 0, 2680, 675, 2680, 766,
2680, 2680, 2680, 2680, 0, 2680, 601, 2680, 0, 2680,
0, 2564, 2560, 677, 2680, 691, 695, 2680, 697, 2680,
0, 2680, 2680, 0, 701, 2544, 2680, 819, 0, 2561,
2557, 2596, 2680, 2592, 2680, 2558, 2557, 0, 636, 2547,
664, 2581, 2544, 587, 2543, 2542, 2548, 662, 2535, 2549,
2537, 0, 2534, 2680, 2535, 2536, 2544, 2547, 675, 314,
2535, 2532, 2531, 683, 2572, 2680, 703, 2533, 0, 0,
875, 2680, 2572, 878, 2527, 2524, 2534, 0, 0, 713,
2680, 719, 2680, 723, 2680, 725, 2527, 705, 784, 870,
923, 882, 965, 716, 0, 2513, 2680, 2680, 2680, 2535,
0, 2524, 0, 0, 2533, 2522, 0, 2680, 0, 1000,
2546, 781, 864, 866, 865, 566, 870, 871, 638, 966,
782, 2530, 2519, 0, 1057, 2528, 2517, 2511, 2510, 2522,
2527, 2526, 2515, 2522, 0, 2519, 2502, 2521, 0, 2501,
2508, 2498, 2513, 2532, 2502, 2514, 2509, 2507, 2506, 2497,
2504, 2505, 2503, 2504, 768, 2485, 2503, 2490, 867, 2491,
2493, 2486, 2482, 2494, 733, 1027, 2680, 801, 1030, 990,
2497, 2488, 2482, 0, 0, 2489, 1092, 1024, 1131, 2504,
1070, 1151, 2680, 2478, 2486, 2488, 2472, 0, 2491, 1049,
553, 901, 883, 887, 159, 965, 1017, 892, 1035, 1062,
2485, 2469, 2483, 2467, 2680, 2680, 2470, 2458, 2457, 2460,
2472, 1076, 2472, 2457, 0, 0, 2457, 2458, 2472, 0,
2489, 2455, 2463, 2486, 2450, 2460, 0, 2465, 2456, 2452,
2444, 2444, 2448, 0, 860, 2459, 2446, 2459, 2445, 2440,
2456, 2483, 2680, 814, 1035, 2430, 2439, 2433, 2459, 2461,
1081, 1171, 1026, 961, 998, 2444, 2456, 2428, 2442, 2680,
1070, 1072, 1132, 1074, 1133, 1131, 1084, 1134, 894, 1138,
1085, 1136, 2426, 2440, 2424, 2438, 0, 2423, 0, 2425,
0, 1142, 2419, 2434, 0, 2426, 0, 2436, 2421, 2430,
2403, 2370, 2363, 2370, 2350, 2353, 0, 2363, 2345, 0,
2336, 2302, 2298, 2308, 2292, 2254, 2252, 2236, 2221, 2263,
1098, 2221, 2227, 2222, 1133, 1153, 1166, 2217, 2216, 0,
0, 1154, 1178, 610, 1174, 1176, 1179, 1180, 1181, 1188,
1190, 1191, 1193, 0, 0, 0, 0, 2218, 0, 2188,
2196, 2186, 2178, 2173, 2187, 2170, 2172, 2165, 2156, 2132,
2118, 0, 0, 2097, 0, 2108, 2112, 2099, 2092, 2105,
2082, 2086, 0, 0, 1210, 2680, 1214, 2680, 2081, 2680,
2100, 2680, 2102, 2083, 2078, 2077, 2071, 2070, 2069, 2066,
2065, 2061, 2058, 1192, 2007, 1981, 1970, 0, 1949, 0,
1932, 1920, 1911, 1915, 0, 1907, 0, 0, 0, 1903,
1921, 1920, 1894, 0, 1888, 1216, 2680, 1868, 1867, 1861,
1860, 1843, 1827, 1811, 1807, 1806, 1805, 1802, 1793, 1764,
1772, 1752, 0, 1761, 1768, 0, 1746, 1750, 1741, 1739,
1191, 1722, 0, 1225, 2680, 1229, 2680, 2680, 2680, 2680,
2680, 2680, 2680, 2680, 2680, 2680, 2680, 1737, 1707, 1712,
1704, 1667, 1668, 1664, 1647, 1663, 1639, 1186, 1638, 1656,
2680, 1646, 1622, 1605, 1615, 0, 1601, 1580, 1575, 1593,
1582, 1567, 1568, 1563, 1564, 1569, 1566, 0, 1542, 0,
1522, 1491, 1500, 1500, 1478, 1466, 1465, 1445, 1420, 1438,
2680, 1192, 1189, 1173, 1113, 2680, 1078, 1070, 1071, 986,
2680, 942, 2680, 865, 764, 757, 668, 2680, 2680, 666,
413, 311, 304, 189, 85, 0, 0, 2680, 1241, 1257,
1273, 1289, 1305, 1321, 1337, 1353, 1369, 1385, 1401, 1417,
1433, 1449, 1459, 1474, 1483, 1498, 1514, 1523, 1538, 1554,
1570, 1586, 1602, 1612, 1627, 1637, 1652, 1668, 1684, 1696,
1706, 1721, 1737, 1753, 1769, 1785, 1795, 1810, 1821, 1220,
1836, 1852, 1868, 1876, 1883, 1898, 1914, 1930, 1939, 1947,
1963, 1979, 1995, 2011, 2027, 2043, 2059, 2075, 2085, 2100,
2110, 2117, 2132, 2144, 2154, 2169, 2185, 2201, 2217, 2227,
2242, 2253, 2268, 2284, 2300, 2316, 2326, 2335, 2350, 2366,
2382, 2391, 2399, 2415, 2431, 2447
} ;
static const short int yy_def[857] =
{ 0,
768, 768, 769, 769, 770, 771, 772, 772, 768, 9,
773, 773, 768, 13, 774, 774, 775, 775, 776, 776,
777, 777, 778, 778, 768, 25, 779, 779, 780, 780,
781, 781, 768, 33, 768, 35, 782, 782, 768, 768,
768, 768, 768, 783, 768, 768, 768, 768, 784, 768,
785, 768, 768, 768, 768, 768, 768, 768, 768, 786,
787, 788, 768, 768, 768, 768, 768, 768, 789, 768,
789, 790, 791, 790, 790, 792, 768, 793, 768, 793,
768, 794, 794, 794, 793, 795, 768, 768, 795, 768,
768, 768, 796, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 787, 768, 768, 787, 797, 768,
768, 768, 798, 768, 787, 768, 799, 768, 799, 768,
800, 768, 801, 801, 801, 768, 768, 802, 768, 802,
803, 768, 803, 768, 804, 768, 804, 768, 805, 806,
806, 768, 806, 806, 768, 806, 807, 807, 807, 768,
768, 768, 768, 808, 768, 768, 768, 809, 809, 809,
809, 809, 809, 809, 809, 809, 809, 810, 809, 809,
809, 809, 809, 809, 809, 809, 768, 768, 811, 768,
768, 768, 768, 783, 768, 768, 768, 768, 768, 812,
813, 768, 768, 768, 768, 814, 815, 816, 768, 785,
768, 768, 768, 768, 817, 768, 768, 768, 818, 818,
786, 768, 768, 819, 768, 820, 768, 768, 768, 768,
768, 768, 768, 821, 768, 768, 822, 768, 823, 824,
824, 825, 826, 827, 768, 828, 768, 829, 829, 829,
768, 830, 768, 768, 768, 831, 768, 768, 768, 832,
768, 768, 768, 768, 833, 768, 834, 768, 834, 768,
835, 835, 835, 836, 768, 836, 837, 768, 837, 768,
838, 768, 768, 839, 839, 839, 768, 768, 840, 840,
840, 768, 768, 841, 768, 768, 768, 842, 842, 842,
842, 842, 842, 842, 842, 842, 842, 842, 842, 842,
842, 842, 842, 768, 842, 842, 842, 842, 842, 842,
842, 842, 842, 842, 843, 768, 768, 768, 844, 845,
846, 768, 768, 768, 768, 768, 768, 847, 848, 849,
768, 849, 768, 850, 768, 850, 768, 851, 851, 851,
768, 851, 851, 768, 852, 853, 768, 768, 768, 768,
854, 768, 825, 826, 829, 829, 241, 768, 241, 241,
832, 832, 832, 832, 832, 832, 832, 832, 832, 832,
832, 835, 835, 278, 278, 840, 840, 768, 768, 842,
842, 842, 842, 842, 842, 842, 842, 842, 842, 842,
842, 842, 842, 842, 842, 842, 842, 842, 842, 842,
842, 842, 842, 842, 842, 842, 842, 842, 768, 842,
842, 842, 842, 768, 846, 846, 768, 846, 846, 768,
768, 768, 768, 847, 848, 768, 341, 851, 343, 341,
851, 343, 768, 768, 768, 829, 829, 360, 768, 832,
832, 832, 832, 832, 832, 832, 832, 832, 832, 832,
835, 835, 840, 840, 768, 768, 842, 842, 842, 842,
842, 842, 842, 842, 842, 842, 842, 842, 842, 842,
842, 842, 842, 842, 842, 842, 842, 842, 842, 842,
842, 842, 842, 842, 768, 768, 768, 842, 842, 842,
842, 768, 768, 846, 846, 768, 768, 768, 768, 427,
851, 343, 851, 851, 851, 768, 768, 829, 829, 768,
832, 832, 832, 832, 832, 832, 832, 832, 832, 832,
832, 832, 835, 835, 840, 840, 842, 842, 842, 842,
842, 842, 842, 842, 842, 842, 842, 842, 842, 842,
842, 842, 842, 842, 842, 842, 842, 842, 842, 842,
842, 768, 768, 768, 768, 842, 842, 842, 842, 768,
855, 768, 768, 768, 851, 851, 851, 768, 768, 829,
829, 832, 832, 832, 832, 832, 832, 832, 832, 832,
832, 832, 832, 835, 835, 840, 840, 842, 842, 842,
842, 842, 842, 842, 842, 842, 842, 842, 842, 842,
842, 842, 842, 842, 842, 842, 768, 768, 768, 768,
842, 842, 842, 842, 855, 768, 855, 768, 768, 768,
768, 768, 832, 832, 832, 832, 832, 832, 832, 832,
832, 832, 832, 832, 842, 842, 842, 842, 842, 842,
842, 842, 842, 842, 842, 842, 842, 842, 842, 768,
768, 768, 768, 842, 842, 856, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 832, 842,
842, 842, 842, 842, 842, 842, 842, 842, 768, 768,
768, 768, 842, 856, 768, 856, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 842, 842,
842, 842, 842, 842, 842, 768, 768, 768, 768, 768,
768, 842, 842, 842, 842, 842, 842, 842, 768, 768,
768, 768, 768, 768, 842, 842, 842, 842, 842, 842,
768, 768, 768, 768, 768, 768, 842, 842, 842, 842,
768, 768, 768, 768, 768, 768, 842, 842, 842, 842,
768, 768, 768, 768, 842, 842, 842, 768, 768, 842,
842, 842, 842, 842, 842, 842, 842, 0, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768
} ;
static const short int yy_nxt[2738] =
{ 0,
40, 41, 42, 43, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 44, 44, 40, 40, 40, 40, 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, 40, 40, 40, 40, 45, 46,
47, 40, 48, 40, 49, 40, 40, 40, 40, 40,
40, 50, 40, 40, 40, 40, 40, 40, 40, 51,
51, 40, 40, 40, 40, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
51, 40, 40, 40, 53, 54, 55, 56, 767, 57,
70, 71, 58, 58, 58, 129, 130, 58, 73, 70,
74, 232, 59, 233, 75, 96, 97, 60, 61, 87,
88, 89, 87, 88, 89, 98, 96, 97, 99, 99,
99, 102, 103, 104, 129, 130, 98, 132, 133, 99,
99, 99, 102, 103, 104, 134, 292, 62, 58, 58,
63, 64, 65, 56, 105, 57, 66, 439, 58, 58,
58, 40, 188, 58, 293, 105, 40, 296, 67, 100,
111, 112, 303, 60, 61, 300, 68, 132, 133, 301,
100, 113, 304, 107, 108, 134, 109, 297, 107, 108,
517, 109, 114, 115, 116, 181, 182, 183, 185, 186,
187, 189, 766, 62, 58, 58, 78, 78, 79, 80,
78, 78, 78, 78, 78, 78, 81, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78, 82, 82,
78, 78, 78, 78, 82, 82, 82, 82, 82, 82,
82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
82, 82, 83, 82, 82, 82, 82, 82, 82, 84,
78, 78, 78, 90, 90, 40, 90, 90, 90, 90,
90, 90, 90, 91, 90, 91, 90, 90, 90, 90,
90, 90, 90, 90, 92, 93, 93, 90, 90, 90,
90, 93, 93, 93, 93, 93, 93, 93, 93, 93,
93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
93, 93, 93, 93, 93, 93, 93, 90, 90, 90,
111, 112, 178, 404, 179, 178, 405, 179, 206, 206,
207, 113, 210, 211, 765, 180, 180, 180, 180, 180,
180, 764, 114, 115, 116, 117, 117, 118, 119, 120,
117, 117, 117, 121, 117, 117, 117, 117, 117, 122,
117, 117, 117, 117, 117, 117, 117, 123, 123, 117,
117, 117, 117, 123, 123, 123, 123, 123, 123, 123,
123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
123, 124, 123, 123, 123, 123, 123, 123, 125, 126,
117, 127, 136, 137, 138, 136, 137, 138, 215, 215,
215, 248, 248, 248, 252, 265, 266, 265, 266, 268,
269, 268, 269, 331, 332, 139, 673, 252, 139, 140,
141, 142, 143, 140, 140, 140, 144, 140, 140, 145,
140, 140, 140, 146, 140, 140, 140, 140, 140, 140,
140, 147, 147, 140, 140, 140, 140, 147, 147, 147,
147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
147, 147, 147, 147, 147, 148, 147, 147, 147, 147,
147, 147, 149, 140, 140, 140, 150, 151, 152, 153,
154, 150, 150, 150, 150, 150, 150, 150, 150, 150,
150, 150, 155, 156, 150, 150, 157, 150, 150, 150,
150, 150, 150, 150, 150, 158, 159, 160, 161, 162,
163, 164, 164, 165, 164, 164, 166, 167, 168, 169,
170, 164, 171, 172, 164, 173, 174, 175, 164, 176,
150, 150, 150, 191, 201, 202, 203, 213, 213, 213,
204, 439, 224, 306, 188, 217, 218, 219, 213, 213,
213, 220, 513, 307, 439, 192, 308, 193, 221, 193,
213, 213, 213, 222, 258, 193, 335, 336, 193, 194,
195, 223, 193, 196, 214, 213, 213, 213, 197, 258,
198, 259, 444, 189, 275, 214, 289, 387, 205, 225,
276, 388, 290, 317, 317, 317, 259, 214, 439, 205,
181, 182, 183, 185, 186, 187, 321, 322, 323, 321,
322, 323, 214, 321, 322, 323, 321, 322, 323, 625,
324, 324, 324, 324, 324, 324, 439, 324, 324, 324,
324, 324, 324, 201, 202, 203, 339, 340, 341, 204,
342, 342, 342, 380, 339, 340, 344, 344, 344, 265,
266, 325, 448, 217, 218, 219, 326, 381, 327, 220,
248, 248, 248, 265, 266, 383, 221, 268, 269, 268,
269, 222, 275, 763, 402, 762, 392, 343, 276, 223,
393, 409, 384, 403, 410, 331, 332, 205, 317, 317,
317, 331, 332, 411, 412, 335, 336, 335, 336, 339,
340, 212, 212, 212, 413, 493, 494, 205, 357, 357,
358, 359, 357, 357, 357, 357, 357, 357, 360, 357,
357, 357, 357, 357, 357, 357, 357, 357, 357, 357,
360, 360, 357, 357, 357, 357, 360, 360, 360, 360,
360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
360, 360, 357, 357, 357, 362, 363, 364, 365, 439,
439, 366, 427, 417, 494, 480, 367, 761, 339, 340,
368, 481, 760, 369, 450, 370, 493, 494, 371, 374,
374, 440, 374, 374, 374, 374, 374, 374, 374, 375,
374, 374, 374, 374, 374, 374, 374, 374, 374, 374,
374, 375, 375, 374, 374, 374, 374, 375, 375, 375,
375, 375, 375, 375, 375, 375, 375, 375, 375, 375,
375, 375, 375, 375, 375, 375, 375, 375, 375, 375,
375, 375, 375, 374, 374, 374, 416, 417, 418, 420,
322, 323, 439, 439, 439, 428, 428, 428, 439, 439,
419, 419, 419, 324, 324, 324, 338, 431, 431, 431,
759, 439, 443, 552, 441, 439, 339, 340, 442, 553,
439, 485, 439, 445, 486, 487, 516, 446, 515, 439,
447, 520, 429, 338, 338, 580, 338, 338, 338, 338,
338, 338, 338, 338, 338, 338, 338, 338, 338, 338,
338, 338, 338, 338, 338, 430, 430, 339, 340, 514,
338, 338, 430, 430, 430, 430, 430, 430, 430, 430,
430, 430, 430, 430, 430, 430, 430, 430, 430, 430,
430, 430, 430, 430, 430, 430, 430, 338, 338, 338,
432, 432, 432, 439, 439, 339, 340, 432, 758, 339,
340, 420, 322, 323, 432, 432, 432, 432, 432, 432,
360, 360, 518, 438, 360, 360, 360, 360, 360, 360,
449, 360, 360, 360, 360, 360, 360, 360, 360, 360,
360, 360, 339, 340, 360, 360, 360, 360, 416, 417,
418, 495, 417, 418, 757, 439, 495, 417, 418, 501,
501, 501, 419, 419, 419, 419, 419, 419, 339, 340,
339, 340, 209, 439, 360, 360, 360, 375, 375, 519,
375, 375, 375, 375, 375, 375, 375, 439, 375, 375,
375, 375, 375, 375, 375, 375, 375, 375, 375, 521,
439, 375, 375, 375, 375, 504, 504, 504, 439, 532,
439, 511, 439, 512, 339, 340, 566, 566, 566, 522,
616, 617, 439, 439, 638, 339, 340, 756, 573, 755,
533, 375, 375, 375, 500, 500, 534, 578, 582, 572,
575, 500, 500, 500, 500, 500, 500, 500, 500, 500,
500, 500, 500, 500, 500, 500, 500, 500, 500, 500,
500, 500, 500, 500, 500, 500, 502, 502, 502, 439,
439, 439, 439, 502, 439, 754, 439, 339, 340, 338,
502, 502, 502, 502, 502, 502, 505, 505, 505, 581,
576, 583, 439, 505, 574, 577, 579, 339, 340, 590,
505, 505, 505, 505, 505, 505, 567, 567, 567, 591,
339, 340, 439, 567, 439, 623, 439, 439, 439, 439,
567, 567, 567, 567, 567, 567, 439, 624, 439, 439,
439, 439, 616, 617, 626, 628, 616, 617, 685, 686,
753, 708, 752, 632, 627, 751, 629, 685, 686, 630,
634, 685, 686, 302, 302, 721, 631, 633, 709, 722,
669, 52, 52, 52, 52, 52, 52, 52, 52, 52,
52, 52, 52, 52, 52, 52, 52, 69, 69, 69,
69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
69, 69, 69, 72, 72, 72, 72, 72, 72, 72,
72, 72, 72, 72, 72, 72, 72, 72, 72, 76,
76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
76, 76, 76, 76, 76, 86, 86, 86, 86, 86,
86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
86, 40, 40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 95, 95, 95,
95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
95, 95, 95, 101, 101, 101, 101, 101, 101, 101,
101, 101, 101, 101, 101, 101, 101, 101, 101, 106,
106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
106, 106, 106, 106, 106, 110, 110, 110, 110, 110,
110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
110, 128, 128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 131, 131, 131,
131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
131, 131, 131, 135, 135, 135, 135, 135, 135, 135,
135, 135, 135, 135, 135, 135, 135, 135, 135, 177,
177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
177, 177, 177, 177, 177, 184, 184, 184, 184, 750,
749, 184, 184, 184, 190, 190, 190, 190, 190, 190,
190, 190, 190, 190, 190, 190, 190, 190, 190, 200,
200, 200, 200, 748, 747, 200, 200, 200, 209, 746,
209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
209, 209, 209, 209, 212, 745, 212, 212, 212, 212,
212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
216, 216, 216, 744, 743, 216, 216, 216, 227, 742,
227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
227, 227, 227, 227, 229, 741, 229, 229, 229, 229,
229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
230, 740, 230, 230, 230, 230, 230, 230, 230, 230,
230, 230, 230, 230, 230, 230, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 236, 739, 236, 236, 738, 236, 236, 236,
737, 736, 236, 236, 735, 734, 733, 236, 238, 238,
238, 238, 732, 731, 238, 238, 238, 242, 730, 242,
242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
242, 242, 242, 246, 246, 246, 246, 729, 728, 246,
246, 246, 251, 727, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 254, 726,
254, 254, 254, 254, 254, 254, 254, 254, 254, 725,
254, 254, 254, 254, 255, 724, 723, 720, 255, 255,
255, 255, 719, 718, 255, 255, 257, 717, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 261, 261, 261, 261, 716, 715, 261, 261,
261, 264, 264, 264, 264, 264, 264, 264, 264, 264,
264, 264, 264, 264, 264, 264, 264, 267, 267, 267,
267, 714, 267, 267, 267, 267, 267, 267, 267, 267,
267, 267, 267, 271, 713, 712, 271, 271, 271, 271,
271, 271, 271, 711, 271, 271, 271, 271, 271, 273,
710, 273, 273, 273, 273, 273, 273, 273, 273, 273,
273, 273, 273, 273, 273, 274, 707, 274, 274, 706,
274, 274, 274, 705, 704, 274, 274, 703, 702, 701,
274, 279, 279, 279, 279, 700, 699, 279, 279, 279,
284, 698, 284, 284, 284, 284, 284, 284, 284, 284,
284, 284, 284, 284, 284, 284, 288, 288, 697, 288,
288, 696, 695, 694, 288, 288, 315, 693, 315, 315,
315, 315, 315, 315, 315, 315, 315, 315, 315, 315,
315, 315, 319, 692, 319, 319, 319, 319, 319, 319,
319, 319, 319, 319, 319, 319, 319, 319, 320, 691,
320, 320, 320, 320, 320, 320, 320, 320, 320, 320,
320, 320, 320, 320, 328, 328, 690, 689, 328, 328,
328, 329, 329, 688, 687, 329, 329, 329, 330, 330,
330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
330, 330, 330, 330, 334, 334, 334, 334, 334, 334,
334, 334, 334, 334, 334, 334, 334, 334, 334, 334,
338, 683, 338, 338, 338, 338, 338, 338, 338, 338,
338, 682, 338, 338, 338, 338, 345, 345, 681, 680,
679, 678, 345, 346, 346, 346, 346, 677, 676, 346,
346, 346, 346, 351, 675, 351, 351, 351, 351, 351,
351, 351, 351, 351, 351, 351, 351, 351, 351, 227,
674, 227, 227, 227, 227, 227, 227, 227, 227, 227,
227, 227, 227, 227, 227, 229, 673, 229, 229, 229,
229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
229, 230, 672, 230, 230, 230, 230, 230, 230, 230,
230, 230, 230, 230, 230, 230, 230, 353, 671, 353,
353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
353, 353, 353, 354, 670, 354, 354, 354, 354, 354,
354, 354, 354, 354, 354, 354, 354, 354, 354, 234,
234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 236, 668, 236, 236, 667,
236, 236, 236, 666, 665, 236, 236, 664, 663, 662,
236, 238, 238, 238, 238, 661, 660, 238, 238, 238,
242, 659, 242, 242, 242, 242, 242, 242, 242, 242,
242, 242, 242, 242, 242, 242, 246, 246, 246, 246,
658, 657, 246, 246, 246, 361, 361, 656, 655, 654,
361, 361, 255, 653, 652, 651, 255, 255, 255, 255,
650, 649, 255, 255, 257, 648, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
261, 261, 261, 261, 647, 646, 261, 261, 261, 264,
264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
264, 264, 264, 264, 264, 267, 267, 267, 267, 645,
267, 267, 267, 267, 267, 267, 267, 267, 267, 267,
267, 271, 644, 643, 271, 271, 271, 271, 271, 271,
271, 642, 271, 271, 271, 271, 271, 274, 641, 274,
274, 640, 274, 274, 274, 639, 638, 274, 274, 637,
636, 635, 274, 279, 279, 279, 279, 622, 621, 279,
279, 279, 284, 620, 284, 284, 284, 284, 284, 284,
284, 284, 284, 284, 284, 284, 284, 284, 288, 288,
619, 288, 288, 618, 560, 614, 288, 288, 315, 613,
315, 315, 315, 315, 315, 315, 315, 315, 315, 315,
315, 315, 315, 315, 319, 612, 319, 319, 319, 319,
319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
320, 611, 320, 320, 320, 320, 320, 320, 320, 320,
320, 320, 320, 320, 320, 320, 415, 415, 415, 415,
415, 415, 415, 415, 415, 415, 415, 415, 415, 415,
415, 415, 424, 424, 424, 424, 610, 609, 424, 424,
424, 425, 425, 425, 425, 608, 607, 425, 425, 425,
330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
330, 330, 330, 330, 330, 330, 334, 334, 334, 334,
334, 334, 334, 334, 334, 334, 334, 334, 334, 334,
334, 334, 338, 606, 338, 338, 338, 338, 338, 338,
338, 338, 338, 605, 338, 338, 338, 338, 433, 433,
604, 603, 602, 601, 433, 346, 346, 346, 346, 600,
599, 346, 346, 346, 346, 351, 598, 351, 351, 351,
351, 351, 351, 351, 351, 351, 351, 351, 351, 351,
351, 615, 615, 615, 615, 615, 615, 615, 615, 615,
615, 615, 615, 615, 615, 615, 615, 684, 684, 684,
684, 684, 684, 684, 684, 684, 684, 684, 684, 684,
684, 684, 684, 597, 596, 595, 594, 593, 592, 589,
588, 587, 586, 585, 584, 571, 570, 569, 568, 565,
564, 563, 562, 561, 560, 559, 558, 557, 556, 555,
554, 551, 550, 549, 548, 547, 546, 545, 544, 543,
542, 541, 540, 539, 538, 537, 536, 535, 531, 530,
529, 528, 527, 526, 525, 524, 523, 510, 509, 508,
507, 506, 503, 499, 498, 497, 496, 492, 491, 490,
489, 488, 484, 483, 482, 479, 478, 477, 476, 475,
474, 473, 472, 471, 470, 469, 468, 467, 466, 465,
464, 463, 462, 461, 460, 459, 458, 457, 456, 455,
454, 453, 452, 451, 439, 437, 436, 435, 434, 347,
426, 423, 422, 421, 322, 414, 316, 408, 407, 406,
401, 400, 399, 398, 397, 396, 395, 394, 391, 390,
389, 386, 385, 382, 379, 378, 285, 282, 377, 376,
278, 373, 372, 243, 356, 355, 235, 231, 352, 350,
349, 348, 218, 347, 337, 206, 333, 202, 318, 186,
182, 316, 314, 313, 312, 311, 310, 309, 305, 299,
298, 295, 294, 291, 287, 286, 285, 283, 282, 281,
280, 260, 278, 277, 272, 270, 263, 262, 260, 256,
250, 253, 250, 249, 247, 245, 244, 243, 241, 240,
239, 237, 235, 228, 231, 228, 226, 218, 208, 202,
199, 186, 182, 768, 94, 94, 85, 77, 77, 39,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768
} ;
static const short int yy_chk[2738] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 3, 3, 3, 3, 765, 3,
5, 5, 3, 3, 3, 27, 27, 3, 6, 6,
6, 75, 3, 75, 6, 17, 17, 3, 3, 11,
11, 11, 12, 12, 12, 17, 18, 18, 17, 17,
17, 19, 19, 19, 28, 28, 18, 29, 29, 18,
18, 18, 20, 20, 20, 29, 160, 3, 3, 3,
4, 4, 4, 4, 19, 4, 4, 445, 4, 4,
4, 21, 48, 4, 160, 20, 22, 163, 4, 17,
23, 23, 168, 4, 4, 167, 4, 30, 30, 167,
18, 23, 168, 21, 21, 30, 21, 163, 22, 22,
445, 22, 23, 23, 23, 41, 41, 41, 45, 45,
45, 48, 764, 4, 4, 4, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
24, 24, 37, 310, 37, 38, 310, 38, 57, 57,
57, 24, 60, 60, 763, 37, 37, 37, 38, 38,
38, 762, 24, 24, 24, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 31, 31, 31, 32, 32, 32, 62, 62,
62, 99, 99, 99, 109, 128, 128, 130, 130, 131,
131, 133, 133, 198, 198, 31, 761, 109, 32, 33,
33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
33, 33, 33, 33, 33, 33, 35, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
35, 35, 35, 49, 53, 53, 53, 61, 61, 61,
53, 441, 66, 170, 188, 63, 63, 63, 105, 105,
105, 63, 441, 170, 366, 49, 170, 49, 63, 49,
108, 108, 108, 63, 121, 49, 205, 205, 49, 49,
49, 63, 49, 49, 61, 115, 115, 115, 49, 257,
49, 121, 366, 188, 141, 105, 158, 294, 53, 66,
141, 294, 158, 180, 180, 180, 257, 108, 574, 63,
181, 181, 181, 185, 185, 185, 192, 192, 192, 193,
193, 193, 115, 194, 194, 194, 195, 195, 195, 574,
192, 192, 192, 193, 193, 193, 369, 194, 194, 194,
195, 195, 195, 201, 201, 201, 209, 209, 210, 201,
211, 211, 211, 289, 210, 210, 213, 213, 213, 264,
264, 192, 369, 217, 217, 217, 194, 289, 195, 217,
248, 248, 248, 266, 266, 291, 217, 267, 267, 269,
269, 217, 275, 760, 309, 757, 298, 211, 275, 217,
298, 314, 291, 309, 314, 330, 330, 201, 317, 317,
317, 332, 332, 314, 314, 334, 334, 336, 336, 338,
338, 344, 344, 344, 314, 415, 415, 217, 241, 241,
241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
241, 241, 241, 241, 241, 250, 250, 250, 250, 362,
371, 250, 339, 418, 418, 405, 250, 756, 339, 339,
250, 405, 755, 250, 371, 250, 494, 494, 250, 278,
278, 362, 278, 278, 278, 278, 278, 278, 278, 278,
278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
278, 278, 278, 278, 278, 278, 321, 321, 321, 324,
324, 324, 363, 365, 364, 340, 340, 340, 367, 368,
321, 321, 321, 324, 324, 324, 340, 342, 342, 342,
754, 443, 365, 485, 363, 444, 342, 342, 364, 485,
448, 409, 519, 367, 409, 409, 444, 368, 443, 442,
368, 448, 340, 341, 341, 519, 341, 341, 341, 341,
341, 341, 341, 341, 341, 341, 341, 341, 341, 341,
341, 341, 341, 341, 341, 341, 341, 341, 341, 442,
341, 341, 341, 341, 341, 341, 341, 341, 341, 341,
341, 341, 341, 341, 341, 341, 341, 341, 341, 341,
341, 341, 341, 341, 341, 341, 341, 341, 341, 341,
343, 343, 343, 446, 370, 504, 504, 343, 752, 343,
343, 420, 420, 420, 343, 343, 343, 343, 343, 343,
360, 360, 446, 360, 360, 360, 360, 360, 360, 360,
370, 360, 360, 360, 360, 360, 360, 360, 360, 360,
360, 360, 505, 505, 360, 360, 360, 360, 416, 416,
416, 419, 419, 419, 750, 447, 495, 495, 495, 428,
428, 428, 416, 416, 416, 419, 419, 419, 428, 428,
503, 503, 503, 449, 360, 360, 360, 375, 375, 447,
375, 375, 375, 375, 375, 375, 375, 440, 375, 375,
375, 375, 375, 375, 375, 375, 375, 375, 375, 449,
450, 375, 375, 375, 375, 431, 431, 431, 511, 462,
512, 440, 514, 440, 431, 431, 501, 501, 501, 450,
561, 561, 517, 521, 749, 501, 501, 748, 512, 747,
462, 375, 375, 375, 427, 427, 462, 517, 521, 511,
514, 427, 427, 427, 427, 427, 427, 427, 427, 427,
427, 427, 427, 427, 427, 427, 427, 427, 427, 427,
427, 427, 427, 427, 427, 427, 429, 429, 429, 516,
513, 515, 518, 429, 522, 745, 520, 565, 565, 565,
429, 429, 429, 429, 429, 429, 432, 432, 432, 520,
515, 522, 572, 432, 513, 516, 518, 566, 566, 532,
432, 432, 432, 432, 432, 432, 502, 502, 502, 532,
567, 567, 575, 502, 576, 572, 573, 577, 578, 579,
502, 502, 502, 502, 502, 502, 580, 573, 581, 582,
634, 583, 615, 615, 575, 577, 617, 617, 656, 656,
744, 681, 743, 581, 576, 742, 578, 684, 684, 579,
583, 686, 686, 810, 810, 708, 580, 582, 681, 708,
634, 769, 769, 769, 769, 769, 769, 769, 769, 769,
769, 769, 769, 769, 769, 769, 769, 770, 770, 770,
770, 770, 770, 770, 770, 770, 770, 770, 770, 770,
770, 770, 770, 771, 771, 771, 771, 771, 771, 771,
771, 771, 771, 771, 771, 771, 771, 771, 771, 772,
772, 772, 772, 772, 772, 772, 772, 772, 772, 772,
772, 772, 772, 772, 772, 773, 773, 773, 773, 773,
773, 773, 773, 773, 773, 773, 773, 773, 773, 773,
773, 774, 774, 774, 774, 774, 774, 774, 774, 774,
774, 774, 774, 774, 774, 774, 774, 775, 775, 775,
775, 775, 775, 775, 775, 775, 775, 775, 775, 775,
775, 775, 775, 776, 776, 776, 776, 776, 776, 776,
776, 776, 776, 776, 776, 776, 776, 776, 776, 777,
777, 777, 777, 777, 777, 777, 777, 777, 777, 777,
777, 777, 777, 777, 777, 778, 778, 778, 778, 778,
778, 778, 778, 778, 778, 778, 778, 778, 778, 778,
778, 779, 779, 779, 779, 779, 779, 779, 779, 779,
779, 779, 779, 779, 779, 779, 779, 780, 780, 780,
780, 780, 780, 780, 780, 780, 780, 780, 780, 780,
780, 780, 780, 781, 781, 781, 781, 781, 781, 781,
781, 781, 781, 781, 781, 781, 781, 781, 781, 782,
782, 782, 782, 782, 782, 782, 782, 782, 782, 782,
782, 782, 782, 782, 782, 783, 783, 783, 783, 740,
739, 783, 783, 783, 784, 784, 784, 784, 784, 784,
784, 784, 784, 784, 784, 784, 784, 784, 784, 785,
785, 785, 785, 738, 737, 785, 785, 785, 786, 736,
786, 786, 786, 786, 786, 786, 786, 786, 786, 786,
786, 786, 786, 786, 787, 735, 787, 787, 787, 787,
787, 787, 787, 787, 787, 787, 787, 787, 787, 787,
788, 788, 788, 734, 733, 788, 788, 788, 789, 732,
789, 789, 789, 789, 789, 789, 789, 789, 789, 789,
789, 789, 789, 789, 790, 731, 790, 790, 790, 790,
790, 790, 790, 790, 790, 790, 790, 790, 790, 790,
791, 729, 791, 791, 791, 791, 791, 791, 791, 791,
791, 791, 791, 791, 791, 791, 792, 792, 792, 792,
792, 792, 792, 792, 792, 792, 792, 792, 792, 792,
792, 792, 793, 727, 793, 793, 726, 793, 793, 793,
725, 724, 793, 793, 723, 722, 721, 793, 794, 794,
794, 794, 720, 719, 794, 794, 794, 795, 718, 795,
795, 795, 795, 795, 795, 795, 795, 795, 795, 795,
795, 795, 795, 796, 796, 796, 796, 717, 715, 796,
796, 796, 797, 714, 797, 797, 797, 797, 797, 797,
797, 797, 797, 797, 797, 797, 797, 797, 798, 713,
798, 798, 798, 798, 798, 798, 798, 798, 798, 712,
798, 798, 798, 798, 799, 710, 709, 707, 799, 799,
799, 799, 706, 705, 799, 799, 800, 704, 800, 800,
800, 800, 800, 800, 800, 800, 800, 800, 800, 800,
800, 800, 801, 801, 801, 801, 703, 702, 801, 801,
801, 802, 802, 802, 802, 802, 802, 802, 802, 802,
802, 802, 802, 802, 802, 802, 802, 803, 803, 803,
803, 701, 803, 803, 803, 803, 803, 803, 803, 803,
803, 803, 803, 804, 700, 699, 804, 804, 804, 804,
804, 804, 804, 698, 804, 804, 804, 804, 804, 805,
682, 805, 805, 805, 805, 805, 805, 805, 805, 805,
805, 805, 805, 805, 805, 806, 680, 806, 806, 679,
806, 806, 806, 678, 677, 806, 806, 675, 674, 672,
806, 807, 807, 807, 807, 671, 670, 807, 807, 807,
808, 669, 808, 808, 808, 808, 808, 808, 808, 808,
808, 808, 808, 808, 808, 808, 809, 809, 668, 809,
809, 667, 666, 665, 809, 809, 811, 664, 811, 811,
811, 811, 811, 811, 811, 811, 811, 811, 811, 811,
811, 811, 812, 663, 812, 812, 812, 812, 812, 812,
812, 812, 812, 812, 812, 812, 812, 812, 813, 662,
813, 813, 813, 813, 813, 813, 813, 813, 813, 813,
813, 813, 813, 813, 814, 814, 661, 660, 814, 814,
814, 815, 815, 659, 658, 815, 815, 815, 816, 816,
816, 816, 816, 816, 816, 816, 816, 816, 816, 816,
816, 816, 816, 816, 817, 817, 817, 817, 817, 817,
817, 817, 817, 817, 817, 817, 817, 817, 817, 817,
818, 655, 818, 818, 818, 818, 818, 818, 818, 818,
818, 653, 818, 818, 818, 818, 819, 819, 652, 651,
650, 646, 819, 820, 820, 820, 820, 644, 643, 820,
820, 820, 820, 821, 642, 821, 821, 821, 821, 821,
821, 821, 821, 821, 821, 821, 821, 821, 821, 822,
641, 822, 822, 822, 822, 822, 822, 822, 822, 822,
822, 822, 822, 822, 822, 823, 639, 823, 823, 823,
823, 823, 823, 823, 823, 823, 823, 823, 823, 823,
823, 824, 637, 824, 824, 824, 824, 824, 824, 824,
824, 824, 824, 824, 824, 824, 824, 825, 636, 825,
825, 825, 825, 825, 825, 825, 825, 825, 825, 825,
825, 825, 825, 826, 635, 826, 826, 826, 826, 826,
826, 826, 826, 826, 826, 826, 826, 826, 826, 827,
827, 827, 827, 827, 827, 827, 827, 827, 827, 827,
827, 827, 827, 827, 827, 828, 633, 828, 828, 632,
828, 828, 828, 631, 630, 828, 828, 629, 628, 627,
828, 829, 829, 829, 829, 626, 625, 829, 829, 829,
830, 624, 830, 830, 830, 830, 830, 830, 830, 830,
830, 830, 830, 830, 830, 830, 831, 831, 831, 831,
623, 621, 831, 831, 831, 832, 832, 619, 612, 611,
832, 832, 833, 610, 609, 608, 833, 833, 833, 833,
607, 606, 833, 833, 834, 604, 834, 834, 834, 834,
834, 834, 834, 834, 834, 834, 834, 834, 834, 834,
835, 835, 835, 835, 601, 600, 835, 835, 835, 836,
836, 836, 836, 836, 836, 836, 836, 836, 836, 836,
836, 836, 836, 836, 836, 837, 837, 837, 837, 599,
837, 837, 837, 837, 837, 837, 837, 837, 837, 837,
837, 838, 598, 597, 838, 838, 838, 838, 838, 838,
838, 596, 838, 838, 838, 838, 838, 839, 595, 839,
839, 594, 839, 839, 839, 593, 592, 839, 839, 591,
590, 588, 839, 840, 840, 840, 840, 569, 568, 840,
840, 840, 841, 564, 841, 841, 841, 841, 841, 841,
841, 841, 841, 841, 841, 841, 841, 841, 842, 842,
563, 842, 842, 562, 560, 559, 842, 842, 843, 558,
843, 843, 843, 843, 843, 843, 843, 843, 843, 843,
843, 843, 843, 843, 844, 557, 844, 844, 844, 844,
844, 844, 844, 844, 844, 844, 844, 844, 844, 844,
845, 556, 845, 845, 845, 845, 845, 845, 845, 845,
845, 845, 845, 845, 845, 845, 846, 846, 846, 846,
846, 846, 846, 846, 846, 846, 846, 846, 846, 846,
846, 846, 847, 847, 847, 847, 555, 554, 847, 847,
847, 848, 848, 848, 848, 553, 552, 848, 848, 848,
849, 849, 849, 849, 849, 849, 849, 849, 849, 849,
849, 849, 849, 849, 849, 849, 850, 850, 850, 850,
850, 850, 850, 850, 850, 850, 850, 850, 850, 850,
850, 850, 851, 551, 851, 851, 851, 851, 851, 851,
851, 851, 851, 549, 851, 851, 851, 851, 852, 852,
548, 546, 545, 544, 852, 853, 853, 853, 853, 543,
542, 853, 853, 853, 853, 854, 541, 854, 854, 854,
854, 854, 854, 854, 854, 854, 854, 854, 854, 854,
854, 855, 855, 855, 855, 855, 855, 855, 855, 855,
855, 855, 855, 855, 855, 855, 855, 856, 856, 856,
856, 856, 856, 856, 856, 856, 856, 856, 856, 856,
856, 856, 856, 540, 539, 538, 536, 534, 533, 530,
528, 526, 525, 524, 523, 509, 508, 507, 506, 500,
499, 498, 497, 496, 492, 491, 490, 489, 488, 487,
486, 483, 482, 481, 480, 479, 478, 476, 475, 474,
473, 472, 471, 469, 468, 467, 464, 463, 461, 460,
459, 458, 457, 454, 453, 452, 451, 439, 437, 436,
435, 434, 430, 426, 423, 422, 421, 414, 413, 412,
411, 410, 408, 407, 406, 404, 403, 402, 401, 400,
399, 398, 397, 396, 395, 394, 393, 392, 391, 390,
388, 387, 386, 384, 383, 382, 381, 380, 379, 378,
377, 376, 373, 372, 361, 356, 355, 352, 350, 346,
337, 327, 326, 325, 323, 318, 315, 313, 312, 311,
308, 307, 306, 305, 303, 301, 300, 299, 297, 296,
295, 293, 292, 290, 287, 286, 284, 282, 281, 280,
276, 263, 262, 243, 240, 239, 234, 231, 226, 222,
221, 220, 219, 216, 208, 207, 204, 203, 189, 187,
183, 179, 176, 175, 174, 173, 172, 171, 169, 166,
165, 162, 161, 159, 156, 155, 154, 153, 151, 149,
148, 146, 144, 143, 137, 134, 125, 124, 122, 119,
114, 112, 107, 103, 97, 92, 89, 87, 85, 84,
83, 80, 76, 74, 73, 71, 67, 65, 59, 55,
50, 47, 43, 39, 16, 15, 10, 8, 7, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
768, 768, 768, 768, 768, 768, 768
} ;
static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;
char *yytext;
static int yy_start_stack_ptr = 0;
static int yy_start_stack_depth = 0;
static int *yy_start_stack = 0;
static void yy_push_state ( int new_state );
static void yy_pop_state ( void );
int flexscan()
{
register yy_state_type yy_current_state;
register char *yy_cp, *yy_bp;
register int yy_act;
static int bracelevel, didadef, indented_code;
static int doing_rule_action = 0;
static int option_sense;
int doing_codeblock = 0;
int i;
unsigned char nmdef[2048], myesc();
if ( yy_init )
{
yy_init = 0;
if ( ! yy_start )
yy_start = 1;
if ( ! yyin )
yyin = stdin;
if ( ! yyout )
yyout = stdout;
if ( ! yy_current_buffer )
yy_current_buffer =
yy_create_buffer( yyin, 16384 );
yy_load_buffer_state();
}
while ( 1 )
{
yy_cp = yy_c_buf_p;
*yy_cp = yy_hold_char;
yy_bp = yy_cp;
yy_current_state = yy_start;
yy_current_state += (yy_current_buffer->yy_at_bol);
yy_match:
do
{
register YY_CHAR yy_c = yy_ec[((unsigned int) (unsigned char) *yy_cp)];
if ( yy_accept[yy_current_state] )
{
yy_last_accepting_state = yy_current_state;
yy_last_accepting_cpos = yy_cp;
}
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 769 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
while ( yy_base[yy_current_state] != 2680 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
if ( yy_act == 0 )
{
yy_cp = yy_last_accepting_cpos;
yy_current_state = yy_last_accepting_state;
yy_act = yy_accept[yy_current_state];
}
yytext = yy_bp; yyleng = (int) (yy_cp - yy_bp); yy_hold_char = *yy_cp; *yy_cp = '\0'; yy_c_buf_p = yy_cp;;
do_action:
switch ( yy_act )
{
case 0:
*yy_cp = yy_hold_char;
yy_cp = yy_last_accepting_cpos;
yy_current_state = yy_last_accepting_state;
goto yy_find_action;
case 1:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
indented_code = 1; yy_start = 1 + 2 *(4);
break;
case 2:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext ); yy_push_state( 14 );
break;
case 3:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_push_state( 18 );
break;
case 4:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
return 260;
break;
case 5:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
return 261;
break;
case 6:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
++linenum;
line_directive_out( (FILE *) 0, 1 );
indented_code = 0;
yy_start = 1 + 2 *(4);
}
break;
case 7:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
break;
case 8:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
sectnum = 2;
bracelevel = 0;
mark_defs1();
line_directive_out( (FILE *) 0, 1 );
yy_start = 1 + 2 *(2);
return 259;
}
break;
case 9:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yytext_is_array = 0; ++linenum;
break;
case 10:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yytext_is_array = 1; ++linenum;
break;
case 11:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(17); return 265;
break;
case 12:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
++linenum;
break;
case 13:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
++linenum;
break;
case 14:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
synerr( ("unrecognized '%' directive") );
break;
case 15:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
strcpy( nmstr, yytext );
didadef = 0;
yy_start = 1 + 2 *(5);
}
break;
case 16:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
strcpy( nmstr, yytext ); return 262;;
break;
case 17:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
++linenum;
break;
case 18:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext ); ++linenum;
break;
case 19:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext ); yy_pop_state();
break;
case 20:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext );
break;
case 21:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext );
break;
case 22:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
++linenum; add_action( yytext );
break;
case 23:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_pop_state();
break;
case 24:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
linenum = myctoi( yytext );
break;
case 25:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
flex_free( infilename );
infilename = copy_string( yytext + 1 );
infilename[strlen( infilename ) - 1] = '\0';
}
break;
case 26:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
break;
case 27:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
++linenum; yy_start = 1 + 2 *(0);
break;
case 28:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext );
break;
case 29:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
++linenum;
add_action( yytext );
if ( indented_code )
yy_start = 1 + 2 *(0);
}
break;
case 30:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
break;
case 31:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
strcpy( (char *) nmdef, yytext );
for ( i = strlen( (char *) nmdef ) - 1;
i >= 0 && (nmdef[i] == ' ' || nmdef[i] == '\t');
--i )
;
nmdef[i + 1] = '\0';
ndinstal( nmstr, nmdef );
didadef = 1;
}
break;
case 32:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
if ( ! didadef )
synerr( ("incomplete name definition") );
yy_start = 1 + 2 *(0);
++linenum;
}
break;
case 33:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
++linenum; yy_start = 1 + 2 *(0);
break;
case 34:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
option_sense = 1;
break;
case 35:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
return '=';
break;
case 36:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
option_sense = ! option_sense;
break;
case 37:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
csize = option_sense ? 128 : 256;
break;
case 38:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
csize = option_sense ? 256 : 128;
break;
case 39:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
long_align = option_sense;
break;
case 40:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
action_define( "YY_ALWAYS_INTERACTIVE", option_sense );
}
break;
case 41:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yytext_is_array = option_sense;
break;
case 42:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
backing_up_report = option_sense;
break;
case 43:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
interactive = ! option_sense;
break;
case 44:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
C_plus_plus = option_sense;
break;
case 45:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
caseins = ! option_sense;
break;
case 46:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
caseins = option_sense;
break;
case 47:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
ddebug = option_sense;
break;
case 48:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
spprdflt = ! option_sense;
break;
case 49:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
useecs = option_sense;
break;
case 50:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
useecs = usemecs = 0;
use_read = fullspd = 1;
}
break;
case 51:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
useecs = usemecs = 0;
use_read = fulltbl = 1;
}
break;
case 52:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{ if ( ! option_sense ) action_define( "YY_NO_INPUT", 1 ); };
break;
case 53:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
interactive = option_sense;
break;
case 54:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
lex_compat = option_sense;
break;
case 55:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
action_define( "YY_MAIN", option_sense );
do_yywrap = ! option_sense;
}
break;
case 56:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
usemecs = option_sense;
break;
case 57:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
action_define( "YY_NEVER_INTERACTIVE", option_sense );
}
break;
case 58:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
performance_report += option_sense ? 1 : -1;
break;
case 59:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yytext_is_array = ! option_sense;
break;
case 60:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
use_read = option_sense;
break;
case 61:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
reject_really_used = option_sense;
break;
case 62:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
action_define( "YY_STACK_USED", option_sense );
break;
case 63:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
do_stdinit = option_sense;
break;
case 64:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
use_stdout = option_sense;
break;
case 65:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{ if ( ! option_sense ) action_define( "YY_NO_UNPUT", 1 ); };
break;
case 66:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
printstats = option_sense;
break;
case 67:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
nowarn = ! option_sense;
break;
case 68:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
do_yylineno = option_sense;
break;
case 69:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yymore_really_used = option_sense;
break;
case 70:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
do_yywrap = option_sense;
break;
case 71:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{ if ( ! option_sense ) action_define( "YY_NO_PUSH_STATE", 1 ); };
break;
case 72:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{ if ( ! option_sense ) action_define( "YY_NO_POP_STATE", 1 ); };
break;
case 73:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{ if ( ! option_sense ) action_define( "YY_NO_TOP_STATE", 1 ); };
break;
case 74:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{ if ( ! option_sense ) action_define( "YY_NO_SCAN_BUFFER", 1 ); };
break;
case 75:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{ if ( ! option_sense ) action_define( "YY_NO_SCAN_BYTES", 1 ); };
break;
case 76:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{ if ( ! option_sense ) action_define( "YY_NO_SCAN_STRING", 1 ); };
break;
case 77:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
return 266;
break;
case 78:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
return 267;
break;
case 79:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
return 268;
break;
case 80:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
strcpy( nmstr, yytext + 1 );
nmstr[strlen( nmstr ) - 1] = '\0';
return 262;
}
break;
case 81:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
format_synerr( ("unrecognized %%option: %s"),
yytext );
yy_start = 1 + 2 *(13);
}
break;
case 82:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
++linenum; yy_start = 1 + 2 *(0);
break;
case 83:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
++bracelevel; do { *yy_cp = yy_hold_char; yy_c_buf_p = yy_cp = yy_bp + 2 - 0; yytext = yy_bp; yyleng = (int) (yy_cp - yy_bp); yy_hold_char = *yy_cp; *yy_cp = '\0'; yy_c_buf_p = yy_cp;; } while ( 0 );
break;
case 84:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
--bracelevel; do { *yy_cp = yy_hold_char; yy_c_buf_p = yy_cp = yy_bp + 2 - 0; yytext = yy_bp; yyleng = (int) (yy_cp - yy_bp); yy_hold_char = *yy_cp; *yy_cp = '\0'; yy_c_buf_p = yy_cp;; } while ( 0 );
break;
case 85:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext );
break;
case 86:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
if ( bracelevel <= 0 )
{
do { *yy_cp = yy_hold_char; yy_c_buf_p = yy_cp = yy_bp + 0 - 0; yytext = yy_bp; yyleng = (int) (yy_cp - yy_bp); yy_hold_char = *yy_cp; *yy_cp = '\0'; yy_c_buf_p = yy_cp;; } while ( 0 );
{ if ( ! yy_current_buffer ) yy_current_buffer = yy_create_buffer( yyin, 16384 ); yy_current_buffer->yy_at_bol = 1; };
mark_prolog();
yy_start = 1 + 2 *(1);
}
else
add_action( yytext );
}
break;
case 87:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext );
break;
case 88:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
++linenum; add_action( yytext );
break;
case (166 + 2 + 1):
{
mark_prolog();
sectnum = 0;
return 0;
}
break;
case 89:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
++linenum;
break;
case 90:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
indented_code = 0;
doing_codeblock = 1;
bracelevel = 1;
yy_start = 1 + 2 *(16);
}
break;
case 91:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(6); return '<';
break;
case 92:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
return '^';
break;
case 93:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(9); return '"';
break;
case 94:
*yy_cp = yy_hold_char;
yy_c_buf_p = yy_cp = yy_bp + 1;
yytext = yy_bp; yyleng = (int) (yy_cp - yy_bp); yy_hold_char = *yy_cp; *yy_cp = '\0'; yy_c_buf_p = yy_cp;;
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(8); return '{';
break;
case 95:
*yy_cp = yy_hold_char;
yy_c_buf_p = yy_cp = yy_bp + 1;
yytext = yy_bp; yyleng = (int) (yy_cp - yy_bp); yy_hold_char = *yy_cp; *yy_cp = '\0'; yy_c_buf_p = yy_cp;;
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
return '$';
break;
case 96:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
bracelevel = 1;
yy_start = 1 + 2 *(16);
if ( in_rule )
{
doing_rule_action = 1;
in_rule = 0;
return '\n';
}
}
break;
case 97:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
continued_action = 1; ++linenum; return '\n';
break;
case 98:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
do { *yy_cp = yy_hold_char; yy_c_buf_p = yy_cp = yy_bp + yyleng - 2 - 0; yytext = yy_bp; yyleng = (int) (yy_cp - yy_bp); yy_hold_char = *yy_cp; *yy_cp = '\0'; yy_c_buf_p = yy_cp;; } while ( 0 );
bracelevel = 0;
continued_action = 0;
yy_start = 1 + 2 *(12);
}
break;
case 99:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
break;
case 100:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
bracelevel = 0;
continued_action = 0;
yy_start = 1 + 2 *(12);
if ( in_rule )
{
doing_rule_action = 1;
in_rule = 0;
return '\n';
}
}
break;
case 101:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
bracelevel = 0;
continued_action = 0;
yy_start = 1 + 2 *(12);
yyunput( '\n', yytext );
if ( in_rule )
{
doing_rule_action = 1;
in_rule = 0;
return '\n';
}
}
break;
case 102:
case 103:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
return 264;
break;
case 104:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
sectnum = 3;
yy_start = 1 + 2 *(3);
return 0;
}
break;
case 105:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
int cclval;
strcpy( nmstr, yytext );
if ( (cclval = ccllookup( (unsigned char *) nmstr )) != 0 )
{
if ( input() != ']' )
synerr( ("bad character class") );
yylval = cclval;
++cclreuse;
return 263;
}
else
{
cclinstal( (unsigned char *) nmstr, lastccl + 1 );
do { *yy_cp = yy_hold_char; yy_c_buf_p = yy_cp = yy_bp + 1 - 0; yytext = yy_bp; yyleng = (int) (yy_cp - yy_bp); yy_hold_char = *yy_cp; *yy_cp = '\0'; yy_c_buf_p = yy_cp;; } while ( 0 );
yy_start = 1 + 2 *(10);
return '[';
}
}
break;
case 106:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
register unsigned char *nmdefptr;
unsigned char *ndlookup();
strcpy( nmstr, yytext + 1 );
nmstr[yyleng - 2] = '\0';
if ( (nmdefptr = ndlookup( nmstr )) == 0 )
format_synerr(
("undefined definition {%s}"),
nmstr );
else
{
int len = strlen( (char *) nmdefptr );
if ( lex_compat || nmdefptr[0] == '^' ||
(len > 0 && nmdefptr[len - 1] == '$') )
{
for ( i = strlen( (char *) nmdefptr ) - 1; i >= 0; --i ) yyunput( ((char *) nmdefptr)[i], yytext );
if ( nmdefptr[0] == '^' )
yy_start = 1 + 2 *(7);
}
else
{
yyunput( ')', yytext );
for ( i = strlen( (char *) nmdefptr ) - 1; i >= 0; --i ) yyunput( ((char *) nmdefptr)[i], yytext );
yyunput( '(', yytext );
}
}
}
break;
case 107:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
return (unsigned char) yytext[0];
break;
case 108:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yylval = (unsigned char) yytext[0]; return 257;;
break;
case 109:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
return (unsigned char) yytext[0];
break;
case 110:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(1); return '>';
break;
case 111:
*yy_cp = yy_hold_char;
yy_c_buf_p = yy_cp = yy_bp + 1;
yytext = yy_bp; yyleng = (int) (yy_cp - yy_bp); yy_hold_char = *yy_cp; *yy_cp = '\0'; yy_c_buf_p = yy_cp;;
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(7); return '>';
break;
case 112:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
strcpy( nmstr, yytext ); return 262;;
break;
case 113:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
format_synerr( ("bad <start condition>: %s"),
yytext );
}
break;
case 114:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(1); return '^';
break;
case 115:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yylval = (unsigned char) yytext[0]; return 257;;
break;
case 116:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(1); return '"';
break;
case 117:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
synerr( ("missing quote") );
yy_start = 1 + 2 *(1);
++linenum;
return '"';
}
break;
case 118:
*yy_cp = yy_hold_char;
yy_c_buf_p = yy_cp = yy_bp + 1;
yytext = yy_bp; yyleng = (int) (yy_cp - yy_bp); yy_hold_char = *yy_cp; *yy_cp = '\0'; yy_c_buf_p = yy_cp;;
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(11); return '^';
break;
case 119:
*yy_cp = yy_hold_char;
yy_c_buf_p = yy_cp = yy_bp + 1;
yytext = yy_bp; yyleng = (int) (yy_cp - yy_bp); yy_hold_char = *yy_cp; *yy_cp = '\0'; yy_c_buf_p = yy_cp;;
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
return '^';
break;
case 120:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(11); yylval = (unsigned char) yytext[0]; return 257;;
break;
case 121:
*yy_cp = yy_hold_char;
yy_c_buf_p = yy_cp = yy_bp + 1;
yytext = yy_bp; yyleng = (int) (yy_cp - yy_bp); yy_hold_char = *yy_cp; *yy_cp = '\0'; yy_c_buf_p = yy_cp;;
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
return '-';
break;
case 122:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yylval = (unsigned char) yytext[0]; return 257;;
break;
case 123:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(1); return ']';
break;
case 124:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
synerr( ("bad character class") );
yy_start = 1 + 2 *(1);
return ']';
}
break;
case 125:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(11); return 269;
break;
case 126:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(11); return 270;
break;
case 127:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(11); return 271;
break;
case 128:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(11); return 272;
break;
case 129:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(11); return 273;
break;
case 130:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(11); return 274;
break;
case 131:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(11); return 275;
break;
case 132:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(11); return 276;
break;
case 133:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(11); return 277;
break;
case 134:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(11); return 278;
break;
case 135:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(11); return 279;
break;
case 136:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(11); return 280;
break;
case 137:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
format_synerr(
("bad character class expression: %s"),
yytext );
yy_start = 1 + 2 *(11); return 269;
}
break;
case 138:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
yylval = myctoi( yytext );
return 258;
}
break;
case 139:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
return ',';
break;
case 140:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_start = 1 + 2 *(1); return '}';
break;
case 141:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
synerr( ("bad character inside {}'s") );
yy_start = 1 + 2 *(1);
return '}';
}
break;
case 142:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
synerr( ("missing }") );
yy_start = 1 + 2 *(1);
++linenum;
return '}';
}
break;
case 143:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
bracelevel = 0;
break;
case 144:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext ); yy_push_state( 14 );
break;
case 145:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
add_action( yytext );
if ( all_upper( yytext ) ) reject = 1;;
}
break;
case 146:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
add_action( yytext );
if ( all_lower( yytext ) ) yymore_used = 1;;
}
break;
case 147:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext );
break;
case 148:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
++linenum;
add_action( yytext );
if ( bracelevel == 0 ||
(doing_codeblock && indented_code) )
{
if ( doing_rule_action )
add_action( "\tYY_BREAK\n" );
doing_rule_action = doing_codeblock = 0;
yy_start = 1 + 2 *(1);
}
}
break;
case 149:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext ); ++bracelevel;
break;
case 150:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext ); --bracelevel;
break;
case 151:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext );
break;
case 152:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext );
break;
case 153:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext );
break;
case 154:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext ); yy_start = 1 + 2 *(15);
break;
case 155:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
++linenum;
add_action( yytext );
if ( bracelevel == 0 )
{
if ( doing_rule_action )
add_action( "\tYY_BREAK\n" );
doing_rule_action = 0;
yy_start = 1 + 2 *(1);
}
}
break;
case 156:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext );
break;
case 157:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext );
break;
case 158:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext );
break;
case 159:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
++linenum; add_action( yytext );
break;
case 160:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext ); yy_start = 1 + 2 *(12);
break;
case 161:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
add_action( yytext );
break;
case (166 + 14 + 1):
case (166 + 12 + 1):
case (166 + 15 + 1):
{
synerr( ("EOF encountered inside an action") );
return 0;
}
break;
case 162:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
{
yylval = myesc( (unsigned char *) yytext );
if ( ((yy_start - 1) / 2) == 10 )
yy_start = 1 + 2 *(11);
return 257;
}
break;
case 163:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
(void) fwrite( yytext, yyleng, 1, yyout );
break;
case (166 + 3 + 1):
sectnum = 0; return 0;
break;
case 164:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
format_synerr( ("bad character: %s"), yytext );
break;
case 165:
if ( yyleng > 0 ) yy_current_buffer->yy_at_bol = (yytext[yyleng - 1] == '\n');
yy_fatal_error( "flex scanner jammed" );
break;
case (166 + 0 + 1):
case (166 + 1 + 1):
case (166 + 4 + 1):
case (166 + 5 + 1):
case (166 + 6 + 1):
case (166 + 7 + 1):
case (166 + 8 + 1):
case (166 + 9 + 1):
case (166 + 10 + 1):
case (166 + 11 + 1):
case (166 + 13 + 1):
case (166 + 16 + 1):
case (166 + 17 + 1):
case (166 + 18 + 1):
return 0;
case 166:
{
int yy_amount_of_matched_text = (int) (yy_cp - yytext) - 1;
*yy_cp = yy_hold_char;
if ( yy_current_buffer->yy_buffer_status == 0 )
{
yy_n_chars = yy_current_buffer->yy_n_chars;
yy_current_buffer->yy_input_file = yyin;
yy_current_buffer->yy_buffer_status = 1;
}
if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
{
yy_state_type yy_next_state;
yy_c_buf_p = yytext + yy_amount_of_matched_text;
yy_current_state = yy_get_previous_state();
yy_next_state = yy_try_NUL_trans( yy_current_state );
yy_bp = yytext + 0;
if ( yy_next_state )
{
yy_cp = ++yy_c_buf_p;
yy_current_state = yy_next_state;
goto yy_match;
}
else
{
yy_cp = yy_c_buf_p;
goto yy_find_action;
}
}
else switch ( yy_get_next_buffer() )
{
case 1:
{
yy_did_buffer_switch_on_eof = 0;
if ( yywrap() )
{
yy_c_buf_p = yytext + 0;
yy_act = (166 + ((yy_start - 1) / 2) + 1);
goto do_action;
}
else
{
if ( ! yy_did_buffer_switch_on_eof )
yyrestart( yyin );
}
break;
}
case 0:
yy_c_buf_p =
yytext + yy_amount_of_matched_text;
yy_current_state = yy_get_previous_state();
yy_cp = yy_c_buf_p;
yy_bp = yytext + 0;
goto yy_match;
case 2:
yy_c_buf_p =
&yy_current_buffer->yy_ch_buf[yy_n_chars];
yy_current_state = yy_get_previous_state();
yy_cp = yy_c_buf_p;
yy_bp = yytext + 0;
goto yy_find_action;
}
break;
}
default:
yy_fatal_error( "fatal flex scanner internal error--no action found" );
}
}
}
static int yy_get_next_buffer()
{
register char *dest = yy_current_buffer->yy_ch_buf;
register char *source = yytext;
register int number_to_move, i;
int ret_val;
if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
yy_fatal_error( "fatal flex scanner internal error--end of buffer missed" );
if ( yy_current_buffer->yy_fill_buffer == 0 )
{
if ( yy_c_buf_p - yytext - 0 == 1 )
{
return 1;
}
else
{
return 2;
}
}
number_to_move = (int) (yy_c_buf_p - yytext) - 1;
for ( i = 0; i < number_to_move; ++i )
*(dest++) = *(source++);
if ( yy_current_buffer->yy_buffer_status == 2 )
yy_n_chars = 0;
else
{
int num_to_read =
yy_current_buffer->yy_buf_size - number_to_move - 1;
while ( num_to_read <= 0 )
{
YY_BUFFER_STATE b = yy_current_buffer;
int yy_c_buf_p_offset =
(int) (yy_c_buf_p - b->yy_ch_buf);
if ( b->yy_is_our_buffer )
{
int new_size = b->yy_buf_size * 2;
if ( new_size <= 0 )
b->yy_buf_size += b->yy_buf_size / 8;
else
b->yy_buf_size *= 2;
b->yy_ch_buf = (char *)
yy_flex_realloc( (void *) b->yy_ch_buf,
b->yy_buf_size + 2 );
}
else
b->yy_ch_buf = 0;
if ( ! b->yy_ch_buf )
yy_fatal_error( "fatal error - scanner input buffer overflow" );
yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
num_to_read = yy_current_buffer->yy_buf_size -
number_to_move - 1;
}
if ( num_to_read > 8192 )
num_to_read = 8192;
if ( yy_current_buffer->yy_is_interactive ) { int c = '*', n; for ( n = 0; n < num_to_read && (c = _IO_getc (yyin)) != (-1) && c != '\n'; ++n ) (&yy_current_buffer->yy_ch_buf[number_to_move])[n] = (char) c; if ( c == '\n' ) (&yy_current_buffer->yy_ch_buf[number_to_move])[n++] = (char) c; if ( c == (-1) && ferror( yyin ) ) yy_fatal_error( "input in flex scanner failed" ); yy_n_chars = n; } else if ( ((yy_n_chars = fread( (&yy_current_buffer->yy_ch_buf[number_to_move]), 1, num_to_read, yyin )) == 0) && ferror( yyin ) ) yy_fatal_error( "input in flex scanner failed" );;
}
if ( yy_n_chars == 0 )
{
if ( number_to_move == 0 )
{
ret_val = 1;
yyrestart( yyin );
}
else
{
ret_val = 2;
yy_current_buffer->yy_buffer_status =
2;
}
}
else
ret_val = 0;
yy_n_chars += number_to_move;
yy_current_buffer->yy_ch_buf[yy_n_chars] = 0;
yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = 0;
yytext = &yy_current_buffer->yy_ch_buf[0];
return ret_val;
}
static yy_state_type yy_get_previous_state()
{
register yy_state_type yy_current_state;
register char *yy_cp;
yy_current_state = yy_start;
yy_current_state += (yy_current_buffer->yy_at_bol);
for ( yy_cp = yytext + 0; yy_cp < yy_c_buf_p; ++yy_cp )
{
register YY_CHAR yy_c = (*yy_cp ? yy_ec[((unsigned int) (unsigned char) *yy_cp)] : 1);
if ( yy_accept[yy_current_state] )
{
yy_last_accepting_state = yy_current_state;
yy_last_accepting_cpos = yy_cp;
}
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 769 )
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;
}
static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
{
register int yy_is_jam;
register char *yy_cp = yy_c_buf_p;
register YY_CHAR yy_c = 1;
if ( yy_accept[yy_current_state] )
{
yy_last_accepting_state = yy_current_state;
yy_last_accepting_cpos = yy_cp;
}
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 769 )
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 == 768);
return yy_is_jam ? 0 : yy_current_state;
}
static void yyunput( int c, register char *yy_bp )
{
register char *yy_cp = yy_c_buf_p;
*yy_cp = yy_hold_char;
if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
{
register int number_to_move = yy_n_chars + 2;
register char *dest = &yy_current_buffer->yy_ch_buf[
yy_current_buffer->yy_buf_size + 2];
register char *source =
&yy_current_buffer->yy_ch_buf[number_to_move];
while ( source > yy_current_buffer->yy_ch_buf )
*--dest = *--source;
yy_cp += (int) (dest - source);
yy_bp += (int) (dest - source);
yy_n_chars = yy_current_buffer->yy_buf_size;
if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
yy_fatal_error( "flex scanner push-back overflow" );
}
*--yy_cp = (char) c;
yytext = yy_bp;
yy_hold_char = *yy_cp;
yy_c_buf_p = yy_cp;
}
static int input()
{
int c;
*yy_c_buf_p = yy_hold_char;
if ( *yy_c_buf_p == 0 )
{
if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
*yy_c_buf_p = '\0';
else
{
yytext = yy_c_buf_p;
++yy_c_buf_p;
switch ( yy_get_next_buffer() )
{
case 1:
{
if ( yywrap() )
{
yy_c_buf_p =
yytext + 0;
return (-1);
}
if ( ! yy_did_buffer_switch_on_eof )
yyrestart( yyin );
return input();
}
case 0:
yy_c_buf_p = yytext + 0;
break;
case 2:
yy_fatal_error( "unexpected last match in input()" );
}
}
}
c = *(unsigned char *) yy_c_buf_p;
*yy_c_buf_p = '\0';
yy_hold_char = *++yy_c_buf_p;
yy_current_buffer->yy_at_bol = (c == '\n');
return c;
}
void yyrestart( FILE *input_file )
{
if ( ! yy_current_buffer )
yy_current_buffer = yy_create_buffer( yyin, 16384 );
yy_init_buffer( yy_current_buffer, input_file );
yy_load_buffer_state();
}
void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
{
if ( yy_current_buffer == new_buffer )
return;
if ( yy_current_buffer )
{
*yy_c_buf_p = yy_hold_char;
yy_current_buffer->yy_buf_pos = yy_c_buf_p;
yy_current_buffer->yy_n_chars = yy_n_chars;
}
yy_current_buffer = new_buffer;
yy_load_buffer_state();
yy_did_buffer_switch_on_eof = 1;
}
void yy_load_buffer_state( void )
{
yy_n_chars = yy_current_buffer->yy_n_chars;
yytext = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
yyin = yy_current_buffer->yy_input_file;
yy_hold_char = *yy_c_buf_p;
}
YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
{
YY_BUFFER_STATE b;
b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
if ( ! b )
yy_fatal_error( "out of dynamic memory in yy_create_buffer()" );
b->yy_buf_size = size;
b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
if ( ! b->yy_ch_buf )
yy_fatal_error( "out of dynamic memory in yy_create_buffer()" );
b->yy_is_our_buffer = 1;
yy_init_buffer( b, file );
return b;
}
void yy_delete_buffer( YY_BUFFER_STATE b )
{
if ( b == yy_current_buffer )
yy_current_buffer = (YY_BUFFER_STATE) 0;
if ( b->yy_is_our_buffer )
yy_flex_free( (void *) b->yy_ch_buf );
yy_flex_free( (void *) b );
}
extern int isatty ( int );
void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
{
yy_flush_buffer( b );
b->yy_input_file = file;
b->yy_fill_buffer = 1;
b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
}
void yy_flush_buffer( YY_BUFFER_STATE b )
{
b->yy_n_chars = 0;
b->yy_ch_buf[0] = 0;
b->yy_ch_buf[1] = 0;
b->yy_buf_pos = &b->yy_ch_buf[0];
b->yy_at_bol = 1;
b->yy_buffer_status = 0;
if ( b == yy_current_buffer )
yy_load_buffer_state();
}
YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
{
YY_BUFFER_STATE b;
if ( size < 2 ||
base[size-2] != 0 ||
base[size-1] != 0 )
return 0;
b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
if ( ! b )
yy_fatal_error( "out of dynamic memory in yy_scan_buffer()" );
b->yy_buf_size = size - 2;
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 = 0;
yy_switch_to_buffer( b );
return b;
}
YY_BUFFER_STATE yy_scan_string( const char *str )
{
int len;
for ( len = 0; str[len]; ++len )
;
return yy_scan_bytes( str, len );
}
YY_BUFFER_STATE yy_scan_bytes( const char *bytes, int len )
{
YY_BUFFER_STATE b;
char *buf;
yy_size_t n;
int i;
n = len + 2;
buf = (char *) yy_flex_alloc( n );
if ( ! buf )
yy_fatal_error( "out of dynamic memory in yy_scan_bytes()" );
for ( i = 0; i < len; ++i )
buf[i] = bytes[i];
buf[len] = buf[len+1] = 0;
b = yy_scan_buffer( buf, n );
if ( ! b )
yy_fatal_error( "bad buffer in yy_scan_bytes()" );
b->yy_is_our_buffer = 1;
return b;
}
static void yy_push_state( int new_state )
{
if ( yy_start_stack_ptr >= yy_start_stack_depth )
{
yy_size_t new_size;
yy_start_stack_depth += 25;
new_size = yy_start_stack_depth * sizeof( int );
if ( ! yy_start_stack )
yy_start_stack = (int *) yy_flex_alloc( new_size );
else
yy_start_stack = (int *) yy_flex_realloc(
(void *) yy_start_stack, new_size );
if ( ! yy_start_stack )
yy_fatal_error( "out of memory expanding start-condition stack" );
}
yy_start_stack[yy_start_stack_ptr++] = ((yy_start - 1) / 2);
yy_start = 1 + 2 *(new_state);
}
static void yy_pop_state()
{
if ( --yy_start_stack_ptr < 0 )
yy_fatal_error( "start-condition stack underflow" );
yy_start = 1 + 2 *(yy_start_stack[yy_start_stack_ptr]);
}
static void yy_fatal_error( const char msg[] )
{
(void) fprintf( err, "%s\n", msg );
exit( 2 );
}
static void *yy_flex_alloc( yy_size_t size )
{
return (void *) malloc( size );
}
static void *yy_flex_realloc( void *ptr, yy_size_t size )
{
return (void *) realloc( ptr, size );
}
static void yy_flex_free( void *ptr )
{
free( ptr );
}
int yywrap()
{
if ( --num_input_files > 0 )
{
set_input_file( *++input_files );
return 0;
}
else
return 1;
}
void set_input_file( file )
char *file;
{
if ( file )
{
infilename = copy_string( file );
yyin = fopen( infilename, "r" );
if ( yyin == ((void *)0) )
lerrsf( ("can't open %s"), file );
}
else
{
yyin = stdin;
infilename = copy_string( "<stdin>" );
}
linenum = 1;
}
void *flex_alloc( size )
size_t size;
{
return (void *) malloc( size );
}
void *flex_realloc( ptr, size )
void *ptr;
size_t size;
{
return (void *) realloc( ptr, size );
}
void flex_free( ptr )
void *ptr;
{
if ( ptr )
free( ptr );
}
More information about the llvm-dev
mailing list