Created
April 14, 2024 22:18
-
-
Save Googulator/3ef74f629f74f2705ed267bdcdbbf196 to your computer and use it in GitHub Desktop.
parse.c before and after preprocessing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 1 "parse.c" | |
# 74 "parse.c" | |
# 1 "flexdef.h" 1 | |
# 37 "flexdef.h" | |
# 1 "/usr/include/stdio.h" 1 | |
# 1 "/usr/include/features.h" 1 | |
# 9 "/usr/include/stdio.h" 2 | |
# 26 "/usr/include/stdio.h" | |
# 1 "/usr/include/bits/alltypes.h" 1 | |
typedef char *__builtin_va_list; | |
# 19 "/usr/include/bits/alltypes.h" | |
typedef __builtin_va_list va_list; | |
typedef __builtin_va_list __isoc_va_list; | |
# 148 "/usr/include/bits/alltypes.h" | |
typedef unsigned int size_t; | |
# 163 "/usr/include/bits/alltypes.h" | |
typedef int ssize_t; | |
# 250 "/usr/include/bits/alltypes.h" | |
typedef long long off_t; | |
# 403 "/usr/include/bits/alltypes.h" | |
struct _IO_FILE { char __x; }; | |
typedef struct _IO_FILE FILE; | |
# 27 "/usr/include/stdio.h" 2 | |
# 54 "/usr/include/stdio.h" | |
typedef union _G_fpos64_t { | |
char __opaque[16]; | |
long long __lldata; | |
double __align; | |
} fpos_t; | |
extern FILE *const stdin; | |
extern FILE *const stdout; | |
extern FILE *const stderr; | |
FILE *fopen(const char *restrict, const char *restrict); | |
FILE *freopen(const char *restrict, const char *restrict, FILE *restrict); | |
int fclose(FILE *); | |
int remove(const char *); | |
int rename(const char *, const char *); | |
int feof(FILE *); | |
int ferror(FILE *); | |
int fflush(FILE *); | |
void clearerr(FILE *); | |
int fseek(FILE *, long, int); | |
long ftell(FILE *); | |
void rewind(FILE *); | |
int fgetpos(FILE *restrict, fpos_t *restrict); | |
int fsetpos(FILE *, const fpos_t *); | |
size_t fread(void *restrict, size_t, size_t, FILE *restrict); | |
size_t fwrite(const void *restrict, size_t, size_t, FILE *restrict); | |
int fgetc(FILE *); | |
int getc(FILE *); | |
int getchar(void); | |
int ungetc(int, FILE *); | |
int fputc(int, FILE *); | |
int putc(int, FILE *); | |
int putchar(int); | |
char *fgets(char *restrict, int, FILE *restrict); | |
char *gets(char *); | |
int fputs(const char *restrict, FILE *restrict); | |
int puts(const char *); | |
int printf(const char *restrict, ...); | |
int fprintf(FILE *restrict, const char *restrict, ...); | |
int sprintf(char *restrict, const char *restrict, ...); | |
int snprintf(char *restrict, size_t, const char *restrict, ...); | |
int vprintf(const char *restrict, __isoc_va_list); | |
int vfprintf(FILE *restrict, const char *restrict, __isoc_va_list); | |
int vsprintf(char *restrict, const char *restrict, __isoc_va_list); | |
int vsnprintf(char *restrict, size_t, const char *restrict, __isoc_va_list); | |
int scanf(const char *restrict, ...); | |
int fscanf(FILE *restrict, const char *restrict, ...); | |
int sscanf(const char *restrict, const char *restrict, ...); | |
int vscanf(const char *restrict, __isoc_va_list); | |
int vfscanf(FILE *restrict, const char *restrict, __isoc_va_list); | |
int vsscanf(const char *restrict, const char *restrict, __isoc_va_list); | |
void perror(const char *); | |
int setvbuf(FILE *restrict, char *restrict, int, size_t); | |
void setbuf(FILE *restrict, char *restrict); | |
char *tmpnam(char *); | |
FILE *tmpfile(void); | |
FILE *fmemopen(void *restrict, size_t, const char *restrict); | |
FILE *open_memstream(char **, size_t *); | |
FILE *fdopen(int, const char *); | |
FILE *popen(const char *, const char *); | |
int pclose(FILE *); | |
int fileno(FILE *); | |
int fseeko(FILE *, off_t, int); | |
off_t ftello(FILE *); | |
int dprintf(int, const char *restrict, ...); | |
int vdprintf(int, const char *restrict, __isoc_va_list); | |
void flockfile(FILE *); | |
int ftrylockfile(FILE *); | |
void funlockfile(FILE *); | |
int getc_unlocked(FILE *); | |
int getchar_unlocked(void); | |
int putc_unlocked(int, FILE *); | |
int putchar_unlocked(int); | |
ssize_t getdelim(char **restrict, size_t *restrict, int, FILE *restrict); | |
ssize_t getline(char **restrict, size_t *restrict, FILE *restrict); | |
int renameat(int, const char *, int, const char *); | |
char *ctermid(char *); | |
char *tempnam(const char *, const char *); | |
char *cuserid(char *); | |
void setlinebuf(FILE *); | |
void setbuffer(FILE *, char *, size_t); | |
int fgetc_unlocked(FILE *); | |
int fputc_unlocked(int, FILE *); | |
int fflush_unlocked(FILE *); | |
size_t fread_unlocked(void *, size_t, size_t, FILE *); | |
size_t fwrite_unlocked(const void *, size_t, size_t, FILE *); | |
void clearerr_unlocked(FILE *); | |
int feof_unlocked(FILE *); | |
int ferror_unlocked(FILE *); | |
int fileno_unlocked(FILE *); | |
int getw(FILE *); | |
int putw(int, FILE *); | |
char *fgetln(FILE *, size_t *); | |
int asprintf(char **, const char *, ...); | |
int vasprintf(char **, const char *, __isoc_va_list); | |
# 38 "flexdef.h" 2 | |
# 1 "/usr/include/ctype.h" 1 | |
# 10 "/usr/include/ctype.h" | |
int isalnum(int); | |
int isalpha(int); | |
int isblank(int); | |
int iscntrl(int); | |
int isdigit(int); | |
int isgraph(int); | |
int islower(int); | |
int isprint(int); | |
int ispunct(int); | |
int isspace(int); | |
int isupper(int); | |
int isxdigit(int); | |
int tolower(int); | |
int toupper(int); | |
static inline int __isspace(int _c) | |
{ | |
return _c == ' ' || (unsigned)_c-'\t' < 5; | |
} | |
# 46 "/usr/include/ctype.h" | |
# 1 "/usr/include/bits/alltypes.h" 1 | |
typedef char *__builtin_va_list; | |
# 420 "/usr/include/bits/alltypes.h" | |
typedef struct __locale_struct * locale_t; | |
# 47 "/usr/include/ctype.h" 2 | |
int isalnum_l(int, locale_t); | |
int isalpha_l(int, locale_t); | |
int isblank_l(int, locale_t); | |
int iscntrl_l(int, locale_t); | |
int isdigit_l(int, locale_t); | |
int isgraph_l(int, locale_t); | |
int islower_l(int, locale_t); | |
int isprint_l(int, locale_t); | |
int ispunct_l(int, locale_t); | |
int isspace_l(int, locale_t); | |
int isupper_l(int, locale_t); | |
int isxdigit_l(int, locale_t); | |
int tolower_l(int, locale_t); | |
int toupper_l(int, locale_t); | |
int isascii(int); | |
int toascii(int); | |
# 39 "flexdef.h" 2 | |
# 1 "/usr/include/limits.h" 1 | |
# 1 "/usr/include/bits/limits.h" 1 | |
# 9 "/usr/include/limits.h" 2 | |
# 40 "flexdef.h" 2 | |
# 1 "/usr/include/setjmp.h" 1 | |
# 10 "/usr/include/setjmp.h" | |
# 1 "/usr/include/bits/setjmp.h" 1 | |
typedef unsigned long __jmp_buf[6]; | |
# 11 "/usr/include/setjmp.h" 2 | |
typedef struct __jmp_buf_tag { | |
__jmp_buf __jb; | |
unsigned long __fl; | |
unsigned long __ss[128/sizeof(long)]; | |
} jmp_buf[1]; | |
typedef jmp_buf sigjmp_buf; | |
int sigsetjmp (sigjmp_buf, int); | |
void siglongjmp (sigjmp_buf, int); | |
int _setjmp (jmp_buf); | |
void _longjmp (jmp_buf, int); | |
int setjmp (jmp_buf); | |
void longjmp (jmp_buf, int); | |
# 41 "flexdef.h" 2 | |
# 1 "config.h" 1 | |
# 43 "flexdef.h" 2 | |
# 61 "flexdef.h" | |
# 1 "/usr/include/strings.h" 1 | |
# 11 "/usr/include/strings.h" | |
# 1 "/usr/include/bits/alltypes.h" 1 | |
typedef char *__builtin_va_list; | |
# 12 "/usr/include/strings.h" 2 | |
int bcmp (const void *, const void *, size_t); | |
void bcopy (const void *, void *, size_t); | |
void bzero (void *, size_t); | |
char *index (const char *, int); | |
char *rindex (const char *, int); | |
int ffs (int); | |
int ffsl (long); | |
int ffsll (long long); | |
int strcasecmp (const char *, const char *); | |
int strncasecmp (const char *, const char *, size_t); | |
int strcasecmp_l (const char *, const char *, locale_t); | |
int strncasecmp_l (const char *, const char *, size_t, locale_t); | |
# 62 "flexdef.h" 2 | |
# 76 "flexdef.h" | |
# 1 "gettext.h" 1 | |
# 77 "flexdef.h" 2 | |
# 378 "flexdef.h" | |
extern int printstats, syntaxerror, eofseen, ddebug, trace, nowarn, spprdflt; | |
extern int interactive, caseins, lex_compat, posix_compat, do_yylineno; | |
extern int useecs, fulltbl, usemecs, fullspd; | |
extern int gen_line_dirs, performance_report, backing_up_report; | |
extern int reentrant, reentrant_bison_pure; | |
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; | |
# 423 "flexdef.h" | |
extern int datapos, dataline, linenum, out_linenum; | |
extern FILE *skelfile, *backing_up_file; | |
extern const char *skel[]; | |
extern int skel_ind; | |
extern char *infilename, *outfilename, *headerfilename; | |
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 FILE* yyin; | |
extern char *action_array; | |
extern int action_size; | |
extern int defs1_offset, prolog_offset, action_offset, action_index; | |
# 452 "flexdef.h" | |
extern int onestate[500], onesym[500]; | |
extern int onenext[500], onedef[500], onesp; | |
# 489 "flexdef.h" | |
extern int maximum_mns, 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 *rule_has_nl, *ccl_has_nl; | |
extern int nlch; | |
# 505 "flexdef.h" | |
extern int current_state_type; | |
# 514 "flexdef.h" | |
extern int variable_trailing_context_rules; | |
# 529 "flexdef.h" | |
extern int numtemps, numprots, protprev[50], protnext[50], prottbl[50]; | |
extern int protcomst[50], firstprot, lastprot, protsave[2000]; | |
# 548 "flexdef.h" | |
extern int numecs, nextecm[256 + 1], ecgroup[256 + 1], nummecs; | |
extern int tecfwd[256 + 1], tecbck[256 + 1]; | |
# 568 "flexdef.h" | |
extern int lastsc, *scset, *scbol, *scxclu, *sceof; | |
extern int current_max_scs; | |
extern char **scname; | |
# 603 "flexdef.h" | |
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; | |
# 628 "flexdef.h" | |
extern int lastccl, *cclmap, *ccllen, *cclng, cclreuse; | |
extern int current_maxccls, current_max_ccl_tbl_size; | |
extern unsigned char *ccltbl; | |
# 653 "flexdef.h" | |
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*); | |
# 713 "flexdef.h" | |
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 (const char *, const char *); | |
extern void indent_puts (const char *); | |
extern void make_tables (void); | |
extern void check_options (void); | |
extern void flexend (int); | |
extern void usage (void); | |
extern void action_define ( const 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 (const 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, 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 (const char *, const char *); | |
extern void pinpoint_message (const char *); | |
extern void line_warning ( const char *, int ); | |
extern void line_pinpoint ( const char *, int ); | |
extern void format_synerr (const char *, const char *); | |
extern void synerr (const char *); | |
extern void format_warn (const char *, const char *); | |
extern void warn (const char *); | |
extern void yyerror (const char *); | |
extern int yyparse (void); | |
extern int flexscan (void); | |
extern void set_input_file (char*); | |
extern int yywrap (void); | |
extern void cclinstal (unsigned char [], int); | |
extern int ccllookup (unsigned char []); | |
extern void ndinstal (const char *, unsigned char[]); | |
extern unsigned char *ndlookup (const char *); | |
extern void scextend (void); | |
extern void scinstal (const char *, int); | |
extern int sclookup (const 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); | |
struct Buf { | |
void * elts; | |
int nelts; | |
size_t elt_size; | |
int nmax; | |
}; | |
extern void buf_init (struct Buf* buf, size_t elem_size); | |
extern void buf_destroy (struct Buf* buf); | |
extern struct Buf* buf_append (struct Buf* buf, const void* ptr, int n_elem); | |
extern struct Buf* buf_strappend (struct Buf*, const char* str); | |
extern struct Buf* buf_strnappend (struct Buf*, const char* str, int nchars); | |
extern struct Buf* buf_strdefine (struct Buf* buf, const char* str, const char* def); | |
extern struct Buf userdef_buf; | |
extern struct Buf defs_buf; | |
extern jmp_buf flex_main_jmp_buf; | |
extern char* chomp(char* str); | |
# 75 "parse.c" 2 | |
# 104 "parse.c" | |
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; | |
# 135 "parse.c" | |
# 1 "/usr/include/stdlib.h" 1 | |
# 19 "/usr/include/stdlib.h" | |
# 1 "/usr/include/bits/alltypes.h" 1 | |
typedef char *__builtin_va_list; | |
# 44 "/usr/include/bits/alltypes.h" | |
typedef int wchar_t; | |
# 20 "/usr/include/stdlib.h" 2 | |
int atoi (const char *); | |
long atol (const char *); | |
long long atoll (const char *); | |
double atof (const char *); | |
float strtof (const char *restrict, char **restrict); | |
double strtod (const char *restrict, char **restrict); | |
long double strtold (const char *restrict, char **restrict); | |
long strtol (const char *restrict, char **restrict, int); | |
unsigned long strtoul (const char *restrict, char **restrict, int); | |
long long strtoll (const char *restrict, char **restrict, int); | |
unsigned long long strtoull (const char *restrict, char **restrict, int); | |
int rand (void); | |
void srand (unsigned); | |
void *malloc (size_t); | |
void *calloc (size_t, size_t); | |
void *realloc (void *, size_t); | |
void free (void *); | |
void *aligned_alloc(size_t, size_t); | |
void abort (void); | |
int atexit (void (*) (void)); | |
void exit (int); | |
void _Exit (int); | |
int at_quick_exit (void (*) (void)); | |
void quick_exit (int); | |
char *getenv (const char *); | |
int system (const char *); | |
void *bsearch (const void *, const void *, size_t, size_t, int (*)(const void *, const void *)); | |
void qsort (void *, size_t, size_t, int (*)(const void *, const void *)); | |
int abs (int); | |
long labs (long); | |
long long llabs (long long); | |
typedef struct { int quot, rem; } div_t; | |
typedef struct { long quot, rem; } ldiv_t; | |
typedef struct { long long quot, rem; } lldiv_t; | |
div_t div (int, int); | |
ldiv_t ldiv (long, long); | |
lldiv_t lldiv (long long, long long); | |
int mblen (const char *, size_t); | |
int mbtowc (wchar_t *restrict, const char *restrict, size_t); | |
int wctomb (char *, wchar_t); | |
size_t mbstowcs (wchar_t *restrict, const char *restrict, size_t); | |
size_t wcstombs (char *restrict, const wchar_t *restrict, size_t); | |
size_t __ctype_get_mb_cur_max(void); | |
# 99 "/usr/include/stdlib.h" | |
int posix_memalign (void **, size_t, size_t); | |
int setenv (const char *, const char *, int); | |
int unsetenv (const char *); | |
int mkstemp (char *); | |
int mkostemp (char *, int); | |
char *mkdtemp (char *); | |
int getsubopt (char **, char *const *, char **); | |
int rand_r (unsigned *); | |
char *realpath (const char *restrict, char *restrict); | |
long int random (void); | |
void srandom (unsigned int); | |
char *initstate (unsigned int, char *, size_t); | |
char *setstate (char *); | |
int putenv (char *); | |
int posix_openpt (int); | |
int grantpt (int); | |
int unlockpt (int); | |
char *ptsname (int); | |
char *l64a (long); | |
long a64l (const char *); | |
void setkey (const char *); | |
double drand48 (void); | |
double erand48 (unsigned short [3]); | |
long int lrand48 (void); | |
long int nrand48 (unsigned short [3]); | |
long mrand48 (void); | |
long jrand48 (unsigned short [3]); | |
void srand48 (long); | |
unsigned short *seed48 (unsigned short [3]); | |
void lcong48 (unsigned short [7]); | |
# 1 "/usr/include/alloca.h" 1 | |
# 9 "/usr/include/alloca.h" | |
# 1 "/usr/include/bits/alltypes.h" 1 | |
typedef char *__builtin_va_list; | |
# 10 "/usr/include/alloca.h" 2 | |
void *alloca(size_t); | |
# 139 "/usr/include/stdlib.h" 2 | |
char *mktemp (char *); | |
int mkstemps (char *, int); | |
int mkostemps (char *, int, int); | |
void *valloc (size_t); | |
void *memalign(size_t, size_t); | |
int getloadavg(double *, int); | |
int clearenv(void); | |
# 136 "parse.c" 2 | |
# 1 "/usr/include/string.h" 1 | |
# 23 "/usr/include/string.h" | |
# 1 "/usr/include/bits/alltypes.h" 1 | |
typedef char *__builtin_va_list; | |
# 24 "/usr/include/string.h" 2 | |
void *memcpy (void *restrict, const void *restrict, size_t); | |
void *memmove (void *, const void *, size_t); | |
void *memset (void *, int, size_t); | |
int memcmp (const void *, const void *, size_t); | |
void *memchr (const void *, int, size_t); | |
char *strcpy (char *restrict, const char *restrict); | |
char *strncpy (char *restrict, const char *restrict, size_t); | |
char *strcat (char *restrict, const char *restrict); | |
char *strncat (char *restrict, const char *restrict, size_t); | |
int strcmp (const char *, const char *); | |
int strncmp (const char *, const char *, size_t); | |
int strcoll (const char *, const char *); | |
size_t strxfrm (char *restrict, const char *restrict, size_t); | |
char *strchr (const char *, int); | |
char *strrchr (const char *, int); | |
size_t strcspn (const char *, const char *); | |
size_t strspn (const char *, const char *); | |
char *strpbrk (const char *, const char *); | |
char *strstr (const char *, const char *); | |
char *strtok (char *restrict, const char *restrict); | |
size_t strlen (const char *); | |
char *strerror (int); | |
# 63 "/usr/include/string.h" | |
char *strtok_r (char *restrict, const char *restrict, char **restrict); | |
int strerror_r (int, char *, size_t); | |
char *stpcpy(char *restrict, const char *restrict); | |
char *stpncpy(char *restrict, const char *restrict, size_t); | |
size_t strnlen (const char *, size_t); | |
char *strdup (const char *); | |
char *strndup (const char *, size_t); | |
char *strsignal(int); | |
char *strerror_l (int, locale_t); | |
int strcoll_l (const char *, const char *, locale_t); | |
size_t strxfrm_l (char *restrict, const char *restrict, size_t, locale_t); | |
void *memccpy (void *restrict, const void *restrict, int, size_t); | |
char *strsep(char **, const char *); | |
size_t strlcat (char *, const char *, size_t); | |
size_t strlcpy (char *, const char *, size_t); | |
void explicit_bzero (void *, size_t); | |
# 137 "parse.c" 2 | |
# 155 "parse.c" | |
int yylex(void); | |
int yyparse(void); | |
# 166 "parse.c" | |
extern int yychar; | |
extern int yyerrflag; | |
int yylval; | |
int yyval; | |
typedef int yytabelem; | |
int yy_yys[150], *yys = yy_yys; | |
int yy_yyv[150], *yyv = yy_yyv; | |
static int yymaxdepth = 150; | |
# 195 "parse.c" | |
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 ) | |
const char *msg, arg[]; | |
{ | |
char errmsg[2048]; | |
(void) sprintf( errmsg, msg, arg ); | |
synerr( errmsg ); | |
} | |
void synerr( str ) | |
const char *str; | |
{ | |
syntaxerror = 1; | |
pinpoint_message( str ); | |
} | |
void format_warn( msg, arg ) | |
const char *msg, arg[]; | |
{ | |
char warn_msg[2048]; | |
(void) sprintf( warn_msg, msg, arg ); | |
warn( warn_msg ); | |
} | |
void warn( str ) | |
const char *str; | |
{ | |
line_warning( str, linenum ); | |
} | |
void format_pinpoint_message( msg, arg ) | |
const char *msg, arg[]; | |
{ | |
char errmsg[2048]; | |
(void) sprintf( errmsg, msg, arg ); | |
pinpoint_message( errmsg ); | |
} | |
void pinpoint_message( str ) | |
const char *str; | |
{ | |
line_pinpoint( str, linenum ); | |
} | |
void line_warning( str, line ) | |
const char *str; | |
int line; | |
{ | |
char warning[2048]; | |
if ( ! nowarn ) | |
{ | |
sprintf( warning, "warning, %s", str ); | |
line_pinpoint( warning, line ); | |
} | |
} | |
void line_pinpoint( str, line ) | |
const char *str; | |
int line; | |
{ | |
fprintf( (stderr), "%s: %d: %s\n", infilename, line, str ); | |
} | |
void yyerror( msg ) | |
const char *msg; | |
{ | |
} | |
static const yytabelem yyexca[] ={ | |
-1, 1, | |
0, -1, | |
-2, 0, | |
-1, 2, | |
259, 5, | |
260, 5, | |
261, 5, | |
265, 5, | |
-2, 0, | |
-1, 12, | |
0, 23, | |
-2, 31, | |
}; | |
static const yytabelem yyact[]={ | |
108, 46, 68, 69, 111, 105, 115, 47, 109, 103, | |
114, 54, 86, 43, 22, 23, 24, 25, 46, 8, | |
9, 10, 83, 70, 47, 11, 53, 59, 46, 15, | |
43, 112, 54, 110, 47, 14, 58, 57, 56, 20, | |
43, 82, 81, 113, 4, 19, 63, 85, 79, 27, | |
75, 42, 52, 74, 41, 78, 33, 65, 49, 55, | |
32, 31, 30, 19, 40, 107, 29, 36, 12, 60, | |
17, 88, 72, 77, 44, 49, 39, 51, 28, 34, | |
18, 21, 16, 7, 13, 49, 6, 5, 35, 26, | |
3, 2, 1, 66, 0, 0, 50, 0, 0, 0, | |
0, 0, 0, 61, 62, 0, 0, 0, 0, 0, | |
76, 0, 73, 0, 0, 0, 0, 0, 0, 80, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 101, | |
64, 102, 66, 0, 64, 0, 64, 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, 87, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 87, 89, 90, 91, | |
92, 93, 94, 95, 96, 97, 98, 99, 100, 89, | |
90, 91, 92, 93, 94, 95, 96, 97, 98, 99, | |
100, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 48, 0, 0, 0, 0, 0, | |
45, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 48, 0, 0, 71, 84, 106, 45, 104, 67, | |
38, 48, 0, 0, 0, 0, 0, 45, 37 }; | |
static const yytabelem yypact[]={ | |
-10000000,-10000000, -212, -240,-10000000,-10000000, -227,-10000000,-10000000,-10000000, | |
-10000000,-10000000, 3, -223,-10000000,-10000000, -252,-10000000, -74, 24, | |
-10000000,-10000000, 1, 0, -1, -5, -6,-10000000, -230, -3, | |
-224, -225, -226, -235, 59, -16,-10000000,-10000000,-10000000, -16, | |
10, -33, -40,-10000000,-10000000,-10000000,-10000000, -16,-10000000, -44, | |
-15, 11,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000, | |
-10000000,-10000000, 12,-10000000, -16,-10000000, -40, -216,-10000000,-10000000, | |
-10000000, -217, -12, 6, -81,-10000000,-10000000,-10000000, -251,-10000000, | |
-33, -35, -39,-10000000,-10000000,-10000000,-10000000, 20,-10000000,-10000000, | |
-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000, | |
-10000000, -93,-10000000, -250,-10000000, -254,-10000000, -214,-10000000, -273, | |
-10000000, -279,-10000000,-10000000,-10000000,-10000000 }; | |
static const yytabelem yypgo[]={ | |
0, 92, 91, 90, 87, 68, 70, 86, 84, 83, | |
82, 81, 80, 79, 67, 78, 77, 52, 76, 64, | |
54, 51, 74, 72, 53, 71 }; | |
static const yytabelem yyr1[]={ | |
0, 1, 2, 3, 3, 3, 3, 4, 7, 7, | |
8, 8, 8, 9, 10, 10, 11, 11, 11, 11, | |
5, 5, 5, 6, 13, 13, 13, 13, 15, 12, | |
12, 12, 16, 16, 16, 17, 14, 14, 14, 14, | |
19, 19, 18, 20, 20, 20, 20, 20, 21, 21, | |
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, | |
22, 22, 24, 24, 24, 24, 25, 25, 25, 25, | |
25, 25, 25, 25, 25, 25, 25, 25, 23, 23 }; | |
static const yytabelem yyr2[]={ | |
0, 11, 1, 6, 4, 0, 3, 3, 3, 3, | |
5, 3, 3, 4, 4, 0, 7, 7, 7, 7, | |
11, 11, 0, 1, 5, 3, 3, 3, 1, 9, | |
7, 1, 6, 2, 3, 3, 5, 7, 5, 3, | |
7, 3, 5, 5, 3, 13, 11, 9, 5, 5, | |
5, 13, 11, 9, 3, 3, 3, 7, 7, 3, | |
7, 9, 9, 5, 5, 1, 3, 3, 3, 3, | |
3, 3, 3, 3, 3, 3, 3, 3, 5, 1 }; | |
static const yytabelem yychk[]={ | |
-10000000, -1, -2, -3, 256, -4, -7, -9, 259, 260, | |
261, 265, -5, -8, 262, 256, -10, -6, -12, 60, | |
262, -11, 266, 267, 268, 269, -6, 123, -15, 42, | |
61, 61, 61, 61, -13, 94, -14, 264, 256, -18, | |
-19, -20, -21, 46, -22, 263, 34, 40, 257, 91, | |
-5, -16, -17, 256, 262, 62, 262, 262, 262, 262, | |
10, -14, -19, 36, 124, 47, -21, 282, 42, 43, | |
63, 284, -23, -19, -24, 94, 125, 62, 44, 36, | |
-20, 258, 258, 34, 257, 41, 93, 257, -25, 270, | |
271, 272, 273, 274, 275, 276, 277, 278, 279, 280, | |
281, -24, -17, 44, 283, 44, 285, 45, 93, 258, | |
283, 258, 285, 257, 283, 285 }; | |
static const yytabelem yydef[]={ | |
2, -2, -2, 0, 6, 22, 0, 4, 7, 8, | |
9, 15, -2, 3, 11, 12, 13, 1, 23, 28, | |
10, 14, 0, 0, 0, 0, 0, 22, 0, 0, | |
0, 0, 0, 0, 0, 0, 25, 26, 27, 0, | |
39, 41, 44, 54, 55, 56, 79, 0, 59, 65, | |
31, 0, 33, 34, 35, 30, 16, 17, 18, 19, | |
20, 24, 36, 38, 0, 42, 43, 0, 48, 49, | |
50, 0, 0, 0, 0, 65, 21, 29, 0, 37, | |
40, 0, 0, 57, 78, 58, 60, 63, 64, 66, | |
67, 68, 69, 70, 71, 72, 73, 74, 75, 76, | |
77, 0, 32, 0, 47, 0, 53, 0, 61, 0, | |
46, 0, 52, 62, 45, 51 }; | |
typedef struct | |
{ | |
char *t_name; int t_val; } yytoktype; | |
# 1083 "parse.c" | |
yytmp = yy_n; | |
yypvt = yy_pv; | |
# 1097 "parse.c" | |
{ | |
register int yy_len = yyr2[ yy_n ]; | |
if ( !( yy_len & 01 ) ) | |
{ | |
yy_len >>= 1; | |
yyval = ( yy_pv -= yy_len )[1]; | |
yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] + | |
*( yy_ps -= yy_len ) + 1; | |
if ( yy_state >= 259 || | |
yychk[ yy_state = | |
yyact[ yy_state ] ] != -yy_n ) | |
{ | |
yy_state = yyact[ yypgo[ yy_n ] ]; | |
} | |
goto yy_stack; | |
} | |
yy_len >>= 1; | |
yyval = ( yy_pv -= yy_len )[1]; | |
yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] + | |
*( yy_ps -= yy_len ) + 1; | |
if ( yy_state >= 259 || | |
yychk[ yy_state = yyact[ yy_state ] ] != -yy_n ) | |
{ | |
yy_state = yyact[ yypgo[ yy_n ] ]; | |
} | |
} | |
yystate = yy_state; | |
yyps = yy_ps; | |
yypv = yy_pv; | |
} | |
switch( yytmp ) | |
{ | |
case 1: | |
{ | |
int def_rule; | |
pat = cclinit(); | |
cclnegate( pat ); | |
def_rule = mkstate( -pat ); | |
default_rule = num_rules; | |
finish_rule( def_rule, 0, 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( ((const char *) ("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( ((const char *) ("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: | |
{ headerfilename = copy_string( nmstr ); } break; | |
case 20: | |
{ scon_stk_ptr = yypvt[-3]; } break; | |
case 21: | |
{ scon_stk_ptr = yypvt[-3]; } break; | |
case 23: | |
{ | |
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 24: | |
{ | |
pat = yypvt[-0]; | |
finish_rule( pat, variable_trail_rule, | |
headcnt, trailcnt , previous_continued_action); | |
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 25: | |
{ | |
pat = yypvt[-0]; | |
finish_rule( pat, variable_trail_rule, | |
headcnt, trailcnt , previous_continued_action); | |
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 26: | |
{ | |
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 27: | |
{ synerr( ((const char *) ("unrecognized rule")) ); } break; | |
case 28: | |
{ yyval = scon_stk_ptr; } break; | |
case 29: | |
{ yyval = yypvt[-2]; } break; | |
case 30: | |
{ | |
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 31: | |
{ yyval = scon_stk_ptr; } break; | |
case 34: | |
{ synerr( ((const char *) ("bad start condition list")) ); } break; | |
case 35: | |
{ | |
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 36: | |
{ | |
if ( transchar[lastst[yypvt[-0]]] != (256 + 1) ) | |
yypvt[-0] = link_machines( yypvt[-0], | |
mkstate( (256 + 1) ) ); | |
mark_beginning_as_normal( yypvt[-0] ); | |
current_state_type = 0x1; | |
if ( previous_continued_action ) | |
{ | |
# 1390 "parse.c" | |
if ( ! varlength || headcnt != 0 ) | |
warn( | |
"trailing context made variable due to preceding '|' action" ); | |
varlength = 1; | |
headcnt = 0; | |
} | |
if ( lex_compat || (varlength && headcnt == 0) ) | |
{ | |
# 1412 "parse.c" | |
add_accept( yypvt[-1], | |
num_rules | 0x4000 ); | |
variable_trail_rule = 1; | |
} | |
else | |
trailcnt = rulelen; | |
yyval = link_machines( yypvt[-1], yypvt[-0] ); | |
} break; | |
case 37: | |
{ synerr( ((const char *) ("trailing context used twice")) ); } break; | |
case 38: | |
{ | |
headcnt = 0; | |
trailcnt = 1; | |
rulelen = 1; | |
varlength = 0; | |
current_state_type = 0x2; | |
if ( trlcontxt ) | |
{ | |
synerr( ((const char *) ("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( yypvt[-1], | |
num_rules | 0x4000 ); | |
variable_trail_rule = 1; | |
} | |
trlcontxt = 1; | |
eps = mkstate( (256 + 1) ); | |
yyval = link_machines( yypvt[-1], | |
link_machines( eps, mkstate( '\n' ) ) ); | |
} break; | |
case 39: | |
{ | |
yyval = yypvt[-0]; | |
if ( trlcontxt ) | |
{ | |
if ( lex_compat || (varlength && headcnt == 0) ) | |
variable_trail_rule = 1; | |
else | |
trailcnt = rulelen; | |
} | |
} break; | |
case 40: | |
{ | |
varlength = 1; | |
yyval = mkor( yypvt[-2], yypvt[-0] ); | |
} break; | |
case 41: | |
{ yyval = yypvt[-0]; } break; | |
case 42: | |
{ | |
if ( trlcontxt ) | |
synerr( ((const char *) ("trailing context used twice")) ); | |
else | |
trlcontxt = 1; | |
if ( varlength ) | |
varlength = 0; | |
else | |
headcnt = rulelen; | |
rulelen = 0; | |
current_state_type = 0x2; | |
yyval = yypvt[-1]; | |
} break; | |
case 43: | |
{ | |
yyval = link_machines( yypvt[-1], yypvt[-0] ); | |
} break; | |
case 44: | |
{ yyval = yypvt[-0]; } break; | |
case 45: | |
{ | |
varlength = 1; | |
if ( yypvt[-3] > yypvt[-1] || yypvt[-3] < 0 ) | |
{ | |
synerr( ((const char *) ("bad iteration values")) ); | |
yyval = yypvt[-5]; | |
} | |
else | |
{ | |
if ( yypvt[-3] == 0 ) | |
{ | |
if ( yypvt[-1] <= 0 ) | |
{ | |
synerr( | |
((const char *) ("bad iteration values")) ); | |
yyval = yypvt[-5]; | |
} | |
else | |
yyval = mkopt( | |
mkrep( yypvt[-5], 1, yypvt[-1] ) ); | |
} | |
else | |
yyval = mkrep( yypvt[-5], yypvt[-3], yypvt[-1] ); | |
} | |
} break; | |
case 46: | |
{ | |
varlength = 1; | |
if ( yypvt[-2] <= 0 ) | |
{ | |
synerr( ((const char *) ("iteration value must be positive")) ); | |
yyval = yypvt[-4]; | |
} | |
else | |
yyval = mkrep( yypvt[-4], yypvt[-2], -1 ); | |
} break; | |
case 47: | |
{ | |
varlength = 1; | |
if ( yypvt[-1] <= 0 ) | |
{ | |
synerr( ((const char *) ("iteration value must be positive")) | |
); | |
yyval = yypvt[-3]; | |
} | |
else | |
yyval = link_machines( yypvt[-3], | |
copysingl( yypvt[-3], yypvt[-1] - 1 ) ); | |
} break; | |
case 48: | |
{ | |
varlength = 1; | |
yyval = mkclos( yypvt[-1] ); | |
} break; | |
case 49: | |
{ | |
varlength = 1; | |
yyval = mkposcl( yypvt[-1] ); | |
} break; | |
case 50: | |
{ | |
varlength = 1; | |
yyval = mkopt( yypvt[-1] ); | |
} break; | |
case 51: | |
{ | |
varlength = 1; | |
if ( yypvt[-3] > yypvt[-1] || yypvt[-3] < 0 ) | |
{ | |
synerr( ((const char *) ("bad iteration values")) ); | |
yyval = yypvt[-5]; | |
} | |
else | |
{ | |
if ( yypvt[-3] == 0 ) | |
{ | |
if ( yypvt[-1] <= 0 ) | |
{ | |
synerr( | |
((const char *) ("bad iteration values")) ); | |
yyval = yypvt[-5]; | |
} | |
else | |
yyval = mkopt( | |
mkrep( yypvt[-5], 1, yypvt[-1] ) ); | |
} | |
else | |
yyval = mkrep( yypvt[-5], yypvt[-3], yypvt[-1] ); | |
} | |
} break; | |
case 52: | |
{ | |
varlength = 1; | |
if ( yypvt[-2] <= 0 ) | |
{ | |
synerr( ((const char *) ("iteration value must be positive")) ); | |
yyval = yypvt[-4]; | |
} | |
else | |
yyval = mkrep( yypvt[-4], yypvt[-2], -1 ); | |
} break; | |
case 53: | |
{ | |
varlength = 1; | |
if ( yypvt[-1] <= 0 ) | |
{ | |
synerr( ((const char *) ("iteration value must be positive")) ); | |
yyval = yypvt[-3]; | |
} | |
else | |
yyval = link_machines( yypvt[-3], | |
copysingl( yypvt[-3], yypvt[-1] - 1 ) ); | |
} break; | |
case 54: | |
{ | |
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 55: | |
{ | |
if ( ! cclsorted ) | |
cshell( ccltbl + cclmap[yypvt[-0]], ccllen[yypvt[-0]], 1 ); | |
if ( useecs ) | |
mkeccl( ccltbl + cclmap[yypvt[-0]], ccllen[yypvt[-0]], | |
nextecm, ecgroup, csize, csize ); | |
++rulelen; | |
if (ccl_has_nl[yypvt[-0]]) | |
rule_has_nl[num_rules] = 1; | |
yyval = mkstate( -yypvt[-0] ); | |
} break; | |
case 56: | |
{ | |
++rulelen; | |
if (ccl_has_nl[yypvt[-0]]) | |
rule_has_nl[num_rules] = 1; | |
yyval = mkstate( -yypvt[-0] ); | |
} break; | |
case 57: | |
{ yyval = yypvt[-1]; } break; | |
case 58: | |
{ yyval = yypvt[-1]; } break; | |
case 59: | |
{ | |
++rulelen; | |
if ( caseins && yypvt[-0] >= 'A' && yypvt[-0] <= 'Z' ) | |
yypvt[-0] = clower( yypvt[-0] ); | |
if (yypvt[-0] == nlch) | |
rule_has_nl[num_rules] = 1; | |
yyval = mkstate( yypvt[-0] ); | |
} break; | |
case 60: | |
{ yyval = yypvt[-1]; } break; | |
case 61: | |
{ | |
cclnegate( yypvt[-1] ); | |
yyval = yypvt[-1]; | |
} break; | |
case 62: | |
{ | |
if ( caseins ) | |
{ | |
if ( yypvt[-2] >= 'A' && yypvt[-2] <= 'Z' ) | |
yypvt[-2] = clower( yypvt[-2] ); | |
if ( yypvt[-0] >= 'A' && yypvt[-0] <= 'Z' ) | |
yypvt[-0] = clower( yypvt[-0] ); | |
} | |
if ( yypvt[-2] > yypvt[-0] ) | |
synerr( ((const char *) ("negative range in character class")) ); | |
else | |
{ | |
for ( i = yypvt[-2]; i <= yypvt[-0]; ++i ) | |
ccladd( yypvt[-3], i ); | |
cclsorted = cclsorted && (yypvt[-2] > lastchar); | |
lastchar = yypvt[-0]; | |
} | |
yyval = yypvt[-3]; | |
} break; | |
case 63: | |
{ | |
if ( caseins && yypvt[-0] >= 'A' && yypvt[-0] <= 'Z' ) | |
yypvt[-0] = clower( yypvt[-0] ); | |
ccladd( yypvt[-1], yypvt[-0] ); | |
cclsorted = cclsorted && (yypvt[-0] > lastchar); | |
lastchar = yypvt[-0]; | |
yyval = yypvt[-1]; | |
} break; | |
case 64: | |
{ | |
cclsorted = 0; | |
yyval = yypvt[-1]; | |
} break; | |
case 65: | |
{ | |
cclsorted = 1; | |
lastchar = 0; | |
currccl = yyval = cclinit(); | |
} break; | |
case 66: | |
{ do{ int c; for ( c = 0; c < csize; ++c ) if ( (0 ? isascii(c) : (unsigned)(c) < 128) && isalnum(c) ) ccladd( currccl, c ); }while(0); } break; | |
case 67: | |
{ do{ int c; for ( c = 0; c < csize; ++c ) if ( (0 ? isascii(c) : (unsigned)(c) < 128) && (0 ? isalpha(c) : (((unsigned)(c)|32)-'a') < 26) ) ccladd( currccl, c ); }while(0); } break; | |
case 68: | |
{ do{ int c; for ( c = 0; c < csize; ++c ) if ( (0 ? isascii(c) : (unsigned)(c) < 128) && ((c) == ' ' || (c) == '\t') ) ccladd( currccl, c ); }while(0); } break; | |
case 69: | |
{ do{ int c; for ( c = 0; c < csize; ++c ) if ( (0 ? isascii(c) : (unsigned)(c) < 128) && iscntrl(c) ) ccladd( currccl, c ); }while(0); } break; | |
case 70: | |
{ do{ int c; for ( c = 0; c < csize; ++c ) if ( (0 ? isascii(c) : (unsigned)(c) < 128) && (0 ? isdigit(c) : ((unsigned)(c)-'0') < 10) ) ccladd( currccl, c ); }while(0); } break; | |
case 71: | |
{ do{ int c; for ( c = 0; c < csize; ++c ) if ( (0 ? isascii(c) : (unsigned)(c) < 128) && (0 ? isgraph(c) : ((unsigned)(c)-0x21) < 0x5e) ) ccladd( currccl, c ); }while(0); } break; | |
case 72: | |
{ do{ int c; for ( c = 0; c < csize; ++c ) if ( (0 ? isascii(c) : (unsigned)(c) < 128) && (0 ? islower(c) : ((unsigned)(c)-'a') < 26) ) ccladd( currccl, c ); }while(0); } break; | |
case 73: | |
{ do{ int c; for ( c = 0; c < csize; ++c ) if ( (0 ? isascii(c) : (unsigned)(c) < 128) && (0 ? isprint(c) : ((unsigned)(c)-0x20) < 0x5f) ) ccladd( currccl, c ); }while(0); } break; | |
case 74: | |
{ do{ int c; for ( c = 0; c < csize; ++c ) if ( (0 ? isascii(c) : (unsigned)(c) < 128) && ispunct(c) ) ccladd( currccl, c ); }while(0); } break; | |
case 75: | |
{ do{ int c; for ( c = 0; c < csize; ++c ) if ( (0 ? isascii(c) : (unsigned)(c) < 128) && __isspace(c) ) ccladd( currccl, c ); }while(0); } break; | |
case 76: | |
{ | |
if ( caseins ) | |
do{ int c; for ( c = 0; c < csize; ++c ) if ( (0 ? isascii(c) : (unsigned)(c) < 128) && (0 ? islower(c) : ((unsigned)(c)-'a') < 26) ) ccladd( currccl, c ); }while(0); | |
else | |
do{ int c; for ( c = 0; c < csize; ++c ) if ( (0 ? isascii(c) : (unsigned)(c) < 128) && (0 ? isupper(c) : ((unsigned)(c)-'A') < 26) ) ccladd( currccl, c ); }while(0); | |
} break; | |
case 77: | |
{ do{ int c; for ( c = 0; c < csize; ++c ) if ( (0 ? isascii(c) : (unsigned)(c) < 128) && isxdigit(c) ) ccladd( currccl, c ); }while(0); } break; | |
case 78: | |
{ | |
if ( caseins && yypvt[-0] >= 'A' && yypvt[-0] <= 'Z' ) | |
yypvt[-0] = clower( yypvt[-0] ); | |
if ( yypvt[-0] == nlch ) | |
rule_has_nl[num_rules] = 1; | |
++rulelen; | |
yyval = link_machines( yypvt[-1], mkstate( yypvt[-0] ) ); | |
} break; | |
case 79: | |
{ yyval = mkstate( (256 + 1) ); } break; | |
} | |
goto yystack; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# define CHAR 257 | |
# define NUMBER 258 | |
# define SECTEND 259 | |
# define SCDECL 260 | |
# define XSCDECL 261 | |
# define NAME 262 | |
# define PREVCCL 263 | |
# define EOF_OP 264 | |
# define OPTION_OP 265 | |
# define OPT_OUTFILE 266 | |
# define OPT_PREFIX 267 | |
# define OPT_YYCLASS 268 | |
# define OPT_HEADER 269 | |
# define CCE_ALNUM 270 | |
# define CCE_ALPHA 271 | |
# define CCE_BLANK 272 | |
# define CCE_CNTRL 273 | |
# define CCE_DIGIT 274 | |
# define CCE_GRAPH 275 | |
# define CCE_LOWER 276 | |
# define CCE_PRINT 277 | |
# define CCE_PUNCT 278 | |
# define CCE_SPACE 279 | |
# define CCE_UPPER 280 | |
# define CCE_XDIGIT 281 | |
# define BEGIN_REPEAT_POSIX 282 | |
# define END_REPEAT_POSIX 283 | |
# define BEGIN_REPEAT_FLEX 284 | |
# define END_REPEAT_FLEX 285 | |
//line 29 "parse.y" | |
/* Copyright (c) 1990 The Regents of the University of California. */ | |
/* All rights reserved. */ | |
/* This code is derived from software contributed to Berkeley by */ | |
/* Vern Paxson. */ | |
/* The United States Government has rights in this work pursuant */ | |
/* to contract no. DE-AC03-76SF00098 between the United States */ | |
/* Department of Energy and the University of California. */ | |
/* This file is part of flex. */ | |
/* Redistribution and use in source and binary forms, with or without */ | |
/* modification, are permitted provided that the following conditions */ | |
/* are met: */ | |
/* 1. Redistributions of source code must retain the above copyright */ | |
/* notice, this list of conditions and the following disclaimer. */ | |
/* 2. Redistributions in binary form must reproduce the above copyright */ | |
/* notice, this list of conditions and the following disclaimer in the */ | |
/* documentation and/or other materials provided with the distribution. */ | |
/* Neither the name of the University nor the names of its contributors */ | |
/* may be used to endorse or promote products derived from this software */ | |
/* without specific prior written permission. */ | |
/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */ | |
/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */ | |
/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ | |
/* PURPOSE. */ | |
/* Some versions of bison are broken in that they use alloca() but don't | |
* declare it properly. The following is the patented (just kidding!) | |
* #ifdef chud to fix the problem, courtesy of Francois Pinard. | |
*/ | |
#ifdef YYBISON | |
/* AIX requires this to be the first thing in the file. What a piece. */ | |
# ifdef _AIX | |
#pragma alloca | |
# endif | |
#endif | |
#include "flexdef.h" | |
/* The remainder of the alloca() cruft has to come after including flexdef.h, | |
* so HAVE_ALLOCA_H is (possibly) defined. | |
*/ | |
#ifdef YYBISON | |
# ifdef __GNUC__ | |
# ifndef alloca | |
# define alloca __builtin_alloca | |
# endif | |
# else | |
# if HAVE_ALLOCA_H | |
# include <alloca.h> | |
# else | |
# ifdef __hpux | |
void *alloca (); | |
# else | |
# ifdef __TURBOC__ | |
# include <malloc.h> | |
# else | |
char *alloca (); | |
# endif | |
# endif | |
# endif | |
# endif | |
#endif | |
/* Bletch, ^^^^ that was ugly! */ | |
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 = false; /* whether we've made the '.' character class */ | |
int previous_continued_action; /* whether the previous rule's action was '|' */ | |
/* Expand a POSIX character class expression. */ | |
#define CCL_EXPR(func) \ | |
do{ \ | |
int c; \ | |
for ( c = 0; c < csize; ++c ) \ | |
if ( isascii(c) && func(c) ) \ | |
ccladd( currccl, c ); \ | |
}while(0) | |
/* While POSIX defines isblank(), it's not ANSI C. */ | |
#define IS_BLANK(c) ((c) == ' ' || (c) == '\t') | |
/* On some over-ambitious machines, such as DEC Alpha's, the default | |
* token type is "long" instead of "int"; this leads to problems with | |
* declaring yylval in flexdef.h. But so far, all the yacc's I've seen | |
* wrap their definitions of YYSTYPE with "#ifndef YYSTYPE"'s, so the | |
* following should ensure that the default token type is "int". | |
*/ | |
#define YYSTYPE int | |
#ifdef __STDC__ | |
#include <stdlib.h> | |
#include <string.h> | |
#define YYCONST const | |
#else | |
#include <malloc.h> | |
#include <memory.h> | |
#define YYCONST | |
#endif | |
#if defined(__cplusplus) || defined(__STDC__) | |
#if defined(__cplusplus) && defined(__EXTERN_C__) | |
extern "C" { | |
#endif | |
#ifndef yyerror | |
#if defined(__cplusplus) | |
void yyerror(YYCONST char *); | |
#endif | |
#endif | |
#ifndef yylex | |
int yylex(void); | |
#endif | |
int yyparse(void); | |
#if defined(__cplusplus) && defined(__EXTERN_C__) | |
} | |
#endif | |
#endif | |
#define yyclearin yychar = -1 | |
#define yyerrok yyerrflag = 0 | |
extern int yychar; | |
extern int yyerrflag; | |
#ifndef YYSTYPE | |
#define YYSTYPE int | |
#endif | |
YYSTYPE yylval; | |
YYSTYPE yyval; | |
typedef int yytabelem; | |
#ifndef YYMAXDEPTH | |
#define YYMAXDEPTH 150 | |
#endif | |
#if YYMAXDEPTH > 0 | |
int yy_yys[YYMAXDEPTH], *yys = yy_yys; | |
YYSTYPE yy_yyv[YYMAXDEPTH], *yyv = yy_yyv; | |
#else /* user does initial allocation */ | |
int *yys; | |
YYSTYPE *yyv; | |
#endif | |
static int yymaxdepth = YYMAXDEPTH; | |
# define YYERRCODE 256 | |
//line 874 "parse.y" | |
/* build_eof_action - build the "<<EOF>>" action for the active start | |
* conditions | |
*/ | |
void build_eof_action() | |
{ | |
register int i; | |
char action_text[MAXLINE]; | |
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]] = true; | |
sprintf( action_text, "case YY_STATE_EOF(%s):\n", | |
scname[scon_stk[i]] ); | |
add_action( action_text ); | |
} | |
} | |
line_directive_out( (FILE *) 0, 1 ); | |
/* This isn't a normal rule after all - don't count it as | |
* such, so we don't have any holes in the rule numbering | |
* (which make generating "rule can never match" warnings | |
* more difficult. | |
*/ | |
--num_rules; | |
++num_eof_rules; | |
} | |
/* format_synerr - write out formatted syntax error */ | |
void format_synerr( msg, arg ) | |
const char *msg, arg[]; | |
{ | |
char errmsg[MAXLINE]; | |
(void) sprintf( errmsg, msg, arg ); | |
synerr( errmsg ); | |
} | |
/* synerr - report a syntax error */ | |
void synerr( str ) | |
const char *str; | |
{ | |
syntaxerror = true; | |
pinpoint_message( str ); | |
} | |
/* format_warn - write out formatted warning */ | |
void format_warn( msg, arg ) | |
const char *msg, arg[]; | |
{ | |
char warn_msg[MAXLINE]; | |
(void) sprintf( warn_msg, msg, arg ); | |
warn( warn_msg ); | |
} | |
/* warn - report a warning, unless -w was given */ | |
void warn( str ) | |
const char *str; | |
{ | |
line_warning( str, linenum ); | |
} | |
/* format_pinpoint_message - write out a message formatted with one string, | |
* pinpointing its location | |
*/ | |
void format_pinpoint_message( msg, arg ) | |
const char *msg, arg[]; | |
{ | |
char errmsg[MAXLINE]; | |
(void) sprintf( errmsg, msg, arg ); | |
pinpoint_message( errmsg ); | |
} | |
/* pinpoint_message - write out a message, pinpointing its location */ | |
void pinpoint_message( str ) | |
const char *str; | |
{ | |
line_pinpoint( str, linenum ); | |
} | |
/* line_warning - report a warning at a given line, unless -w was given */ | |
void line_warning( str, line ) | |
const char *str; | |
int line; | |
{ | |
char warning[MAXLINE]; | |
if ( ! nowarn ) | |
{ | |
sprintf( warning, "warning, %s", str ); | |
line_pinpoint( warning, line ); | |
} | |
} | |
/* line_pinpoint - write out a message, pinpointing it at the given line */ | |
void line_pinpoint( str, line ) | |
const char *str; | |
int line; | |
{ | |
fprintf( stderr, "%s: %d: %s\n", infilename, line, str ); | |
} | |
/* yyerror - eat up an error message from the parser; | |
* currently, messages are ignore | |
*/ | |
void yyerror( msg ) | |
const char *msg; | |
{ | |
} | |
static YYCONST yytabelem yyexca[] ={ | |
-1, 1, | |
0, -1, | |
-2, 0, | |
-1, 2, | |
259, 5, | |
260, 5, | |
261, 5, | |
265, 5, | |
-2, 0, | |
-1, 12, | |
0, 23, | |
-2, 31, | |
}; | |
# define YYNPROD 80 | |
# define YYLAST 259 | |
static YYCONST yytabelem yyact[]={ | |
108, 46, 68, 69, 111, 105, 115, 47, 109, 103, | |
114, 54, 86, 43, 22, 23, 24, 25, 46, 8, | |
9, 10, 83, 70, 47, 11, 53, 59, 46, 15, | |
43, 112, 54, 110, 47, 14, 58, 57, 56, 20, | |
43, 82, 81, 113, 4, 19, 63, 85, 79, 27, | |
75, 42, 52, 74, 41, 78, 33, 65, 49, 55, | |
32, 31, 30, 19, 40, 107, 29, 36, 12, 60, | |
17, 88, 72, 77, 44, 49, 39, 51, 28, 34, | |
18, 21, 16, 7, 13, 49, 6, 5, 35, 26, | |
3, 2, 1, 66, 0, 0, 50, 0, 0, 0, | |
0, 0, 0, 61, 62, 0, 0, 0, 0, 0, | |
76, 0, 73, 0, 0, 0, 0, 0, 0, 80, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 101, | |
64, 102, 66, 0, 64, 0, 64, 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, 87, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 87, 89, 90, 91, | |
92, 93, 94, 95, 96, 97, 98, 99, 100, 89, | |
90, 91, 92, 93, 94, 95, 96, 97, 98, 99, | |
100, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 48, 0, 0, 0, 0, 0, | |
45, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 48, 0, 0, 71, 84, 106, 45, 104, 67, | |
38, 48, 0, 0, 0, 0, 0, 45, 37 }; | |
static YYCONST yytabelem yypact[]={ | |
-10000000,-10000000, -212, -240,-10000000,-10000000, -227,-10000000,-10000000,-10000000, | |
-10000000,-10000000, 3, -223,-10000000,-10000000, -252,-10000000, -74, 24, | |
-10000000,-10000000, 1, 0, -1, -5, -6,-10000000, -230, -3, | |
-224, -225, -226, -235, 59, -16,-10000000,-10000000,-10000000, -16, | |
10, -33, -40,-10000000,-10000000,-10000000,-10000000, -16,-10000000, -44, | |
-15, 11,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000, | |
-10000000,-10000000, 12,-10000000, -16,-10000000, -40, -216,-10000000,-10000000, | |
-10000000, -217, -12, 6, -81,-10000000,-10000000,-10000000, -251,-10000000, | |
-33, -35, -39,-10000000,-10000000,-10000000,-10000000, 20,-10000000,-10000000, | |
-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000, | |
-10000000, -93,-10000000, -250,-10000000, -254,-10000000, -214,-10000000, -273, | |
-10000000, -279,-10000000,-10000000,-10000000,-10000000 }; | |
static YYCONST yytabelem yypgo[]={ | |
0, 92, 91, 90, 87, 68, 70, 86, 84, 83, | |
82, 81, 80, 79, 67, 78, 77, 52, 76, 64, | |
54, 51, 74, 72, 53, 71 }; | |
static YYCONST yytabelem yyr1[]={ | |
0, 1, 2, 3, 3, 3, 3, 4, 7, 7, | |
8, 8, 8, 9, 10, 10, 11, 11, 11, 11, | |
5, 5, 5, 6, 13, 13, 13, 13, 15, 12, | |
12, 12, 16, 16, 16, 17, 14, 14, 14, 14, | |
19, 19, 18, 20, 20, 20, 20, 20, 21, 21, | |
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, | |
22, 22, 24, 24, 24, 24, 25, 25, 25, 25, | |
25, 25, 25, 25, 25, 25, 25, 25, 23, 23 }; | |
static YYCONST yytabelem yyr2[]={ | |
0, 11, 1, 6, 4, 0, 3, 3, 3, 3, | |
5, 3, 3, 4, 4, 0, 7, 7, 7, 7, | |
11, 11, 0, 1, 5, 3, 3, 3, 1, 9, | |
7, 1, 6, 2, 3, 3, 5, 7, 5, 3, | |
7, 3, 5, 5, 3, 13, 11, 9, 5, 5, | |
5, 13, 11, 9, 3, 3, 3, 7, 7, 3, | |
7, 9, 9, 5, 5, 1, 3, 3, 3, 3, | |
3, 3, 3, 3, 3, 3, 3, 3, 5, 1 }; | |
static YYCONST yytabelem yychk[]={ | |
-10000000, -1, -2, -3, 256, -4, -7, -9, 259, 260, | |
261, 265, -5, -8, 262, 256, -10, -6, -12, 60, | |
262, -11, 266, 267, 268, 269, -6, 123, -15, 42, | |
61, 61, 61, 61, -13, 94, -14, 264, 256, -18, | |
-19, -20, -21, 46, -22, 263, 34, 40, 257, 91, | |
-5, -16, -17, 256, 262, 62, 262, 262, 262, 262, | |
10, -14, -19, 36, 124, 47, -21, 282, 42, 43, | |
63, 284, -23, -19, -24, 94, 125, 62, 44, 36, | |
-20, 258, 258, 34, 257, 41, 93, 257, -25, 270, | |
271, 272, 273, 274, 275, 276, 277, 278, 279, 280, | |
281, -24, -17, 44, 283, 44, 285, 45, 93, 258, | |
283, 258, 285, 257, 283, 285 }; | |
static YYCONST yytabelem yydef[]={ | |
2, -2, -2, 0, 6, 22, 0, 4, 7, 8, | |
9, 15, -2, 3, 11, 12, 13, 1, 23, 28, | |
10, 14, 0, 0, 0, 0, 0, 22, 0, 0, | |
0, 0, 0, 0, 0, 0, 25, 26, 27, 0, | |
39, 41, 44, 54, 55, 56, 79, 0, 59, 65, | |
31, 0, 33, 34, 35, 30, 16, 17, 18, 19, | |
20, 24, 36, 38, 0, 42, 43, 0, 48, 49, | |
50, 0, 0, 0, 0, 65, 21, 29, 0, 37, | |
40, 0, 0, 57, 78, 58, 60, 63, 64, 66, | |
67, 68, 69, 70, 71, 72, 73, 74, 75, 76, | |
77, 0, 32, 0, 47, 0, 53, 0, 61, 0, | |
46, 0, 52, 62, 45, 51 }; | |
typedef struct | |
#ifdef __cplusplus | |
yytoktype | |
#endif | |
{ | |
#ifdef __cplusplus | |
const | |
#endif | |
char *t_name; int t_val; } yytoktype; | |
#ifndef YYDEBUG | |
# define YYDEBUG 0 /* don't allow debugging */ | |
#endif | |
#if YYDEBUG | |
yytoktype yytoks[] = | |
{ | |
"CHAR", 257, | |
"NUMBER", 258, | |
"SECTEND", 259, | |
"SCDECL", 260, | |
"XSCDECL", 261, | |
"NAME", 262, | |
"PREVCCL", 263, | |
"EOF_OP", 264, | |
"OPTION_OP", 265, | |
"OPT_OUTFILE", 266, | |
"OPT_PREFIX", 267, | |
"OPT_YYCLASS", 268, | |
"OPT_HEADER", 269, | |
"CCE_ALNUM", 270, | |
"CCE_ALPHA", 271, | |
"CCE_BLANK", 272, | |
"CCE_CNTRL", 273, | |
"CCE_DIGIT", 274, | |
"CCE_GRAPH", 275, | |
"CCE_LOWER", 276, | |
"CCE_PRINT", 277, | |
"CCE_PUNCT", 278, | |
"CCE_SPACE", 279, | |
"CCE_UPPER", 280, | |
"CCE_XDIGIT", 281, | |
"BEGIN_REPEAT_POSIX", 282, | |
"END_REPEAT_POSIX", 283, | |
"BEGIN_REPEAT_FLEX", 284, | |
"END_REPEAT_FLEX", 285, | |
"-unknown-", -1 /* ends search */ | |
}; | |
#ifdef __cplusplus | |
const | |
#endif | |
char * yyreds[] = | |
{ | |
"-no such reduction-", | |
" "goal : initlex sect1 sect1end sect2 initforrule", | |
"initlex : /* empty */", | |
"sect1 : sect1 startconddecl namelist1", | |
"sect1 : sect1 options", | |
"sect1 : /* empty */", | |
"sect1 : error", | |
"sect1end : SECTEND", | |
"startconddecl : SCDECL", | |
"startconddecl : XSCDECL", | |
"namelist1 : namelist1 NAME", | |
"namelist1 : NAME", | |
"namelist1 : error", | |
"options : OPTION_OP optionlist", | |
"optionlist : optionlist option", | |
"optionlist : /* empty */", | |
"option : OPT_OUTFILE '=' NAME", | |
"option : OPT_PREFIX '=' NAME", | |
"option : OPT_YYCLASS '=' NAME", | |
"option : OPT_HEADER '=' NAME", | |
"sect2 : sect2 scon initforrule flexrule '\n'", | |
"sect2 : sect2 scon '{' sect2 '}'", | |
"sect2 : /* empty */", | |
"initforrule : /* empty */", | |
"flexrule : '^' rule", | |
"flexrule : rule", | |
"flexrule : EOF_OP", | |
"flexrule : error", | |
"scon_stk_ptr : /* empty */", | |
"scon : '<' scon_stk_ptr namelist2 '>'", | |
"scon : '<' '*' '>'", | |
"scon : /* empty */", | |
"namelist2 : namelist2 ',' sconname", | |
"namelist2 : sconname", | |
"namelist2 : error", | |
"sconname : NAME", | |
"rule : re2 re", | |
"rule : re2 re '$'", | |
"rule : re '$'", | |
"rule : re", | |
"re : re '|' series", | |
"re : series", | |
"re2 : re '/'", | |
"series : series singleton", | |
"series : singleton", | |
"series : series BEGIN_REPEAT_POSIX NUMBER ',' NUMBER END_REPEAT_POSIX", | |
"series : series BEGIN_REPEAT_POSIX NUMBER ',' END_REPEAT_POSIX", | |
"series : series BEGIN_REPEAT_POSIX NUMBER END_REPEAT_POSIX", | |
"singleton : singleton '*'", | |
"singleton : singleton '+'", | |
"singleton : singleton '?'", | |
"singleton : singleton BEGIN_REPEAT_FLEX NUMBER ',' NUMBER END_REPEAT_FLEX", | |
"singleton : singleton BEGIN_REPEAT_FLEX NUMBER ',' END_REPEAT_FLEX", | |
"singleton : singleton BEGIN_REPEAT_FLEX NUMBER END_REPEAT_FLEX", | |
"singleton : '.'", | |
"singleton : fullccl", | |
"singleton : PREVCCL", | |
"singleton : '\"' string '\"'", | |
"singleton : '(' re ')'", | |
"singleton : CHAR", | |
"fullccl : '[' ccl ']'", | |
"fullccl : '[' '^' ccl ']'", | |
"ccl : ccl CHAR '-' CHAR", | |
"ccl : ccl CHAR", | |
"ccl : ccl ccl_expr", | |
"ccl : /* empty */", | |
"ccl_expr : CCE_ALNUM", | |
"ccl_expr : CCE_ALPHA", | |
"ccl_expr : CCE_BLANK", | |
"ccl_expr : CCE_CNTRL", | |
"ccl_expr : CCE_DIGIT", | |
"ccl_expr : CCE_GRAPH", | |
"ccl_expr : CCE_LOWER", | |
"ccl_expr : CCE_PRINT", | |
"ccl_expr : CCE_PUNCT", | |
"ccl_expr : CCE_SPACE", | |
"ccl_expr : CCE_UPPER", | |
"ccl_expr : CCE_XDIGIT", | |
"string : string CHAR", | |
"string : /* empty */", | |
}; | |
#endif /* YYDEBUG */ | |
//line 1 "/usr/lib/i386-unknown-linux-musl/yaccpar" | |
/* | |
* CDDL HEADER START | |
* | |
* The contents of this file are subject to the terms of the | |
* Common Development and Distribution License, Version 1.0 only | |
* (the "License"). You may not use this file except in compliance | |
* with the License. | |
* | |
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | |
* or http://www.opensolaris.org/os/licensing. | |
* See the License for the specific language governing permissions | |
* and limitations under the License. | |
* | |
* When distributing Covered Code, include this CDDL HEADER in each | |
* file and include the License file at usr/src/OPENSOLARIS.LICENSE. | |
* If applicable, add the following below this CDDL HEADER, with the | |
* fields enclosed by brackets "[]" replaced with your own identifying | |
* information: Portions Copyright [yyyy] [name of copyright owner] | |
* | |
* CDDL HEADER END | |
*/ | |
/* | |
* Copyright 1993 Sun Microsystems, Inc. All rights reserved. | |
* Use is subject to license terms. | |
*/ | |
/* Copyright (c) 1988 AT&T */ | |
/* All Rights Reserved */ | |
/* from OpenSolaris "yaccpar 6.18 05/06/08 SMI" */ | |
/* | |
* Portions Copyright (c) 2005 Gunnar Ritter, Freiburg i. Br., Germany | |
* | |
* Sccsid @(#)yaccpar 1.5 (gritter) 11/26/05 | |
*/ | |
/* | |
** Skeleton parser driver for yacc output | |
*/ | |
/* | |
** yacc user known macros and defines | |
*/ | |
#define YYERROR goto yyerrlab | |
#define YYACCEPT return(0) | |
#define YYABORT return(1) | |
#define YYBACKUP( newtoken, newvalue )\ | |
{\ | |
if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\ | |
{\ | |
yyerror( "syntax error - cannot backup" );\ | |
goto yyerrlab;\ | |
}\ | |
yychar = newtoken;\ | |
yystate = *yyps;\ | |
yylval = newvalue;\ | |
goto yynewstate;\ | |
} | |
#define YYRECOVERING() (!!yyerrflag) | |
#define YYNEW(type) malloc(sizeof(type) * yynewmax) | |
#define YYCOPY(to, from, type) \ | |
(type *) memcpy(to, (char *) from, yymaxdepth * sizeof (type)) | |
#define YYENLARGE( from, type) \ | |
(type *) realloc((char *) from, yynewmax * sizeof(type)) | |
#ifndef YYDEBUG | |
# define YYDEBUG 1 /* make debugging available */ | |
#endif | |
/* | |
** user known globals | |
*/ | |
int yydebug; /* set to 1 to get debugging */ | |
/* | |
** driver internal defines | |
*/ | |
#define YYFLAG (-10000000) | |
/* | |
** global variables used by the parser | |
*/ | |
YYSTYPE *yypv; /* top of value stack */ | |
int *yyps; /* top of state stack */ | |
int yystate; /* current state */ | |
int yytmp; /* extra var (lasts between blocks) */ | |
int yynerrs; /* number of errors */ | |
int yyerrflag; /* error recovery flag */ | |
int yychar; /* current input token number */ | |
#ifdef YYNMBCHARS | |
#define YYLEX() yycvtok(yylex()) | |
/* | |
** yycvtok - return a token if i is a wchar_t value that exceeds 255. | |
** If i<255, i itself is the token. If i>255 but the neither | |
** of the 30th or 31st bit is on, i is already a token. | |
*/ | |
#if defined(__STDC__) || defined(__cplusplus) | |
int yycvtok(int i) | |
#else | |
int yycvtok(i) int i; | |
#endif | |
{ | |
int first = 0; | |
int last = YYNMBCHARS - 1; | |
int mid; | |
wchar_t j; | |
if(i&0x60000000){/*Must convert to a token. */ | |
if( yymbchars[last].character < i ){ | |
return i;/*Giving up*/ | |
} | |
while ((last>=first)&&(first>=0)) {/*Binary search loop*/ | |
mid = (first+last)/2; | |
j = yymbchars[mid].character; | |
if( j==i ){/*Found*/ | |
return yymbchars[mid].tvalue; | |
}else if( j<i ){ | |
first = mid + 1; | |
}else{ | |
last = mid -1; | |
} | |
} | |
/*No entry in the table.*/ | |
return i;/* Giving up.*/ | |
}else{/* i is already a token. */ | |
return i; | |
} | |
} | |
#else/*!YYNMBCHARS*/ | |
#define YYLEX() yylex() | |
#endif/*!YYNMBCHARS*/ | |
/* | |
** yyparse - return 0 if worked, 1 if syntax error not recovered from | |
*/ | |
#if defined(__STDC__) || defined(__cplusplus) | |
int yyparse(void) | |
#else | |
int yyparse() | |
#endif | |
{ | |
register YYSTYPE *yypvt = 0; /* top of value stack for $vars */ | |
#if defined(__cplusplus) || defined(lint) || defined(__GNUC__) | |
/* | |
hacks to please C++, lint, and gcc - goto's inside | |
switch should never be executed | |
*/ | |
static int _yaccpar_lint_hack = -1; | |
switch (_yaccpar_lint_hack) | |
{ | |
case 1: goto yyerrlab; | |
case 2: goto yynewstate; | |
} | |
#endif | |
/* | |
** Initialize externals - yyparse may be called more than once | |
*/ | |
yypv = &yyv[-1]; | |
yyps = &yys[-1]; | |
yystate = 0; | |
yytmp = 0; | |
yynerrs = 0; | |
yyerrflag = 0; | |
yychar = -1; | |
#if YYMAXDEPTH <= 0 | |
if (yymaxdepth <= 0) | |
{ | |
if ((yymaxdepth = YYEXPAND(0)) <= 0) | |
{ | |
yyerror("yacc initialization error"); | |
YYABORT; | |
} | |
} | |
#endif | |
{ | |
register YYSTYPE *yy_pv; /* top of value stack */ | |
register int *yy_ps; /* top of state stack */ | |
register int yy_state; /* current state */ | |
register int yy_n; /* internal state number info */ | |
goto yystack; /* moved from 6 lines above to here to please C++ */ | |
/* | |
** get globals into registers. | |
** branch to here only if YYBACKUP was called. | |
*/ | |
yynewstate: | |
yy_pv = yypv; | |
yy_ps = yyps; | |
yy_state = yystate; | |
goto yy_newstate; | |
/* | |
** get globals into registers. | |
** either we just started, or we just finished a reduction | |
*/ | |
yystack: | |
yy_pv = yypv; | |
yy_ps = yyps; | |
yy_state = yystate; | |
/* | |
** top of for (;;) loop while no reductions done | |
*/ | |
yy_stack: | |
/* | |
** put a state and value onto the stacks | |
*/ | |
#if YYDEBUG | |
/* | |
** if debugging, look up token value in list of value vs. | |
** name pairs. 0 and negative (-1) are special values. | |
** Note: linear search is used since time is not a real | |
** consideration while debugging. | |
*/ | |
if ( yydebug ) | |
{ | |
register int yy_i; | |
printf( "State %d, token ", yy_state ); | |
if ( yychar == 0 ) | |
printf( "end-of-file\n" ); | |
else if ( yychar < 0 ) | |
printf( "-none-\n" ); | |
else | |
{ | |
for ( yy_i = 0; yytoks[yy_i].t_val >= 0; | |
yy_i++ ) | |
{ | |
if ( yytoks[yy_i].t_val == yychar ) | |
break; | |
} | |
printf( "%s\n", yytoks[yy_i].t_name ); | |
} | |
} | |
#endif /* YYDEBUG */ | |
if ( ++yy_ps >= &yys[ yymaxdepth ] ) /* room on stack? */ | |
{ | |
/* | |
** reallocate and recover. Note that pointers | |
** have to be reset, or bad things will happen | |
*/ | |
long yyps_index = (yy_ps - yys); | |
long yypv_index = (yy_pv - yyv); | |
long yypvt_index = (yypvt - yyv); | |
int yynewmax; | |
#ifdef YYEXPAND | |
yynewmax = YYEXPAND(yymaxdepth); | |
#else | |
yynewmax = 2 * yymaxdepth; /* double table size */ | |
if (yymaxdepth == YYMAXDEPTH) /* first time growth */ | |
{ | |
char *newyys = (char *)YYNEW(int); | |
char *newyyv = (char *)YYNEW(YYSTYPE); | |
if (newyys != 0 && newyyv != 0) | |
{ | |
yys = YYCOPY(newyys, yys, int); | |
yyv = YYCOPY(newyyv, yyv, YYSTYPE); | |
} | |
else | |
yynewmax = 0; /* failed */ | |
} | |
else /* not first time */ | |
{ | |
yys = YYENLARGE(yys, int); | |
yyv = YYENLARGE(yyv, YYSTYPE); | |
if (yys == 0 || yyv == 0) | |
yynewmax = 0; /* failed */ | |
} | |
#endif | |
if (yynewmax <= yymaxdepth) /* tables not expanded */ | |
{ | |
yyerror( "yacc stack overflow" ); | |
YYABORT; | |
} | |
yymaxdepth = yynewmax; | |
yy_ps = yys + yyps_index; | |
yy_pv = yyv + yypv_index; | |
yypvt = yyv + yypvt_index; | |
} | |
*yy_ps = yy_state; | |
*++yy_pv = yyval; | |
/* | |
** we have a new state - find out what to do | |
*/ | |
yy_newstate: | |
if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG ) | |
goto yydefault; /* simple state */ | |
#if YYDEBUG | |
/* | |
** if debugging, need to mark whether new token grabbed | |
*/ | |
yytmp = yychar < 0; | |
#endif | |
if ( ( yychar < 0 ) && ( ( yychar = YYLEX() ) < 0 ) ) | |
yychar = 0; /* reached EOF */ | |
#if YYDEBUG | |
if ( yydebug && yytmp ) | |
{ | |
register int yy_i; | |
printf( "Received token " ); | |
if ( yychar == 0 ) | |
printf( "end-of-file\n" ); | |
else if ( yychar < 0 ) | |
printf( "-none-\n" ); | |
else | |
{ | |
for ( yy_i = 0; yytoks[yy_i].t_val >= 0; | |
yy_i++ ) | |
{ | |
if ( yytoks[yy_i].t_val == yychar ) | |
break; | |
} | |
printf( "%s\n", yytoks[yy_i].t_name ); | |
} | |
} | |
#endif /* YYDEBUG */ | |
if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) ) | |
goto yydefault; | |
if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar ) /*valid shift*/ | |
{ | |
yychar = -1; | |
yyval = yylval; | |
yy_state = yy_n; | |
if ( yyerrflag > 0 ) | |
yyerrflag--; | |
goto yy_stack; | |
} | |
yydefault: | |
if ( ( yy_n = yydef[ yy_state ] ) == -2 ) | |
{ | |
#if YYDEBUG | |
yytmp = yychar < 0; | |
#endif | |
if ( ( yychar < 0 ) && ( ( yychar = YYLEX() ) < 0 ) ) | |
yychar = 0; /* reached EOF */ | |
#if YYDEBUG | |
if ( yydebug && yytmp ) | |
{ | |
register int yy_i; | |
printf( "Received token " ); | |
if ( yychar == 0 ) | |
printf( "end-of-file\n" ); | |
else if ( yychar < 0 ) | |
printf( "-none-\n" ); | |
else | |
{ | |
for ( yy_i = 0; | |
yytoks[yy_i].t_val >= 0; | |
yy_i++ ) | |
{ | |
if ( yytoks[yy_i].t_val | |
== yychar ) | |
{ | |
break; | |
} | |
} | |
printf( "%s\n", yytoks[yy_i].t_name ); | |
} | |
} | |
#endif /* YYDEBUG */ | |
/* | |
** look through exception table | |
*/ | |
{ | |
register YYCONST int *yyxi = yyexca; | |
while ( ( *yyxi != -1 ) || | |
( yyxi[1] != yy_state ) ) | |
{ | |
yyxi += 2; | |
} | |
while ( ( *(yyxi += 2) >= 0 ) && | |
( *yyxi != yychar ) ) | |
; | |
if ( ( yy_n = yyxi[1] ) < 0 ) | |
YYACCEPT; | |
} | |
} | |
/* | |
** check for syntax error | |
*/ | |
if ( yy_n == 0 ) /* have an error */ | |
{ | |
/* no worry about speed here! */ | |
switch ( yyerrflag ) | |
{ | |
case 0: /* new error */ | |
yyerror( "syntax error" ); | |
goto skip_init; | |
yyerrlab: | |
/* | |
** get globals into registers. | |
** we have a user generated syntax type error | |
*/ | |
yy_pv = yypv; | |
yy_ps = yyps; | |
yy_state = yystate; | |
skip_init: | |
yynerrs++; | |
/* FALLTHRU */ | |
case 1: | |
case 2: /* incompletely recovered error */ | |
/* try again... */ | |
yyerrflag = 3; | |
/* | |
** find state where "error" is a legal | |
** shift action | |
*/ | |
while ( yy_ps >= yys ) | |
{ | |
yy_n = yypact[ *yy_ps ] + YYERRCODE; | |
if ( yy_n >= 0 && yy_n < YYLAST && | |
yychk[yyact[yy_n]] == YYERRCODE) { | |
/* | |
** simulate shift of "error" | |
*/ | |
yy_state = yyact[ yy_n ]; | |
goto yy_stack; | |
} | |
/* | |
** current state has no shift on | |
** "error", pop stack | |
*/ | |
#if YYDEBUG | |
# define _POP_ "Error recovery pops state %d, uncovers state %d\n" | |
if ( yydebug ) | |
printf( _POP_, *yy_ps, | |
yy_ps[-1] ); | |
# undef _POP_ | |
#endif | |
yy_ps--; | |
yy_pv--; | |
} | |
/* | |
** there is no state on stack with "error" as | |
** a valid shift. give up. | |
*/ | |
YYABORT; | |
case 3: /* no shift yet; eat a token */ | |
#if YYDEBUG | |
/* | |
** if debugging, look up token in list of | |
** pairs. 0 and negative shouldn't occur, | |
** but since timing doesn't matter when | |
** debugging, it doesn't hurt to leave the | |
** tests here. | |
*/ | |
if ( yydebug ) | |
{ | |
register int yy_i; | |
printf( "Error recovery discards " ); | |
if ( yychar == 0 ) | |
printf( "token end-of-file\n" ); | |
else if ( yychar < 0 ) | |
printf( "token -none-\n" ); | |
else | |
{ | |
for ( yy_i = 0; | |
yytoks[yy_i].t_val >= 0; | |
yy_i++ ) | |
{ | |
if ( yytoks[yy_i].t_val | |
== yychar ) | |
{ | |
break; | |
} | |
} | |
printf( "token %s\n", | |
yytoks[yy_i].t_name ); | |
} | |
} | |
#endif /* YYDEBUG */ | |
if ( yychar == 0 ) /* reached EOF. quit */ | |
YYABORT; | |
yychar = -1; | |
goto yy_newstate; | |
} | |
}/* end if ( yy_n == 0 ) */ | |
/* | |
** reduction by production yy_n | |
** put stack tops, etc. so things right after switch | |
*/ | |
#if YYDEBUG | |
/* | |
** if debugging, print the string that is the user's | |
** specification of the reduction which is just about | |
** to be done. | |
*/ | |
if ( yydebug ) | |
printf( "Reduce by (%d) \"%s\"\n", | |
yy_n, yyreds[ yy_n ] ); | |
#endif | |
yytmp = yy_n; /* value to switch over */ | |
yypvt = yy_pv; /* $vars top of value stack */ | |
/* | |
** Look in goto table for next state | |
** Sorry about using yy_state here as temporary | |
** register variable, but why not, if it works... | |
** If yyr2[ yy_n ] doesn't have the low order bit | |
** set, then there is no action to be done for | |
** this reduction. So, no saving & unsaving of | |
** registers done. The only difference between the | |
** code just after the if and the body of the if is | |
** the goto yy_stack in the body. This way the test | |
** can be made before the choice of what to do is needed. | |
*/ | |
{ | |
/* length of production doubled with extra bit */ | |
register int yy_len = yyr2[ yy_n ]; | |
if ( !( yy_len & 01 ) ) | |
{ | |
yy_len >>= 1; | |
yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */ | |
yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] + | |
*( yy_ps -= yy_len ) + 1; | |
if ( yy_state >= YYLAST || | |
yychk[ yy_state = | |
yyact[ yy_state ] ] != -yy_n ) | |
{ | |
yy_state = yyact[ yypgo[ yy_n ] ]; | |
} | |
goto yy_stack; | |
} | |
yy_len >>= 1; | |
yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */ | |
yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] + | |
*( yy_ps -= yy_len ) + 1; | |
if ( yy_state >= YYLAST || | |
yychk[ yy_state = yyact[ yy_state ] ] != -yy_n ) | |
{ | |
yy_state = yyact[ yypgo[ yy_n ] ]; | |
} | |
} | |
/* save until reenter driver code */ | |
yystate = yy_state; | |
yyps = yy_ps; | |
yypv = yy_pv; | |
} | |
/* | |
** code supplied by user is placed in this switch | |
*/ | |
switch( yytmp ) | |
{ | |
case 1: | |
//line 134 "parse.y" | |
{ /* add default rule */ | |
int def_rule; | |
pat = cclinit(); | |
cclnegate( pat ); | |
def_rule = mkstate( -pat ); | |
/* Remember the number of the default rule so we | |
* don't generate "can't match" warnings for it. | |
*/ | |
default_rule = num_rules; | |
finish_rule( def_rule, false, 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: | |
//line 163 "parse.y" | |
{ /* initialize for processing rules */ | |
/* Create default DFA start condition. */ | |
scinstal( "INITIAL", false ); | |
} break; | |
case 6: | |
//line 174 "parse.y" | |
{ synerr( _("unknown error processing section 1") ); } break; | |
case 7: | |
//line 178 "parse.y" | |
{ | |
check_options(); | |
scon_stk = allocate_integer_array( lastsc + 1 ); | |
scon_stk_ptr = 0; | |
} break; | |
case 8: | |
//line 186 "parse.y" | |
{ xcluflg = false; } break; | |
case 9: | |
//line 189 "parse.y" | |
{ xcluflg = true; } break; | |
case 10: | |
//line 193 "parse.y" | |
{ scinstal( nmstr, xcluflg ); } break; | |
case 11: | |
//line 196 "parse.y" | |
{ scinstal( nmstr, xcluflg ); } break; | |
case 12: | |
//line 199 "parse.y" | |
{ synerr( _("bad start condition list") ); } break; | |
case 16: | |
//line 210 "parse.y" | |
{ | |
outfilename = copy_string( nmstr ); | |
did_outfilename = 1; | |
} break; | |
case 17: | |
//line 215 "parse.y" | |
{ prefix = copy_string( nmstr ); } break; | |
case 18: | |
//line 217 "parse.y" | |
{ yyclass = copy_string( nmstr ); } break; | |
case 19: | |
//line 219 "parse.y" | |
{ headerfilename = copy_string( nmstr ); } break; | |
case 20: | |
//line 223 "parse.y" | |
{ scon_stk_ptr = yypvt[-3]; } break; | |
case 21: | |
//line 225 "parse.y" | |
{ scon_stk_ptr = yypvt[-3]; } break; | |
case 23: | |
//line 230 "parse.y" | |
{ | |
/* Initialize for a parse of one rule. */ | |
trlcontxt = variable_trail_rule = varlength = false; | |
trailcnt = headcnt = rulelen = 0; | |
current_state_type = STATE_NORMAL; | |
previous_continued_action = continued_action; | |
in_rule = true; | |
new_rule(); | |
} break; | |
case 24: | |
//line 243 "parse.y" | |
{ | |
pat = yypvt[-0]; | |
finish_rule( pat, variable_trail_rule, | |
headcnt, trailcnt , previous_continued_action); | |
if ( scon_stk_ptr > 0 ) | |
{ | |
for ( i = 1; i <= scon_stk_ptr; ++i ) | |
scbol[scon_stk[i]] = | |
mkbranch( scbol[scon_stk[i]], | |
pat ); | |
} | |
else | |
{ | |
/* Add to all non-exclusive start conditions, | |
* including the default (0) start condition. | |
*/ | |
for ( i = 1; i <= lastsc; ++i ) | |
if ( ! scxclu[i] ) | |
scbol[i] = mkbranch( scbol[i], | |
pat ); | |
} | |
if ( ! bol_needed ) | |
{ | |
bol_needed = true; | |
if ( performance_report > 1 ) | |
pinpoint_message( | |
"'^' operator results in sub-optimal performance" ); | |
} | |
} break; | |
case 25: | |
//line 279 "parse.y" | |
{ | |
pat = yypvt[-0]; | |
finish_rule( pat, variable_trail_rule, | |
headcnt, trailcnt , previous_continued_action); | |
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 26: | |
//line 303 "parse.y" | |
{ | |
if ( scon_stk_ptr > 0 ) | |
build_eof_action(); | |
else | |
{ | |
/* This EOF applies to all start conditions | |
* which don't already have EOF actions. | |
*/ | |
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 27: | |
//line 326 "parse.y" | |
{ synerr( _("unrecognized rule") ); } break; | |
case 28: | |
//line 330 "parse.y" | |
{ yyval = scon_stk_ptr; } break; | |
case 29: | |
//line 334 "parse.y" | |
{ yyval = yypvt[-2]; } break; | |
case 30: | |
//line 337 "parse.y" | |
{ | |
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 31: | |
//line 354 "parse.y" | |
{ yyval = scon_stk_ptr; } break; | |
case 34: | |
//line 362 "parse.y" | |
{ synerr( _("bad start condition list") ); } break; | |
case 35: | |
//line 366 "parse.y" | |
{ | |
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 36: | |
//line 389 "parse.y" | |
{ | |
if ( transchar[lastst[yypvt[-0]]] != SYM_EPSILON ) | |
/* Provide final transition \now/ so it | |
* will be marked as a trailing context | |
* state. | |
*/ | |
yypvt[-0] = link_machines( yypvt[-0], | |
mkstate( SYM_EPSILON ) ); | |
mark_beginning_as_normal( yypvt[-0] ); | |
current_state_type = STATE_NORMAL; | |
if ( previous_continued_action ) | |
{ | |
/* We need to treat this as variable trailing | |
* context so that the backup does not happen | |
* in the action but before the action switch | |
* statement. If the backup happens in the | |
* action, then the rules "falling into" this | |
* one's action will *also* do the backup, | |
* erroneously. | |
*/ | |
if ( ! varlength || headcnt != 0 ) | |
warn( | |
"trailing context made variable due to preceding '|' action" ); | |
/* Mark as variable. */ | |
varlength = true; | |
headcnt = 0; | |
} | |
if ( lex_compat || (varlength && headcnt == 0) ) | |
{ /* variable trailing context rule */ | |
/* Mark the first part of the rule as the | |
* accepting "head" part of a trailing | |
* context rule. | |
* | |
* By the way, we didn't do this at the | |
* beginning of this production because back | |
* then current_state_type was set up for a | |
* trail rule, and add_accept() can create | |
* a new state ... | |
*/ | |
add_accept( yypvt[-1], | |
num_rules | YY_TRAILING_HEAD_MASK ); | |
variable_trail_rule = true; | |
} | |
else | |
trailcnt = rulelen; | |
yyval = link_machines( yypvt[-1], yypvt[-0] ); | |
} break; | |
case 37: | |
//line 445 "parse.y" | |
{ synerr( _("trailing context used twice") ); } break; | |
case 38: | |
//line 448 "parse.y" | |
{ | |
headcnt = 0; | |
trailcnt = 1; | |
rulelen = 1; | |
varlength = false; | |
current_state_type = STATE_TRAILING_CONTEXT; | |
if ( trlcontxt ) | |
{ | |
synerr( _("trailing context used twice") ); | |
yyval = mkstate( SYM_EPSILON ); | |
} | |
else if ( previous_continued_action ) | |
{ | |
/* See the comment in the rule for "re2 re" | |
* above. | |
*/ | |
warn( | |
"trailing context made variable due to preceding '|' action" ); | |
varlength = true; | |
} | |
if ( lex_compat || varlength ) | |
{ | |
/* Again, see the comment in the rule for | |
* "re2 re" above. | |
*/ | |
add_accept( yypvt[-1], | |
num_rules | YY_TRAILING_HEAD_MASK ); | |
variable_trail_rule = true; | |
} | |
trlcontxt = true; | |
eps = mkstate( SYM_EPSILON ); | |
yyval = link_machines( yypvt[-1], | |
link_machines( eps, mkstate( '\n' ) ) ); | |
} break; | |
case 39: | |
//line 491 "parse.y" | |
{ | |
yyval = yypvt[-0]; | |
if ( trlcontxt ) | |
{ | |
if ( lex_compat || (varlength && headcnt == 0) ) | |
/* Both head and trail are | |
* variable-length. | |
*/ | |
variable_trail_rule = true; | |
else | |
trailcnt = rulelen; | |
} | |
} break; | |
case 40: | |
//line 509 "parse.y" | |
{ | |
varlength = true; | |
yyval = mkor( yypvt[-2], yypvt[-0] ); | |
} break; | |
case 41: | |
//line 515 "parse.y" | |
{ yyval = yypvt[-0]; } break; | |
case 42: | |
//line 520 "parse.y" | |
{ | |
/* This rule is written separately so the | |
* reduction will occur before the trailing | |
* series is parsed. | |
*/ | |
if ( trlcontxt ) | |
synerr( _("trailing context used twice") ); | |
else | |
trlcontxt = true; | |
if ( varlength ) | |
/* We hope the trailing context is | |
* fixed-length. | |
*/ | |
varlength = false; | |
else | |
headcnt = rulelen; | |
rulelen = 0; | |
current_state_type = STATE_TRAILING_CONTEXT; | |
yyval = yypvt[-1]; | |
} break; | |
case 43: | |
//line 547 "parse.y" | |
{ | |
/* This is where concatenation of adjacent patterns | |
* gets done. | |
*/ | |
yyval = link_machines( yypvt[-1], yypvt[-0] ); | |
} break; | |
case 44: | |
//line 555 "parse.y" | |
{ yyval = yypvt[-0]; } break; | |
case 45: | |
//line 558 "parse.y" | |
{ | |
varlength = true; | |
if ( yypvt[-3] > yypvt[-1] || yypvt[-3] < 0 ) | |
{ | |
synerr( _("bad iteration values") ); | |
yyval = yypvt[-5]; | |
} | |
else | |
{ | |
if ( yypvt[-3] == 0 ) | |
{ | |
if ( yypvt[-1] <= 0 ) | |
{ | |
synerr( | |
_("bad iteration values") ); | |
yyval = yypvt[-5]; | |
} | |
else | |
yyval = mkopt( | |
mkrep( yypvt[-5], 1, yypvt[-1] ) ); | |
} | |
else | |
yyval = mkrep( yypvt[-5], yypvt[-3], yypvt[-1] ); | |
} | |
} break; | |
case 46: | |
//line 586 "parse.y" | |
{ | |
varlength = true; | |
if ( yypvt[-2] <= 0 ) | |
{ | |
synerr( _("iteration value must be positive") ); | |
yyval = yypvt[-4]; | |
} | |
else | |
yyval = mkrep( yypvt[-4], yypvt[-2], INFINITY ); | |
} break; | |
case 47: | |
//line 600 "parse.y" | |
{ | |
/* The series could be something like "(foo)", | |
* in which case we have no idea what its length | |
* is, so we punt here. | |
*/ | |
varlength = true; | |
if ( yypvt[-1] <= 0 ) | |
{ | |
synerr( _("iteration value must be positive") | |
); | |
yyval = yypvt[-3]; | |
} | |
else | |
yyval = link_machines( yypvt[-3], | |
copysingl( yypvt[-3], yypvt[-1] - 1 ) ); | |
} break; | |
case 48: | |
//line 622 "parse.y" | |
{ | |
varlength = true; | |
yyval = mkclos( yypvt[-1] ); | |
} break; | |
case 49: | |
//line 629 "parse.y" | |
{ | |
varlength = true; | |
yyval = mkposcl( yypvt[-1] ); | |
} break; | |
case 50: | |
//line 635 "parse.y" | |
{ | |
varlength = true; | |
yyval = mkopt( yypvt[-1] ); | |
} break; | |
case 51: | |
//line 641 "parse.y" | |
{ | |
varlength = true; | |
if ( yypvt[-3] > yypvt[-1] || yypvt[-3] < 0 ) | |
{ | |
synerr( _("bad iteration values") ); | |
yyval = yypvt[-5]; | |
} | |
else | |
{ | |
if ( yypvt[-3] == 0 ) | |
{ | |
if ( yypvt[-1] <= 0 ) | |
{ | |
synerr( | |
_("bad iteration values") ); | |
yyval = yypvt[-5]; | |
} | |
else | |
yyval = mkopt( | |
mkrep( yypvt[-5], 1, yypvt[-1] ) ); | |
} | |
else | |
yyval = mkrep( yypvt[-5], yypvt[-3], yypvt[-1] ); | |
} | |
} break; | |
case 52: | |
//line 669 "parse.y" | |
{ | |
varlength = true; | |
if ( yypvt[-2] <= 0 ) | |
{ | |
synerr( _("iteration value must be positive") ); | |
yyval = yypvt[-4]; | |
} | |
else | |
yyval = mkrep( yypvt[-4], yypvt[-2], INFINITY ); | |
} break; | |
case 53: | |
//line 683 "parse.y" | |
{ | |
/* The singleton could be something like "(foo)", | |
* in which case we have no idea what its length | |
* is, so we punt here. | |
*/ | |
varlength = true; | |
if ( yypvt[-1] <= 0 ) | |
{ | |
synerr( _("iteration value must be positive") ); | |
yyval = yypvt[-3]; | |
} | |
else | |
yyval = link_machines( yypvt[-3], | |
copysingl( yypvt[-3], yypvt[-1] - 1 ) ); | |
} break; | |
case 54: | |
//line 702 "parse.y" | |
{ | |
if ( ! madeany ) | |
{ | |
/* Create the '.' character class. */ | |
anyccl = cclinit(); | |
ccladd( anyccl, '\n' ); | |
cclnegate( anyccl ); | |
if ( useecs ) | |
mkeccl( ccltbl + cclmap[anyccl], | |
ccllen[anyccl], nextecm, | |
ecgroup, csize, csize ); | |
madeany = true; | |
} | |
++rulelen; | |
yyval = mkstate( -anyccl ); | |
} break; | |
case 55: | |
//line 724 "parse.y" | |
{ | |
if ( ! cclsorted ) | |
/* Sort characters for fast searching. We | |
* use a shell sort since this list could | |
* be large. | |
*/ | |
cshell( ccltbl + cclmap[yypvt[-0]], ccllen[yypvt[-0]], true ); | |
if ( useecs ) | |
mkeccl( ccltbl + cclmap[yypvt[-0]], ccllen[yypvt[-0]], | |
nextecm, ecgroup, csize, csize ); | |
++rulelen; | |
if (ccl_has_nl[yypvt[-0]]) | |
rule_has_nl[num_rules] = true; | |
yyval = mkstate( -yypvt[-0] ); | |
} break; | |
case 56: | |
//line 745 "parse.y" | |
{ | |
++rulelen; | |
if (ccl_has_nl[yypvt[-0]]) | |
rule_has_nl[num_rules] = true; | |
yyval = mkstate( -yypvt[-0] ); | |
} break; | |
case 57: | |
//line 755 "parse.y" | |
{ yyval = yypvt[-1]; } break; | |
case 58: | |
//line 758 "parse.y" | |
{ yyval = yypvt[-1]; } break; | |
case 59: | |
//line 761 "parse.y" | |
{ | |
++rulelen; | |
if ( caseins && yypvt[-0] >= 'A' && yypvt[-0] <= 'Z' ) | |
yypvt[-0] = clower( yypvt[-0] ); | |
if (yypvt[-0] == nlch) | |
rule_has_nl[num_rules] = true; | |
yyval = mkstate( yypvt[-0] ); | |
} break; | |
case 60: | |
//line 775 "parse.y" | |
{ yyval = yypvt[-1]; } break; | |
case 61: | |
//line 778 "parse.y" | |
{ | |
cclnegate( yypvt[-1] ); | |
yyval = yypvt[-1]; | |
} break; | |
case 62: | |
//line 785 "parse.y" | |
{ | |
if ( caseins ) | |
{ | |
if ( yypvt[-2] >= 'A' && yypvt[-2] <= 'Z' ) | |
yypvt[-2] = clower( yypvt[-2] ); | |
if ( yypvt[-0] >= 'A' && yypvt[-0] <= 'Z' ) | |
yypvt[-0] = clower( yypvt[-0] ); | |
} | |
if ( yypvt[-2] > yypvt[-0] ) | |
synerr( _("negative range in character class") ); | |
else | |
{ | |
for ( i = yypvt[-2]; i <= yypvt[-0]; ++i ) | |
ccladd( yypvt[-3], i ); | |
/* Keep track if this ccl is staying in | |
* alphabetical order. | |
*/ | |
cclsorted = cclsorted && (yypvt[-2] > lastchar); | |
lastchar = yypvt[-0]; | |
} | |
yyval = yypvt[-3]; | |
} break; | |
case 63: | |
//line 813 "parse.y" | |
{ | |
if ( caseins && yypvt[-0] >= 'A' && yypvt[-0] <= 'Z' ) | |
yypvt[-0] = clower( yypvt[-0] ); | |
ccladd( yypvt[-1], yypvt[-0] ); | |
cclsorted = cclsorted && (yypvt[-0] > lastchar); | |
lastchar = yypvt[-0]; | |
yyval = yypvt[-1]; | |
} break; | |
case 64: | |
//line 824 "parse.y" | |
{ | |
/* Too hard to properly maintain cclsorted. */ | |
cclsorted = false; | |
yyval = yypvt[-1]; | |
} break; | |
case 65: | |
//line 831 "parse.y" | |
{ | |
cclsorted = true; | |
lastchar = 0; | |
currccl = yyval = cclinit(); | |
} break; | |
case 66: | |
//line 838 "parse.y" | |
{ CCL_EXPR(isalnum); } break; | |
case 67: | |
//line 839 "parse.y" | |
{ CCL_EXPR(isalpha); } break; | |
case 68: | |
//line 840 "parse.y" | |
{ CCL_EXPR(IS_BLANK); } break; | |
case 69: | |
//line 841 "parse.y" | |
{ CCL_EXPR(iscntrl); } break; | |
case 70: | |
//line 842 "parse.y" | |
{ CCL_EXPR(isdigit); } break; | |
case 71: | |
//line 843 "parse.y" | |
{ CCL_EXPR(isgraph); } break; | |
case 72: | |
//line 844 "parse.y" | |
{ CCL_EXPR(islower); } break; | |
case 73: | |
//line 845 "parse.y" | |
{ CCL_EXPR(isprint); } break; | |
case 74: | |
//line 846 "parse.y" | |
{ CCL_EXPR(ispunct); } break; | |
case 75: | |
//line 847 "parse.y" | |
{ CCL_EXPR(isspace); } break; | |
case 76: | |
//line 848 "parse.y" | |
{ | |
if ( caseins ) | |
CCL_EXPR(islower); | |
else | |
CCL_EXPR(isupper); | |
} break; | |
case 77: | |
//line 854 "parse.y" | |
{ CCL_EXPR(isxdigit); } break; | |
case 78: | |
//line 858 "parse.y" | |
{ | |
if ( caseins && yypvt[-0] >= 'A' && yypvt[-0] <= 'Z' ) | |
yypvt[-0] = clower( yypvt[-0] ); | |
if ( yypvt[-0] == nlch ) | |
rule_has_nl[num_rules] = true; | |
++rulelen; | |
yyval = link_machines( yypvt[-1], mkstate( yypvt[-0] ) ); | |
} break; | |
case 79: | |
//line 871 "parse.y" | |
{ yyval = mkstate( SYM_EPSILON ); } break; | |
//line 562 "/usr/lib/i386-unknown-linux-musl/yaccpar" | |
} | |
goto yystack; /* reset registers in driver code */ | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment