Susan Horwitz
2012-Nov-29 23:49 UTC
[LLVMdev] problem trying to write an LLVM register-allocation pass
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
Lang Hames
2012-Dec-01 00:36 UTC
[LLVMdev] problem trying to write an LLVM register-allocation pass
Hi Susan, 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. 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> 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/20121130/faaa9e0c/attachment.html>
Susan Horwitz
2012-Dec-01 17:31 UTC
[LLVMdev] problem trying to write an LLVM register-allocation pass
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 ); }
Seemingly Similar Threads
- [LLVMdev] problem trying to write an LLVM register-allocation pass
- [PATCH 0/9] libxl: disk configuration handling
- [PATCH RESEND 0/1] libxl: introduce an option for disabling the non-O_DIRECT
- [LLVMdev] Labels
- [PATCH 1/3] builder: make the C index parser reentrant