Home | History | Annotate | Line # | Download | only in src
      1 /* original parser id follows */
      2 /* yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93" */
      3 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
      4 
      5 #define YYBYACC 1
      6 #define YYMAJOR 1
      7 #define YYMINOR 9
      8 
      9 #define YYEMPTY        (-1)
     10 #define yyclearin      (yychar = YYEMPTY)
     11 #define yyerrok        (yyerrflag = 0)
     12 #define YYRECOVERING() (yyerrflag != 0)
     13 #define YYENOMEM       (-2)
     14 #define YYEOF          0
     15 #undef YYBTYACC
     16 #define YYBTYACC 0
     17 #define YYDEBUGSTR YYPREFIX "debug"
     18 #define YYPREFIX "yy"
     19 
     20 #define YYPURE 0
     21 
     22 /*  Copyright (c) 1990 The Regents of the University of California. */
     23 /*  All rights reserved. */
     24 
     25 /*  This code is derived from software contributed to Berkeley by */
     26 /*  Vern Paxson. */
     27 
     28 /*  The United States Government has rights in this work pursuant */
     29 /*  to contract no. DE-AC03-76SF00098 between the United States */
     30 /*  Department of Energy and the University of California. */
     31 
     32 /*  This file is part of flex. */
     33 
     34 /*  Redistribution and use in source and binary forms, with or without */
     35 /*  modification, are permitted provided that the following conditions */
     36 /*  are met: */
     37 
     38 /*  1. Redistributions of source code must retain the above copyright */
     39 /*     notice, this list of conditions and the following disclaimer. */
     40 /*  2. Redistributions in binary form must reproduce the above copyright */
     41 /*     notice, this list of conditions and the following disclaimer in the */
     42 /*     documentation and/or other materials provided with the distribution. */
     43 
     44 /*  Neither the name of the University nor the names of its contributors */
     45 /*  may be used to endorse or promote products derived from this software */
     46 /*  without specific prior written permission. */
     47 
     48 /*  THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
     49 /*  IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
     50 /*  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
     51 /*  PURPOSE. */
     52 #include "flexdef.h"
     53 __RCSID("$NetBSD: initparse.c,v 1.4 2017/01/07 15:43:27 christos Exp $");
     54 
     55 #include "tables.h"
     56 
     57 int pat, scnum, eps, headcnt, trailcnt, lastchar, i, rulelen;
     58 int trlcontxt, xcluflg, currccl, cclsorted, varlength, variable_trail_rule;
     59 
     60 int *scon_stk;
     61 int scon_stk_ptr;
     62 
     63 static int madeany = false;  /* whether we've made the '.' character class */
     64 static int ccldot, cclany;
     65 int previous_continued_action;	/* whether the previous rule's action was '|' */
     66 
     67 #define format_warn3(fmt, a1, a2) \
     68 	do{ \
     69         char fw3_msg[MAXLINE];\
     70         snprintf( fw3_msg, MAXLINE,(fmt), (a1), (a2) );\
     71         lwarn( fw3_msg );\
     72 	}while(0)
     73 
     74 /* Expand a POSIX character class expression. */
     75 #define CCL_EXPR(func) \
     76 	do{ \
     77 	int c; \
     78 	for ( c = 0; c < csize; ++c ) \
     79 		if ( isascii(c) && func(c) ) \
     80 			ccladd( currccl, c ); \
     81 	}while(0)
     82 
     83 /* negated class */
     84 #define CCL_NEG_EXPR(func) \
     85 	do{ \
     86 	int c; \
     87 	for ( c = 0; c < csize; ++c ) \
     88 		if ( !func(c) ) \
     89 			ccladd( currccl, c ); \
     90 	}while(0)
     91 
     92 /* While POSIX defines isblank(), it's not ANSI C. */
     93 #define IS_BLANK(c) ((c) == ' ' || (c) == '\t')
     94 
     95 /* On some over-ambitious machines, such as DEC Alpha's, the default
     96  * token type is "long" instead of "int"; this leads to problems with
     97  * declaring yylval in flexdef.h.  But so far, all the yacc's I've seen
     98  * wrap their definitions of YYSTYPE with "#ifndef YYSTYPE"'s, so the
     99  * following should ensure that the default token type is "int".
    100  */
    101 #define YYSTYPE int
    102 
    103 
    104 #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
    105 /* Default: YYSTYPE is the semantic value type. */
    106 typedef int YYSTYPE;
    107 # define YYSTYPE_IS_DECLARED 1
    108 #endif
    109 
    110 /* compatibility with bison */
    111 #ifdef YYPARSE_PARAM
    112 /* compatibility with FreeBSD */
    113 # ifdef YYPARSE_PARAM_TYPE
    114 #  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
    115 # else
    116 #  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
    117 # endif
    118 #else
    119 # define YYPARSE_DECL() yyparse(void)
    120 #endif
    121 
    122 /* Parameters sent to lex. */
    123 #ifdef YYLEX_PARAM
    124 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
    125 # define YYLEX yylex(YYLEX_PARAM)
    126 #else
    127 # define YYLEX_DECL() yylex(void)
    128 # define YYLEX yylex()
    129 #endif
    130 
    131 /* Parameters sent to yyerror. */
    132 #ifndef YYERROR_DECL
    133 #define YYERROR_DECL() yyerror(const char *s)
    134 #endif
    135 #ifndef YYERROR_CALL
    136 #define YYERROR_CALL(msg) yyerror(msg)
    137 #endif
    138 
    139 extern int YYPARSE_DECL();
    140 
    141 #define CHAR 257
    142 #define NUMBER 258
    143 #define SECTEND 259
    144 #define SCDECL 260
    145 #define XSCDECL 261
    146 #define NAME 262
    147 #define PREVCCL 263
    148 #define EOF_OP 264
    149 #define TOK_OPTION 265
    150 #define TOK_OUTFILE 266
    151 #define TOK_PREFIX 267
    152 #define TOK_YYCLASS 268
    153 #define TOK_HEADER_FILE 269
    154 #define TOK_EXTRA_TYPE 270
    155 #define TOK_TABLES_FILE 271
    156 #define CCE_ALNUM 272
    157 #define CCE_ALPHA 273
    158 #define CCE_BLANK 274
    159 #define CCE_CNTRL 275
    160 #define CCE_DIGIT 276
    161 #define CCE_GRAPH 277
    162 #define CCE_LOWER 278
    163 #define CCE_PRINT 279
    164 #define CCE_PUNCT 280
    165 #define CCE_SPACE 281
    166 #define CCE_UPPER 282
    167 #define CCE_XDIGIT 283
    168 #define CCE_NEG_ALNUM 284
    169 #define CCE_NEG_ALPHA 285
    170 #define CCE_NEG_BLANK 286
    171 #define CCE_NEG_CNTRL 287
    172 #define CCE_NEG_DIGIT 288
    173 #define CCE_NEG_GRAPH 289
    174 #define CCE_NEG_LOWER 290
    175 #define CCE_NEG_PRINT 291
    176 #define CCE_NEG_PUNCT 292
    177 #define CCE_NEG_SPACE 293
    178 #define CCE_NEG_UPPER 294
    179 #define CCE_NEG_XDIGIT 295
    180 #define CCL_OP_DIFF 296
    181 #define CCL_OP_UNION 297
    182 #define BEGIN_REPEAT_POSIX 298
    183 #define END_REPEAT_POSIX 299
    184 #define BEGIN_REPEAT_FLEX 300
    185 #define END_REPEAT_FLEX 301
    186 #define YYERRCODE 256
    187 typedef int YYINT;
    188 static const YYINT yylhs[] = {                           -1,
    189     0,    1,    2,    2,    2,    2,    3,    6,    6,    7,
    190     7,    7,    8,    9,    9,   10,   10,   10,   10,   10,
    191    10,    4,    4,    4,    5,   12,   12,   12,   12,   14,
    192    11,   11,   11,   15,   15,   15,   16,   13,   13,   13,
    193    13,   18,   18,   17,   19,   19,   19,   19,   19,   20,
    194    20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
    195    20,   21,   21,   21,   23,   23,   24,   24,   24,   24,
    196    25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
    197    25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
    198    25,   25,   25,   25,   22,   22,
    199 };
    200 static const YYINT yylen[] = {                            2,
    201     5,    0,    3,    2,    0,    1,    1,    1,    1,    2,
    202     1,    1,    2,    2,    0,    3,    3,    3,    3,    3,
    203     3,    5,    5,    0,    0,    2,    1,    1,    1,    0,
    204     4,    3,    0,    3,    1,    1,    1,    2,    3,    2,
    205     1,    3,    1,    2,    2,    1,    6,    5,    4,    2,
    206     2,    2,    6,    5,    4,    1,    1,    1,    3,    3,
    207     1,    3,    3,    1,    3,    4,    4,    2,    2,    0,
    208     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    209     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    210     1,    1,    1,    1,    2,    0,
    211 };
    212 static const YYINT yydefred[] = {                         2,
    213     0,    0,    6,    0,    7,    8,    9,   15,   24,    0,
    214     4,    0,    0,   12,   11,    0,    0,    0,    0,    0,
    215     0,    0,   14,    0,    1,    0,   10,    0,    0,    0,
    216     0,    0,    0,    0,    0,   24,    0,   16,   18,   19,
    217    20,   17,   21,   32,   36,   37,    0,   35,    0,   29,
    218    61,   58,   28,    0,   56,   96,    0,    0,    0,   27,
    219     0,    0,    0,    0,    0,   64,   31,    0,   23,   26,
    220     0,    0,   70,    0,   22,    0,   40,    0,   44,    0,
    221     0,    0,   50,   51,   52,    0,    0,   34,   95,   59,
    222    60,    0,    0,   71,   72,   73,   74,   75,   76,   77,
    223    78,   79,   80,   82,   81,   83,   84,   85,   86,   87,
    224    88,   93,   89,   90,   91,   94,   92,   65,   69,   39,
    225     0,    0,    0,   62,   63,   66,    0,   49,    0,   55,
    226     0,   67,    0,   48,    0,   54,   47,   53,
    227 };
    228 #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)
    229 static const YYINT yystos[] = {                           0,
    230   303,  304,  256,  305,  259,  260,  261,  265,  306,  309,
    231   311,  312,  307,  256,  262,  310,  266,  267,  268,  269,
    232   270,  271,  313,   60,  308,  314,  262,   61,   61,   61,
    233    61,   61,   61,   42,  317,  123,  308,  262,  262,  262,
    234   262,  262,  262,   62,  256,  262,  318,  319,  307,  256,
    235   257,  263,  264,   94,   46,   34,   40,   91,  315,  316,
    236   320,  321,  322,  323,  324,  326,   62,   44,  125,  316,
    237   325,  321,   94,  327,   10,  321,   36,  124,   47,  298,
    238   323,  300,   42,   43,   63,  296,  297,  319,  257,   34,
    239    41,  327,  257,  272,  273,  274,  275,  276,  277,  278,
    240   279,  280,  281,  282,  283,  284,  285,  286,  287,  288,
    241   289,  290,  291,  292,  293,  294,  295,   93,  328,   36,
    242   322,  258,  258,  326,  326,   93,   45,  299,   44,  301,
    243    44,  257,  258,  299,  258,  301,  299,  301,
    244 };
    245 #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */
    246 static const YYINT yydgoto[] = {                          1,
    247     2,    4,    9,   13,   25,   10,   16,   11,   12,   23,
    248    26,   59,   60,   35,   47,   48,   61,   62,   63,   64,
    249    65,   71,   66,   74,  119,
    250 };
    251 static const YYINT yysindex[] = {                         0,
    252     0, -222,    0, -155,    0,    0,    0,    0,    0, -215,
    253     0, -123,    6,    0,    0, -193,   10,   21,   26,   31,
    254    35,   37,    0,   59,    0,  -44,    0, -147, -145, -140,
    255  -133, -132, -129,   75, -214,    0,  -19,    0,    0,    0,
    256     0,    0,    0,    0,    0,    0,   23,    0,  -48,    0,
    257     0,    0,    0,  -17,    0,    0,  -17,   27,  128,    0,
    258   -17,   -1,  -30,  -41, -189,    0,    0, -121,    0,    0,
    259   -31,  -34,    0,  -87,    0,  -25,    0,  -17,    0, -109,
    260   -41, -108,    0,    0,    0,   60,   60,    0,    0,    0,
    261     0,   46,  107,    0,    0,    0,    0,    0,    0,    0,
    262     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    263     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    264   -30,  -36,  -39,    0,    0,    0, -104,    0, -219,    0,
    265  -238,    0, -144,    0, -143,    0,    0,    0,
    266 };
    267 static const YYINT yyrindex[] = {                         0,
    268     0, -141,    0,    0,    0,    0,    0,    0,    0,    0,
    269     0, -134,    9,    0,    0, -125,    0,    0,    0,    0,
    270     0,    0,    0, -178,    0,   22,    0,    0,    0,    0,
    271     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    272     0,    0,    0,    0,    0,    0,    0,    0,  -21,    0,
    273     0,    0,    0,    0,    0,    0,    0,   85,    0,    0,
    274     0,  144,   47,    4,  -10,    0,    0,    0,    0,    0,
    275     0,    0,    0,    0,    0,  146,    0,    0,    0,    0,
    276    18,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    277     0,    0,  124,    0,    0,    0,    0,    0,    0,    0,
    278     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    279     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    280    50,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    281     0,    0,    0,    0,    0,    0,    0,    0,
    282 };
    283 #if YYBTYACC
    284 static const YYINT yycindex[] = {                         0,
    285     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    286     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    287     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    288     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    289     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    290     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    291     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    292     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    293     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    294     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    295     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    296     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    297     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    298     0,    0,    0,    0,    0,    0,    0,    0,
    299 };
    300 #endif
    301 static const YYINT yygindex[] = {                         0,
    302     0,    0,    0,  121,  133,    0,    0,    0,    0,    0,
    303     0,    0,  106,    0,    0,   93,    0,   32,   84,  -45,
    304     0,    0,   25,   90,    0,
    305 };
    306 #define YYTABLESIZE 419
    307 static const YYINT yytable[] = {                         57,
    308    83,   84,   90,   56,  131,  118,   91,  129,   25,   57,
    309   120,   24,   33,   46,   56,   55,   56,   81,   33,  135,
    310    57,   85,   57,   57,   33,   57,   55,   45,   55,   57,
    311    57,   57,   57,    3,   77,   57,   57,   46,  133,   46,
    312    14,   45,   33,   46,   46,   79,   15,   46,   33,   46,
    313    46,   45,   57,   45,   33,   25,   43,   45,   45,   42,
    314    58,   25,  136,   45,   45,   24,   68,   25,   27,   33,
    315    28,   58,   33,   58,   54,   81,   69,   30,   36,  134,
    316    57,   29,   43,   30,   67,   42,   30,   43,   72,   78,
    317    42,   31,   76,   43,   46,   32,   42,   33,   78,   33,
    318    34,   33,   33,    5,    6,    7,   86,   87,   45,    8,
    319   124,  125,   25,   57,   38,   25,   39,    5,    5,    5,
    320    73,   40,   78,    5,   13,   13,   13,   46,   41,   42,
    321    13,   33,   43,    3,    3,    3,   44,   75,  126,    3,
    322    46,   45,   17,   18,   19,   20,   21,   22,  122,  123,
    323    58,  127,  132,   41,  137,   38,   49,  138,   37,   70,
    324    88,  121,   92,    0,    0,    0,    0,    0,    0,   93,
    325    43,    0,    0,   42,    0,    0,    0,   70,    0,    0,
    326     0,    0,    0,    0,   94,   95,   96,   97,   98,   99,
    327   100,  101,  102,  103,  104,  105,  106,  107,  108,  109,
    328   110,  111,  112,  113,  114,  115,  116,  117,    0,    0,
    329     0,    0,    0,    0,    0,    0,   68,    0,    0,    0,
    330     0,    0,    0,    0,    0,   89,   51,    0,    0,    0,
    331     0,    0,   52,    0,   33,   33,   50,   51,    0,   51,
    332     0,   33,   33,   52,   53,   52,   57,    0,    0,    0,
    333     0,    0,   57,    0,    0,    0,    0,    0,   82,    0,
    334    46,  130,  128,    0,   33,   33,   46,   80,    0,    0,
    335     0,   33,   33,    0,   45,    0,    0,   25,   25,    0,
    336    45,    0,    0,    0,   25,   25,    0,   57,    0,   57,
    337     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    338     0,   46,   93,    0,    0,    0,    0,    0,    0,    0,
    339     0,    0,    0,    0,    0,   45,    0,   94,   95,   96,
    340    97,   98,   99,  100,  101,  102,  103,  104,  105,  106,
    341   107,  108,  109,  110,  111,  112,  113,  114,  115,  116,
    342   117,   70,    0,    0,    0,    0,    0,    0,    0,    0,
    343     0,    0,    0,    0,    0,    0,   70,   70,   70,   70,
    344    70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
    345    70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
    346    68,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    347     0,    0,    0,    0,    0,   68,   68,   68,   68,   68,
    348    68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
    349    68,   68,   68,   68,   68,   68,   68,   68,   68,
    350 };
    351 static const YYINT yycheck[] = {                         10,
    352    42,   43,   34,   34,   44,   93,   41,   44,    0,   40,
    353    36,   60,   34,   10,   34,   46,   34,   63,   40,  258,
    354    40,   63,   40,   34,   46,   36,   46,   10,   46,   40,
    355    41,   42,   43,  256,   36,   46,   47,   34,  258,   36,
    356   256,  256,   34,   40,   41,   47,  262,  262,   40,   46,
    357    47,   34,   63,   36,   46,   34,   10,   40,   41,   10,
    358    91,   40,  301,   46,   47,   60,   44,   46,  262,   91,
    359    61,   91,   94,   91,   94,  121,  125,  256,  123,  299,
    360    91,   61,   36,  262,   62,   36,   61,   41,   57,  124,
    361    41,   61,   61,   47,   91,   61,   47,   61,  124,   91,
    362    42,  123,   94,  259,  260,  261,  296,  297,   91,  265,
    363    86,   87,   91,  124,  262,   94,  262,  259,  260,  261,
    364    94,  262,  124,  265,  259,  260,  261,  124,  262,  262,
    365   265,  123,  262,  259,  260,  261,   62,   10,   93,  265,
    366   262,  124,  266,  267,  268,  269,  270,  271,  258,  258,
    367    91,   45,  257,   10,  299,   10,   36,  301,   26,   54,
    368    68,   78,   73,   -1,   -1,   -1,   -1,   -1,   -1,  257,
    369   124,   -1,   -1,  124,   -1,   -1,   -1,   93,   -1,   -1,
    370    -1,   -1,   -1,   -1,  272,  273,  274,  275,  276,  277,
    371   278,  279,  280,  281,  282,  283,  284,  285,  286,  287,
    372   288,  289,  290,  291,  292,  293,  294,  295,   -1,   -1,
    373    -1,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,   -1,
    374    -1,   -1,   -1,   -1,   -1,  257,  257,   -1,   -1,   -1,
    375    -1,   -1,  263,   -1,  256,  257,  256,  257,   -1,  257,
    376    -1,  263,  264,  263,  264,  263,  257,   -1,   -1,   -1,
    377    -1,   -1,  263,   -1,   -1,   -1,   -1,   -1,  300,   -1,
    378   257,  301,  299,   -1,  256,  257,  263,  298,   -1,   -1,
    379    -1,  263,  264,   -1,  257,   -1,   -1,  256,  257,   -1,
    380   263,   -1,   -1,   -1,  263,  264,   -1,  298,   -1,  300,
    381    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    382    -1,  298,  257,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    383    -1,   -1,   -1,   -1,   -1,  298,   -1,  272,  273,  274,
    384   275,  276,  277,  278,  279,  280,  281,  282,  283,  284,
    385   285,  286,  287,  288,  289,  290,  291,  292,  293,  294,
    386   295,  257,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    387    -1,   -1,   -1,   -1,   -1,   -1,  272,  273,  274,  275,
    388   276,  277,  278,  279,  280,  281,  282,  283,  284,  285,
    389   286,  287,  288,  289,  290,  291,  292,  293,  294,  295,
    390   257,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    391    -1,   -1,   -1,   -1,   -1,  272,  273,  274,  275,  276,
    392   277,  278,  279,  280,  281,  282,  283,  284,  285,  286,
    393   287,  288,  289,  290,  291,  292,  293,  294,  295,
    394 };
    395 #if YYBTYACC
    396 static const YYINT yyctable[] = {                        -1,
    397    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    398    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    399    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    400    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    401    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    402    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    403    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    404    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    405    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    406    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    407    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    408    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    409    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    410    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    411    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    412    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    413    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    414    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    415    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    416    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    417    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    418    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    419    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    420    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    421    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    422    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    423    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    424    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    425    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    426    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    427    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    428    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    429    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    430    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    431    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    432    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    433    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    434    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    435    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    436    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    437    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    438    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    439 };
    440 #endif
    441 #define YYFINAL 1
    442 #ifndef YYDEBUG
    443 #define YYDEBUG 0
    444 #endif
    445 #define YYMAXTOKEN 301
    446 #define YYUNDFTOKEN 329
    447 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
    448 #if YYDEBUG
    449 static const char *const yyname[] = {
    450 
    451 "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    452 "'\"'",0,"'$'",0,0,0,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",0,0,0,0,0,
    453 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,
    454 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,0,
    455 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,0,
    456 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,0,0,0,0,0,0,0,0,0,0,
    457 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,0,0,0,0,0,0,0,0,0,0,
    458 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","CHAR","NUMBER","SECTEND",
    459 "SCDECL","XSCDECL","NAME","PREVCCL","EOF_OP","TOK_OPTION","TOK_OUTFILE",
    460 "TOK_PREFIX","TOK_YYCLASS","TOK_HEADER_FILE","TOK_EXTRA_TYPE","TOK_TABLES_FILE",
    461 "CCE_ALNUM","CCE_ALPHA","CCE_BLANK","CCE_CNTRL","CCE_DIGIT","CCE_GRAPH",
    462 "CCE_LOWER","CCE_PRINT","CCE_PUNCT","CCE_SPACE","CCE_UPPER","CCE_XDIGIT",
    463 "CCE_NEG_ALNUM","CCE_NEG_ALPHA","CCE_NEG_BLANK","CCE_NEG_CNTRL","CCE_NEG_DIGIT",
    464 "CCE_NEG_GRAPH","CCE_NEG_LOWER","CCE_NEG_PRINT","CCE_NEG_PUNCT","CCE_NEG_SPACE",
    465 "CCE_NEG_UPPER","CCE_NEG_XDIGIT","CCL_OP_DIFF","CCL_OP_UNION",
    466 "BEGIN_REPEAT_POSIX","END_REPEAT_POSIX","BEGIN_REPEAT_FLEX","END_REPEAT_FLEX",
    467 "$accept","goal","initlex","sect1","sect1end","sect2","initforrule",
    468 "startconddecl","namelist1","options","optionlist","option","scon","flexrule",
    469 "rule","scon_stk_ptr","namelist2","sconname","re2","re","series","singleton",
    470 "fullccl","string","braceccl","ccl","ccl_expr","illegal-symbol",
    471 };
    472 static const char *const yyrule[] = {
    473 "$accept : goal",
    474 "goal : initlex sect1 sect1end sect2 initforrule",
    475 "initlex :",
    476 "sect1 : sect1 startconddecl namelist1",
    477 "sect1 : sect1 options",
    478 "sect1 :",
    479 "sect1 : error",
    480 "sect1end : SECTEND",
    481 "startconddecl : SCDECL",
    482 "startconddecl : XSCDECL",
    483 "namelist1 : namelist1 NAME",
    484 "namelist1 : NAME",
    485 "namelist1 : error",
    486 "options : TOK_OPTION optionlist",
    487 "optionlist : optionlist option",
    488 "optionlist :",
    489 "option : TOK_OUTFILE '=' NAME",
    490 "option : TOK_EXTRA_TYPE '=' NAME",
    491 "option : TOK_PREFIX '=' NAME",
    492 "option : TOK_YYCLASS '=' NAME",
    493 "option : TOK_HEADER_FILE '=' NAME",
    494 "option : TOK_TABLES_FILE '=' NAME",
    495 "sect2 : sect2 scon initforrule flexrule '\\n'",
    496 "sect2 : sect2 scon '{' sect2 '}'",
    497 "sect2 :",
    498 "initforrule :",
    499 "flexrule : '^' rule",
    500 "flexrule : rule",
    501 "flexrule : EOF_OP",
    502 "flexrule : error",
    503 "scon_stk_ptr :",
    504 "scon : '<' scon_stk_ptr namelist2 '>'",
    505 "scon : '<' '*' '>'",
    506 "scon :",
    507 "namelist2 : namelist2 ',' sconname",
    508 "namelist2 : sconname",
    509 "namelist2 : error",
    510 "sconname : NAME",
    511 "rule : re2 re",
    512 "rule : re2 re '$'",
    513 "rule : re '$'",
    514 "rule : re",
    515 "re : re '|' series",
    516 "re : series",
    517 "re2 : re '/'",
    518 "series : series singleton",
    519 "series : singleton",
    520 "series : series BEGIN_REPEAT_POSIX NUMBER ',' NUMBER END_REPEAT_POSIX",
    521 "series : series BEGIN_REPEAT_POSIX NUMBER ',' END_REPEAT_POSIX",
    522 "series : series BEGIN_REPEAT_POSIX NUMBER END_REPEAT_POSIX",
    523 "singleton : singleton '*'",
    524 "singleton : singleton '+'",
    525 "singleton : singleton '?'",
    526 "singleton : singleton BEGIN_REPEAT_FLEX NUMBER ',' NUMBER END_REPEAT_FLEX",
    527 "singleton : singleton BEGIN_REPEAT_FLEX NUMBER ',' END_REPEAT_FLEX",
    528 "singleton : singleton BEGIN_REPEAT_FLEX NUMBER END_REPEAT_FLEX",
    529 "singleton : '.'",
    530 "singleton : fullccl",
    531 "singleton : PREVCCL",
    532 "singleton : '\"' string '\"'",
    533 "singleton : '(' re ')'",
    534 "singleton : CHAR",
    535 "fullccl : fullccl CCL_OP_DIFF braceccl",
    536 "fullccl : fullccl CCL_OP_UNION braceccl",
    537 "fullccl : braceccl",
    538 "braceccl : '[' ccl ']'",
    539 "braceccl : '[' '^' ccl ']'",
    540 "ccl : ccl CHAR '-' CHAR",
    541 "ccl : ccl CHAR",
    542 "ccl : ccl ccl_expr",
    543 "ccl :",
    544 "ccl_expr : CCE_ALNUM",
    545 "ccl_expr : CCE_ALPHA",
    546 "ccl_expr : CCE_BLANK",
    547 "ccl_expr : CCE_CNTRL",
    548 "ccl_expr : CCE_DIGIT",
    549 "ccl_expr : CCE_GRAPH",
    550 "ccl_expr : CCE_LOWER",
    551 "ccl_expr : CCE_PRINT",
    552 "ccl_expr : CCE_PUNCT",
    553 "ccl_expr : CCE_SPACE",
    554 "ccl_expr : CCE_XDIGIT",
    555 "ccl_expr : CCE_UPPER",
    556 "ccl_expr : CCE_NEG_ALNUM",
    557 "ccl_expr : CCE_NEG_ALPHA",
    558 "ccl_expr : CCE_NEG_BLANK",
    559 "ccl_expr : CCE_NEG_CNTRL",
    560 "ccl_expr : CCE_NEG_DIGIT",
    561 "ccl_expr : CCE_NEG_GRAPH",
    562 "ccl_expr : CCE_NEG_PRINT",
    563 "ccl_expr : CCE_NEG_PUNCT",
    564 "ccl_expr : CCE_NEG_SPACE",
    565 "ccl_expr : CCE_NEG_XDIGIT",
    566 "ccl_expr : CCE_NEG_LOWER",
    567 "ccl_expr : CCE_NEG_UPPER",
    568 "string : string CHAR",
    569 "string :",
    570 
    571 };
    572 #endif
    573 
    574 int      yydebug;
    575 int      yynerrs;
    576 
    577 int      yyerrflag;
    578 int      yychar;
    579 YYSTYPE  yyval;
    580 YYSTYPE  yylval;
    581 
    582 /* define the initial stack-sizes */
    583 #ifdef YYSTACKSIZE
    584 #undef YYMAXDEPTH
    585 #define YYMAXDEPTH  YYSTACKSIZE
    586 #else
    587 #ifdef YYMAXDEPTH
    588 #define YYSTACKSIZE YYMAXDEPTH
    589 #else
    590 #define YYSTACKSIZE 10000
    591 #define YYMAXDEPTH  10000
    592 #endif
    593 #endif
    594 
    595 #define YYINITSTACKSIZE 200
    596 
    597 typedef struct {
    598     unsigned stacksize;
    599     YYINT    *s_base;
    600     YYINT    *s_mark;
    601     YYINT    *s_last;
    602     YYSTYPE  *l_base;
    603     YYSTYPE  *l_mark;
    604 } YYSTACKDATA;
    605 /* variables for the parser stack */
    606 static YYSTACKDATA yystack;
    607 
    608 
    609 /* build_eof_action - build the "<<EOF>>" action for the active start
    610  *                    conditions
    611  */
    612 
    613 void build_eof_action(void)
    614 	{
    615 	int i;
    616 	char action_text[MAXLINE];
    617 
    618 	for ( i = 1; i <= scon_stk_ptr; ++i )
    619 		{
    620 		if ( sceof[scon_stk[i]] )
    621 			format_pinpoint_message(
    622 				"multiple <<EOF>> rules for start condition %s",
    623 				scname[scon_stk[i]] );
    624 
    625 		else
    626 			{
    627 			sceof[scon_stk[i]] = true;
    628 
    629 			if (previous_continued_action /* && previous action was regular */)
    630 				add_action("YY_RULE_SETUP\n");
    631 
    632 			snprintf( action_text, sizeof(action_text), "case YY_STATE_EOF(%s):\n",
    633 				scname[scon_stk[i]] );
    634 			add_action( action_text );
    635 			}
    636 		}
    637 
    638 	line_directive_out(NULL, 1);
    639         add_action("[[");
    640 
    641 	/* This isn't a normal rule after all - don't count it as
    642 	 * such, so we don't have any holes in the rule numbering
    643 	 * (which make generating "rule can never match" warnings
    644 	 * more difficult.
    645 	 */
    646 	--num_rules;
    647 	++num_eof_rules;
    648 	}
    649 
    650 
    651 /* format_synerr - write out formatted syntax error */
    652 
    653 void format_synerr( const char *msg, const char arg[] )
    654 	{
    655 	char errmsg[MAXLINE];
    656 
    657 	(void) snprintf( errmsg, sizeof(errmsg), msg, arg );
    658 	synerr( errmsg );
    659 	}
    660 
    661 
    662 /* synerr - report a syntax error */
    663 
    664 void synerr( const char *str )
    665 	{
    666 	syntaxerror = true;
    667 	pinpoint_message( str );
    668 	}
    669 
    670 
    671 /* format_warn - write out formatted warning */
    672 
    673 void format_warn( const char *msg, const char arg[] )
    674 	{
    675 	char warn_msg[MAXLINE];
    676 
    677 	snprintf( warn_msg, sizeof(warn_msg), msg, arg );
    678 	lwarn( warn_msg );
    679 	}
    680 
    681 
    682 /* lwarn - report a warning, unless -w was given */
    683 
    684 void lwarn( const char *str )
    685 	{
    686 	line_warning( str, linenum );
    687 	}
    688 
    689 /* format_pinpoint_message - write out a message formatted with one string,
    690  *			     pinpointing its location
    691  */
    692 
    693 void format_pinpoint_message( const char *msg, const char arg[] )
    694 	{
    695 	char errmsg[MAXLINE];
    696 
    697 	snprintf( errmsg, sizeof(errmsg), msg, arg );
    698 	pinpoint_message( errmsg );
    699 	}
    700 
    701 
    702 /* pinpoint_message - write out a message, pinpointing its location */
    703 
    704 void pinpoint_message( const char *str )
    705 	{
    706 	line_pinpoint( str, linenum );
    707 	}
    708 
    709 
    710 /* line_warning - report a warning at a given line, unless -w was given */
    711 
    712 void line_warning( const char *str, int line )
    713 	{
    714 	char warning[MAXLINE];
    715 
    716 	if ( ! nowarn )
    717 		{
    718 		snprintf( warning, sizeof(warning), "warning, %s", str );
    719 		line_pinpoint( warning, line );
    720 		}
    721 	}
    722 
    723 
    724 /* line_pinpoint - write out a message, pinpointing it at the given line */
    725 
    726 void line_pinpoint( const char *str, int line )
    727 	{
    728 	fprintf( stderr, "%s:%d: %s\n", infilename, line, str );
    729 	}
    730 
    731 
    732 /* yyerror - eat up an error message from the parser;
    733  *	     currently, messages are ignore
    734  */
    735 
    736 void yyerror( const char *msg )
    737 	{
    738 		(void)msg;
    739 	}
    740 
    741 #if YYDEBUG
    742 #include <stdio.h>		/* needed for printf */
    743 #endif
    744 
    745 #include <stdlib.h>	/* needed for malloc, etc */
    746 #include <string.h>	/* needed for memset */
    747 
    748 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
    749 static int yygrowstack(YYSTACKDATA *data)
    750 {
    751     int i;
    752     unsigned newsize;
    753     YYINT *newss;
    754     YYSTYPE *newvs;
    755 
    756     if ((newsize = data->stacksize) == 0)
    757         newsize = YYINITSTACKSIZE;
    758     else if (newsize >= YYMAXDEPTH)
    759         return YYENOMEM;
    760     else if ((newsize *= 2) > YYMAXDEPTH)
    761         newsize = YYMAXDEPTH;
    762 
    763     i = (int) (data->s_mark - data->s_base);
    764     newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
    765     if (newss == 0)
    766         return YYENOMEM;
    767 
    768     data->s_base = newss;
    769     data->s_mark = newss + i;
    770 
    771     newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
    772     if (newvs == 0)
    773         return YYENOMEM;
    774 
    775     data->l_base = newvs;
    776     data->l_mark = newvs + i;
    777 
    778     data->stacksize = newsize;
    779     data->s_last = data->s_base + newsize - 1;
    780     return 0;
    781 }
    782 
    783 #if YYPURE || defined(YY_NO_LEAKS)
    784 static void yyfreestack(YYSTACKDATA *data)
    785 {
    786     free(data->s_base);
    787     free(data->l_base);
    788     memset(data, 0, sizeof(*data));
    789 }
    790 #else
    791 #define yyfreestack(data) /* nothing */
    792 #endif
    793 
    794 #define YYABORT  goto yyabort
    795 #define YYREJECT goto yyabort
    796 #define YYACCEPT goto yyaccept
    797 #define YYERROR  goto yyerrlab
    798 
    799 int
    800 YYPARSE_DECL()
    801 {
    802     int yym, yyn, yystate;
    803 #if YYDEBUG
    804     const char *yys;
    805 
    806     if ((yys = getenv("YYDEBUG")) != 0)
    807     {
    808         yyn = *yys;
    809         if (yyn >= '0' && yyn <= '9')
    810             yydebug = yyn - '0';
    811     }
    812 #endif
    813 
    814     yynerrs = 0;
    815     yyerrflag = 0;
    816     yychar = YYEMPTY;
    817     yystate = 0;
    818 
    819 #if YYPURE
    820     memset(&yystack, 0, sizeof(yystack));
    821 #endif
    822 
    823     if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
    824     yystack.s_mark = yystack.s_base;
    825     yystack.l_mark = yystack.l_base;
    826     yystate = 0;
    827     *yystack.s_mark = 0;
    828 
    829 yyloop:
    830     if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
    831     if (yychar < 0)
    832     {
    833         if ((yychar = YYLEX) < 0) yychar = YYEOF;
    834 #if YYDEBUG
    835         if (yydebug)
    836         {
    837             yys = yyname[YYTRANSLATE(yychar)];
    838             printf("%sdebug: state %d, reading %d (%s)\n",
    839                     YYPREFIX, yystate, yychar, yys);
    840         }
    841 #endif
    842     }
    843     if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
    844             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
    845     {
    846 #if YYDEBUG
    847         if (yydebug)
    848             printf("%sdebug: state %d, shifting to state %d\n",
    849                     YYPREFIX, yystate, yytable[yyn]);
    850 #endif
    851         if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
    852         {
    853             goto yyoverflow;
    854         }
    855         yystate = yytable[yyn];
    856         *++yystack.s_mark = yytable[yyn];
    857         *++yystack.l_mark = yylval;
    858         yychar = YYEMPTY;
    859         if (yyerrflag > 0)  --yyerrflag;
    860         goto yyloop;
    861     }
    862     if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
    863             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
    864     {
    865         yyn = yytable[yyn];
    866         goto yyreduce;
    867     }
    868     if (yyerrflag) goto yyinrecovery;
    869 
    870     YYERROR_CALL("syntax error");
    871 
    872     goto yyerrlab;
    873 
    874 yyerrlab:
    875     ++yynerrs;
    876 
    877 yyinrecovery:
    878     if (yyerrflag < 3)
    879     {
    880         yyerrflag = 3;
    881         for (;;)
    882         {
    883             if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
    884                     yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
    885             {
    886 #if YYDEBUG
    887                 if (yydebug)
    888                     printf("%sdebug: state %d, error recovery shifting\
    889  to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
    890 #endif
    891                 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
    892                 {
    893                     goto yyoverflow;
    894                 }
    895                 yystate = yytable[yyn];
    896                 *++yystack.s_mark = yytable[yyn];
    897                 *++yystack.l_mark = yylval;
    898                 goto yyloop;
    899             }
    900             else
    901             {
    902 #if YYDEBUG
    903                 if (yydebug)
    904                     printf("%sdebug: error recovery discarding state %d\n",
    905                             YYPREFIX, *yystack.s_mark);
    906 #endif
    907                 if (yystack.s_mark <= yystack.s_base) goto yyabort;
    908                 --yystack.s_mark;
    909                 --yystack.l_mark;
    910             }
    911         }
    912     }
    913     else
    914     {
    915         if (yychar == YYEOF) goto yyabort;
    916 #if YYDEBUG
    917         if (yydebug)
    918         {
    919             yys = yyname[YYTRANSLATE(yychar)];
    920             printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
    921                     YYPREFIX, yystate, yychar, yys);
    922         }
    923 #endif
    924         yychar = YYEMPTY;
    925         goto yyloop;
    926     }
    927 
    928 yyreduce:
    929 #if YYDEBUG
    930     if (yydebug)
    931         printf("%sdebug: state %d, reducing by rule %d (%s)\n",
    932                 YYPREFIX, yystate, yyn, yyrule[yyn]);
    933 #endif
    934     yym = yylen[yyn];
    935     if (yym)
    936         yyval = yystack.l_mark[1-yym];
    937     else
    938         memset(&yyval, 0, sizeof yyval);
    939     switch (yyn)
    940     {
    941 case 1:
    942 	{ /* add default rule */
    943 			int def_rule;
    944 
    945 			pat = cclinit();
    946 			cclnegate( pat );
    947 
    948 			def_rule = mkstate( -pat );
    949 
    950 			/* Remember the number of the default rule so we
    951 			 * don't generate "can't match" warnings for it.
    952 			 */
    953 			default_rule = num_rules;
    954 
    955 			finish_rule( def_rule, false, 0, 0, 0);
    956 
    957 			for ( i = 1; i <= lastsc; ++i )
    958 				scset[i] = mkbranch( scset[i], def_rule );
    959 
    960 			if ( spprdflt )
    961 				add_action(
    962 				"YY_FATAL_ERROR( \"flex scanner jammed\" )" );
    963 			else
    964 				add_action( "ECHO" );
    965 
    966 			add_action( ";\n\tYY_BREAK]]\n" );
    967 			}
    968 break;
    969 case 2:
    970 	{ /* initialize for processing rules */
    971 
    972 			/* Create default DFA start condition. */
    973 			scinstal( "INITIAL", false );
    974 			}
    975 break;
    976 case 6:
    977 	{ synerr( _("unknown error processing section 1") ); }
    978 break;
    979 case 7:
    980 	{
    981 			check_options();
    982 			scon_stk = allocate_integer_array( lastsc + 1 );
    983 			scon_stk_ptr = 0;
    984 			}
    985 break;
    986 case 8:
    987 	{ xcluflg = false; }
    988 break;
    989 case 9:
    990 	{ xcluflg = true; }
    991 break;
    992 case 10:
    993 	{ scinstal( nmstr, xcluflg ); }
    994 break;
    995 case 11:
    996 	{ scinstal( nmstr, xcluflg ); }
    997 break;
    998 case 12:
    999 	{ synerr( _("bad start condition list") ); }
   1000 break;
   1001 case 16:
   1002 	{
   1003 			outfilename = xstrdup(nmstr);
   1004 			did_outfilename = 1;
   1005 			}
   1006 break;
   1007 case 17:
   1008 	{ extra_type = xstrdup(nmstr); }
   1009 break;
   1010 case 18:
   1011 	{ prefix = xstrdup(nmstr);
   1012                           if (strchr(prefix, '[') || strchr(prefix, ']'))
   1013                               flexerror(_("Prefix must not contain [ or ]")); }
   1014 break;
   1015 case 19:
   1016 	{ yyclass = xstrdup(nmstr); }
   1017 break;
   1018 case 20:
   1019 	{ headerfilename = xstrdup(nmstr); }
   1020 break;
   1021 case 21:
   1022 	{ tablesext = true; tablesfilename = xstrdup(nmstr); }
   1023 break;
   1024 case 22:
   1025 	{ scon_stk_ptr = yystack.l_mark[-3]; }
   1026 break;
   1027 case 23:
   1028 	{ scon_stk_ptr = yystack.l_mark[-3]; }
   1029 break;
   1030 case 25:
   1031 	{
   1032 			/* Initialize for a parse of one rule. */
   1033 			trlcontxt = variable_trail_rule = varlength = false;
   1034 			trailcnt = headcnt = rulelen = 0;
   1035 			current_state_type = STATE_NORMAL;
   1036 			previous_continued_action = continued_action;
   1037 			in_rule = true;
   1038 
   1039 			new_rule();
   1040 			}
   1041 break;
   1042 case 26:
   1043 	{
   1044 			pat = yystack.l_mark[0];
   1045 			finish_rule( pat, variable_trail_rule,
   1046 				headcnt, trailcnt , previous_continued_action);
   1047 
   1048 			if ( scon_stk_ptr > 0 )
   1049 				{
   1050 				for ( i = 1; i <= scon_stk_ptr; ++i )
   1051 					scbol[scon_stk[i]] =
   1052 						mkbranch( scbol[scon_stk[i]],
   1053 								pat );
   1054 				}
   1055 
   1056 			else
   1057 				{
   1058 				/* Add to all non-exclusive start conditions,
   1059 				 * including the default (0) start condition.
   1060 				 */
   1061 
   1062 				for ( i = 1; i <= lastsc; ++i )
   1063 					if ( ! scxclu[i] )
   1064 						scbol[i] = mkbranch( scbol[i],
   1065 									pat );
   1066 				}
   1067 
   1068 			if ( ! bol_needed )
   1069 				{
   1070 				bol_needed = true;
   1071 
   1072 				if ( performance_report > 1 )
   1073 					pinpoint_message(
   1074 			"'^' operator results in sub-optimal performance" );
   1075 				}
   1076 			}
   1077 break;
   1078 case 27:
   1079 	{
   1080 			pat = yystack.l_mark[0];
   1081 			finish_rule( pat, variable_trail_rule,
   1082 				headcnt, trailcnt , previous_continued_action);
   1083 
   1084 			if ( scon_stk_ptr > 0 )
   1085 				{
   1086 				for ( i = 1; i <= scon_stk_ptr; ++i )
   1087 					scset[scon_stk[i]] =
   1088 						mkbranch( scset[scon_stk[i]],
   1089 								pat );
   1090 				}
   1091 
   1092 			else
   1093 				{
   1094 				for ( i = 1; i <= lastsc; ++i )
   1095 					if ( ! scxclu[i] )
   1096 						scset[i] =
   1097 							mkbranch( scset[i],
   1098 								pat );
   1099 				}
   1100 			}
   1101 break;
   1102 case 28:
   1103 	{
   1104 			if ( scon_stk_ptr > 0 )
   1105 				build_eof_action();
   1106 
   1107 			else
   1108 				{
   1109 				/* This EOF applies to all start conditions
   1110 				 * which don't already have EOF actions.
   1111 				 */
   1112 				for ( i = 1; i <= lastsc; ++i )
   1113 					if ( ! sceof[i] )
   1114 						scon_stk[++scon_stk_ptr] = i;
   1115 
   1116 				if ( scon_stk_ptr == 0 )
   1117 					lwarn(
   1118 			"all start conditions already have <<EOF>> rules" );
   1119 
   1120 				else
   1121 					build_eof_action();
   1122 				}
   1123 			}
   1124 break;
   1125 case 29:
   1126 	{ synerr( _("unrecognized rule") ); }
   1127 break;
   1128 case 30:
   1129 	{ yyval = scon_stk_ptr; }
   1130 break;
   1131 case 31:
   1132 	{ yyval = yystack.l_mark[-2]; }
   1133 break;
   1134 case 32:
   1135 	{
   1136 			yyval = scon_stk_ptr;
   1137 
   1138 			for ( i = 1; i <= lastsc; ++i )
   1139 				{
   1140 				int j;
   1141 
   1142 				for ( j = 1; j <= scon_stk_ptr; ++j )
   1143 					if ( scon_stk[j] == i )
   1144 						break;
   1145 
   1146 				if ( j > scon_stk_ptr )
   1147 					scon_stk[++scon_stk_ptr] = i;
   1148 				}
   1149 			}
   1150 break;
   1151 case 33:
   1152 	{ yyval = scon_stk_ptr; }
   1153 break;
   1154 case 36:
   1155 	{ synerr( _("bad start condition list") ); }
   1156 break;
   1157 case 37:
   1158 	{
   1159 			if ( (scnum = sclookup( nmstr )) == 0 )
   1160 				format_pinpoint_message(
   1161 					"undeclared start condition %s",
   1162 					nmstr );
   1163 			else
   1164 				{
   1165 				for ( i = 1; i <= scon_stk_ptr; ++i )
   1166 					if ( scon_stk[i] == scnum )
   1167 						{
   1168 						format_warn(
   1169 							"<%s> specified twice",
   1170 							scname[scnum] );
   1171 						break;
   1172 						}
   1173 
   1174 				if ( i > scon_stk_ptr )
   1175 					scon_stk[++scon_stk_ptr] = scnum;
   1176 				}
   1177 			}
   1178 break;
   1179 case 38:
   1180 	{
   1181 			if ( transchar[lastst[yystack.l_mark[0]]] != SYM_EPSILON )
   1182 				/* Provide final transition \now/ so it
   1183 				 * will be marked as a trailing context
   1184 				 * state.
   1185 				 */
   1186 				yystack.l_mark[0] = link_machines( yystack.l_mark[0],
   1187 						mkstate( SYM_EPSILON ) );
   1188 
   1189 			mark_beginning_as_normal( yystack.l_mark[0] );
   1190 			current_state_type = STATE_NORMAL;
   1191 
   1192 			if ( previous_continued_action )
   1193 				{
   1194 				/* We need to treat this as variable trailing
   1195 				 * context so that the backup does not happen
   1196 				 * in the action but before the action switch
   1197 				 * statement.  If the backup happens in the
   1198 				 * action, then the rules "falling into" this
   1199 				 * one's action will *also* do the backup,
   1200 				 * erroneously.
   1201 				 */
   1202 				if ( ! varlength || headcnt != 0 )
   1203 					lwarn(
   1204 		"trailing context made variable due to preceding '|' action" );
   1205 
   1206 				/* Mark as variable. */
   1207 				varlength = true;
   1208 				headcnt = 0;
   1209 
   1210 				}
   1211 
   1212 			if ( lex_compat || (varlength && headcnt == 0) )
   1213 				{ /* variable trailing context rule */
   1214 				/* Mark the first part of the rule as the
   1215 				 * accepting "head" part of a trailing
   1216 				 * context rule.
   1217 				 *
   1218 				 * By the way, we didn't do this at the
   1219 				 * beginning of this production because back
   1220 				 * then current_state_type was set up for a
   1221 				 * trail rule, and add_accept() can create
   1222 				 * a new state ...
   1223 				 */
   1224 				add_accept( yystack.l_mark[-1],
   1225 					num_rules | YY_TRAILING_HEAD_MASK );
   1226 				variable_trail_rule = true;
   1227 				}
   1228 
   1229 			else
   1230 				trailcnt = rulelen;
   1231 
   1232 			yyval = link_machines( yystack.l_mark[-1], yystack.l_mark[0] );
   1233 			}
   1234 break;
   1235 case 39:
   1236 	{ synerr( _("trailing context used twice") ); }
   1237 break;
   1238 case 40:
   1239 	{
   1240 			headcnt = 0;
   1241 			trailcnt = 1;
   1242 			rulelen = 1;
   1243 			varlength = false;
   1244 
   1245 			current_state_type = STATE_TRAILING_CONTEXT;
   1246 
   1247 			if ( trlcontxt )
   1248 				{
   1249 				synerr( _("trailing context used twice") );
   1250 				yyval = mkstate( SYM_EPSILON );
   1251 				}
   1252 
   1253 			else if ( previous_continued_action )
   1254 				{
   1255 				/* See the comment in the rule for "re2 re"
   1256 				 * above.
   1257 				 */
   1258 				lwarn(
   1259 		"trailing context made variable due to preceding '|' action" );
   1260 
   1261 				varlength = true;
   1262 				}
   1263 
   1264 			if ( lex_compat || varlength )
   1265 				{
   1266 				/* Again, see the comment in the rule for
   1267 				 * "re2 re" above.
   1268 				 */
   1269 				add_accept( yystack.l_mark[-1],
   1270 					num_rules | YY_TRAILING_HEAD_MASK );
   1271 				variable_trail_rule = true;
   1272 				}
   1273 
   1274 			trlcontxt = true;
   1275 
   1276 			eps = mkstate( SYM_EPSILON );
   1277 			yyval = link_machines( yystack.l_mark[-1],
   1278 				link_machines( eps, mkstate( '\n' ) ) );
   1279 			}
   1280 break;
   1281 case 41:
   1282 	{
   1283 			yyval = yystack.l_mark[0];
   1284 
   1285 			if ( trlcontxt )
   1286 				{
   1287 				if ( lex_compat || (varlength && headcnt == 0) )
   1288 					/* Both head and trail are
   1289 					 * variable-length.
   1290 					 */
   1291 					variable_trail_rule = true;
   1292 				else
   1293 					trailcnt = rulelen;
   1294 				}
   1295 			}
   1296 break;
   1297 case 42:
   1298 	{
   1299 			varlength = true;
   1300 			yyval = mkor( yystack.l_mark[-2], yystack.l_mark[0] );
   1301 			}
   1302 break;
   1303 case 43:
   1304 	{ yyval = yystack.l_mark[0]; }
   1305 break;
   1306 case 44:
   1307 	{
   1308 			/* This rule is written separately so the
   1309 			 * reduction will occur before the trailing
   1310 			 * series is parsed.
   1311 			 */
   1312 
   1313 			if ( trlcontxt )
   1314 				synerr( _("trailing context used twice") );
   1315 			else
   1316 				trlcontxt = true;
   1317 
   1318 			if ( varlength )
   1319 				/* We hope the trailing context is
   1320 				 * fixed-length.
   1321 				 */
   1322 				varlength = false;
   1323 			else
   1324 				headcnt = rulelen;
   1325 
   1326 			rulelen = 0;
   1327 
   1328 			current_state_type = STATE_TRAILING_CONTEXT;
   1329 			yyval = yystack.l_mark[-1];
   1330 			}
   1331 break;
   1332 case 45:
   1333 	{
   1334 			/* This is where concatenation of adjacent patterns
   1335 			 * gets done.
   1336 			 */
   1337 			yyval = link_machines( yystack.l_mark[-1], yystack.l_mark[0] );
   1338 			}
   1339 break;
   1340 case 46:
   1341 	{ yyval = yystack.l_mark[0]; }
   1342 break;
   1343 case 47:
   1344 	{
   1345 			varlength = true;
   1346 
   1347 			if ( yystack.l_mark[-3] > yystack.l_mark[-1] || yystack.l_mark[-3] < 0 )
   1348 				{
   1349 				synerr( _("bad iteration values") );
   1350 				yyval = yystack.l_mark[-5];
   1351 				}
   1352 			else
   1353 				{
   1354 				if ( yystack.l_mark[-3] == 0 )
   1355 					{
   1356 					if ( yystack.l_mark[-1] <= 0 )
   1357 						{
   1358 						synerr(
   1359 						_("bad iteration values") );
   1360 						yyval = yystack.l_mark[-5];
   1361 						}
   1362 					else
   1363 						yyval = mkopt(
   1364 							mkrep( yystack.l_mark[-5], 1, yystack.l_mark[-1] ) );
   1365 					}
   1366 				else
   1367 					yyval = mkrep( yystack.l_mark[-5], yystack.l_mark[-3], yystack.l_mark[-1] );
   1368 				}
   1369 			}
   1370 break;
   1371 case 48:
   1372 	{
   1373 			varlength = true;
   1374 
   1375 			if ( yystack.l_mark[-2] <= 0 )
   1376 				{
   1377 				synerr( _("iteration value must be positive") );
   1378 				yyval = yystack.l_mark[-4];
   1379 				}
   1380 
   1381 			else
   1382 				yyval = mkrep( yystack.l_mark[-4], yystack.l_mark[-2], INFINITE_REPEAT );
   1383 			}
   1384 break;
   1385 case 49:
   1386 	{
   1387 			/* The series could be something like "(foo)",
   1388 			 * in which case we have no idea what its length
   1389 			 * is, so we punt here.
   1390 			 */
   1391 			varlength = true;
   1392 
   1393 			if ( yystack.l_mark[-1] <= 0 )
   1394 				{
   1395 				  synerr( _("iteration value must be positive")
   1396 					  );
   1397 				yyval = yystack.l_mark[-3];
   1398 				}
   1399 
   1400 			else
   1401 				yyval = link_machines( yystack.l_mark[-3],
   1402 						copysingl( yystack.l_mark[-3], yystack.l_mark[-1] - 1 ) );
   1403 			}
   1404 break;
   1405 case 50:
   1406 	{
   1407 			varlength = true;
   1408 
   1409 			yyval = mkclos( yystack.l_mark[-1] );
   1410 			}
   1411 break;
   1412 case 51:
   1413 	{
   1414 			varlength = true;
   1415 			yyval = mkposcl( yystack.l_mark[-1] );
   1416 			}
   1417 break;
   1418 case 52:
   1419 	{
   1420 			varlength = true;
   1421 			yyval = mkopt( yystack.l_mark[-1] );
   1422 			}
   1423 break;
   1424 case 53:
   1425 	{
   1426 			varlength = true;
   1427 
   1428 			if ( yystack.l_mark[-3] > yystack.l_mark[-1] || yystack.l_mark[-3] < 0 )
   1429 				{
   1430 				synerr( _("bad iteration values") );
   1431 				yyval = yystack.l_mark[-5];
   1432 				}
   1433 			else
   1434 				{
   1435 				if ( yystack.l_mark[-3] == 0 )
   1436 					{
   1437 					if ( yystack.l_mark[-1] <= 0 )
   1438 						{
   1439 						synerr(
   1440 						_("bad iteration values") );
   1441 						yyval = yystack.l_mark[-5];
   1442 						}
   1443 					else
   1444 						yyval = mkopt(
   1445 							mkrep( yystack.l_mark[-5], 1, yystack.l_mark[-1] ) );
   1446 					}
   1447 				else
   1448 					yyval = mkrep( yystack.l_mark[-5], yystack.l_mark[-3], yystack.l_mark[-1] );
   1449 				}
   1450 			}
   1451 break;
   1452 case 54:
   1453 	{
   1454 			varlength = true;
   1455 
   1456 			if ( yystack.l_mark[-2] <= 0 )
   1457 				{
   1458 				synerr( _("iteration value must be positive") );
   1459 				yyval = yystack.l_mark[-4];
   1460 				}
   1461 
   1462 			else
   1463 				yyval = mkrep( yystack.l_mark[-4], yystack.l_mark[-2], INFINITE_REPEAT );
   1464 			}
   1465 break;
   1466 case 55:
   1467 	{
   1468 			/* The singleton could be something like "(foo)",
   1469 			 * in which case we have no idea what its length
   1470 			 * is, so we punt here.
   1471 			 */
   1472 			varlength = true;
   1473 
   1474 			if ( yystack.l_mark[-1] <= 0 )
   1475 				{
   1476 				synerr( _("iteration value must be positive") );
   1477 				yyval = yystack.l_mark[-3];
   1478 				}
   1479 
   1480 			else
   1481 				yyval = link_machines( yystack.l_mark[-3],
   1482 						copysingl( yystack.l_mark[-3], yystack.l_mark[-1] - 1 ) );
   1483 			}
   1484 break;
   1485 case 56:
   1486 	{
   1487 			if ( ! madeany )
   1488 				{
   1489 				/* Create the '.' character class. */
   1490                     ccldot = cclinit();
   1491                     ccladd( ccldot, '\n' );
   1492                     cclnegate( ccldot );
   1493 
   1494                     if ( useecs )
   1495                         mkeccl( ccltbl + cclmap[ccldot],
   1496                             ccllen[ccldot], nextecm,
   1497                             ecgroup, csize, csize );
   1498 
   1499 				/* Create the (?s:'.') character class. */
   1500                     cclany = cclinit();
   1501                     cclnegate( cclany );
   1502 
   1503                     if ( useecs )
   1504                         mkeccl( ccltbl + cclmap[cclany],
   1505                             ccllen[cclany], nextecm,
   1506                             ecgroup, csize, csize );
   1507 
   1508 				madeany = true;
   1509 				}
   1510 
   1511 			++rulelen;
   1512 
   1513             if (sf_dot_all())
   1514                 yyval = mkstate( -cclany );
   1515             else
   1516                 yyval = mkstate( -ccldot );
   1517 			}
   1518 break;
   1519 case 57:
   1520 	{
   1521 				/* Sort characters for fast searching.
   1522 				 */
   1523 				qsort( ccltbl + cclmap[yystack.l_mark[0]], (size_t) ccllen[yystack.l_mark[0]], sizeof (*ccltbl), cclcmp );
   1524 
   1525 			if ( useecs )
   1526 				mkeccl( ccltbl + cclmap[yystack.l_mark[0]], ccllen[yystack.l_mark[0]],
   1527 					nextecm, ecgroup, csize, csize );
   1528 
   1529 			++rulelen;
   1530 
   1531 			if (ccl_has_nl[yystack.l_mark[0]])
   1532 				rule_has_nl[num_rules] = true;
   1533 
   1534 			yyval = mkstate( -yystack.l_mark[0] );
   1535 			}
   1536 break;
   1537 case 58:
   1538 	{
   1539 			++rulelen;
   1540 
   1541 			if (ccl_has_nl[yystack.l_mark[0]])
   1542 				rule_has_nl[num_rules] = true;
   1543 
   1544 			yyval = mkstate( -yystack.l_mark[0] );
   1545 			}
   1546 break;
   1547 case 59:
   1548 	{ yyval = yystack.l_mark[-1]; }
   1549 break;
   1550 case 60:
   1551 	{ yyval = yystack.l_mark[-1]; }
   1552 break;
   1553 case 61:
   1554 	{
   1555 			++rulelen;
   1556 
   1557 			if (yystack.l_mark[0] == nlch)
   1558 				rule_has_nl[num_rules] = true;
   1559 
   1560             if (sf_case_ins() && has_case(yystack.l_mark[0]))
   1561                 /* create an alternation, as in (a|A) */
   1562                 yyval = mkor (mkstate(yystack.l_mark[0]), mkstate(reverse_case(yystack.l_mark[0])));
   1563             else
   1564                 yyval = mkstate( yystack.l_mark[0] );
   1565 			}
   1566 break;
   1567 case 62:
   1568 	{ yyval = ccl_set_diff  (yystack.l_mark[-2], yystack.l_mark[0]); }
   1569 break;
   1570 case 63:
   1571 	{ yyval = ccl_set_union (yystack.l_mark[-2], yystack.l_mark[0]); }
   1572 break;
   1573 case 65:
   1574 	{ yyval = yystack.l_mark[-1]; }
   1575 break;
   1576 case 66:
   1577 	{
   1578 			cclnegate( yystack.l_mark[-1] );
   1579 			yyval = yystack.l_mark[-1];
   1580 			}
   1581 break;
   1582 case 67:
   1583 	{
   1584 
   1585 			if (sf_case_ins())
   1586 			  {
   1587 
   1588 			    /* If one end of the range has case and the other
   1589 			     * does not, or the cases are different, then we're not
   1590 			     * sure what range the user is trying to express.
   1591 			     * Examples: [@-z] or [S-t]
   1592 			     */
   1593 			    if (has_case (yystack.l_mark[-2]) != has_case (yystack.l_mark[0])
   1594 				     || (has_case (yystack.l_mark[-2]) && (b_islower (yystack.l_mark[-2]) != b_islower (yystack.l_mark[0])))
   1595 				     || (has_case (yystack.l_mark[-2]) && (b_isupper (yystack.l_mark[-2]) != b_isupper (yystack.l_mark[0]))))
   1596 			      format_warn3 (
   1597 			      _("the character range [%c-%c] is ambiguous in a case-insensitive scanner"),
   1598 					    yystack.l_mark[-2], yystack.l_mark[0]);
   1599 
   1600 			    /* If the range spans uppercase characters but not
   1601 			     * lowercase (or vice-versa), then should we automatically
   1602 			     * include lowercase characters in the range?
   1603 			     * Example: [@-_] spans [a-z] but not [A-Z]
   1604 			     */
   1605 			    else if (!has_case (yystack.l_mark[-2]) && !has_case (yystack.l_mark[0]) && !range_covers_case (yystack.l_mark[-2], yystack.l_mark[0]))
   1606 			      format_warn3 (
   1607 			      _("the character range [%c-%c] is ambiguous in a case-insensitive scanner"),
   1608 					    yystack.l_mark[-2], yystack.l_mark[0]);
   1609 			  }
   1610 
   1611 			if ( yystack.l_mark[-2] > yystack.l_mark[0] )
   1612 				synerr( _("negative range in character class") );
   1613 
   1614 			else
   1615 				{
   1616 				for ( i = yystack.l_mark[-2]; i <= yystack.l_mark[0]; ++i )
   1617 					ccladd( yystack.l_mark[-3], i );
   1618 
   1619 				/* Keep track if this ccl is staying in
   1620 				 * alphabetical order.
   1621 				 */
   1622 				cclsorted = cclsorted && (yystack.l_mark[-2] > lastchar);
   1623 				lastchar = yystack.l_mark[0];
   1624 
   1625                 /* Do it again for upper/lowercase */
   1626                 if (sf_case_ins() && has_case(yystack.l_mark[-2]) && has_case(yystack.l_mark[0])){
   1627                     yystack.l_mark[-2] = reverse_case (yystack.l_mark[-2]);
   1628                     yystack.l_mark[0] = reverse_case (yystack.l_mark[0]);
   1629 
   1630                     for ( i = yystack.l_mark[-2]; i <= yystack.l_mark[0]; ++i )
   1631                         ccladd( yystack.l_mark[-3], i );
   1632 
   1633                     cclsorted = cclsorted && (yystack.l_mark[-2] > lastchar);
   1634                     lastchar = yystack.l_mark[0];
   1635                 }
   1636 
   1637 				}
   1638 
   1639 			yyval = yystack.l_mark[-3];
   1640 			}
   1641 break;
   1642 case 68:
   1643 	{
   1644 			ccladd( yystack.l_mark[-1], yystack.l_mark[0] );
   1645 			cclsorted = cclsorted && (yystack.l_mark[0] > lastchar);
   1646 			lastchar = yystack.l_mark[0];
   1647 
   1648             /* Do it again for upper/lowercase */
   1649             if (sf_case_ins() && has_case(yystack.l_mark[0])){
   1650                 yystack.l_mark[0] = reverse_case (yystack.l_mark[0]);
   1651                 ccladd (yystack.l_mark[-1], yystack.l_mark[0]);
   1652 
   1653                 cclsorted = cclsorted && (yystack.l_mark[0] > lastchar);
   1654                 lastchar = yystack.l_mark[0];
   1655             }
   1656 
   1657 			yyval = yystack.l_mark[-1];
   1658 			}
   1659 break;
   1660 case 69:
   1661 	{
   1662 			/* Too hard to properly maintain cclsorted. */
   1663 			cclsorted = false;
   1664 			yyval = yystack.l_mark[-1];
   1665 			}
   1666 break;
   1667 case 70:
   1668 	{
   1669 			cclsorted = true;
   1670 			lastchar = 0;
   1671 			currccl = yyval = cclinit();
   1672 			}
   1673 break;
   1674 case 71:
   1675 	{ CCL_EXPR(isalnum); }
   1676 break;
   1677 case 72:
   1678 	{ CCL_EXPR(isalpha); }
   1679 break;
   1680 case 73:
   1681 	{ CCL_EXPR(IS_BLANK); }
   1682 break;
   1683 case 74:
   1684 	{ CCL_EXPR(iscntrl); }
   1685 break;
   1686 case 75:
   1687 	{ CCL_EXPR(isdigit); }
   1688 break;
   1689 case 76:
   1690 	{ CCL_EXPR(isgraph); }
   1691 break;
   1692 case 77:
   1693 	{
   1694                           CCL_EXPR(islower);
   1695                           if (sf_case_ins())
   1696                               CCL_EXPR(isupper);
   1697                         }
   1698 break;
   1699 case 78:
   1700 	{ CCL_EXPR(isprint); }
   1701 break;
   1702 case 79:
   1703 	{ CCL_EXPR(ispunct); }
   1704 break;
   1705 case 80:
   1706 	{ CCL_EXPR(isspace); }
   1707 break;
   1708 case 81:
   1709 	{ CCL_EXPR(isxdigit); }
   1710 break;
   1711 case 82:
   1712 	{
   1713                     CCL_EXPR(isupper);
   1714                     if (sf_case_ins())
   1715                         CCL_EXPR(islower);
   1716 				}
   1717 break;
   1718 case 83:
   1719 	{ CCL_NEG_EXPR(isalnum); }
   1720 break;
   1721 case 84:
   1722 	{ CCL_NEG_EXPR(isalpha); }
   1723 break;
   1724 case 85:
   1725 	{ CCL_NEG_EXPR(IS_BLANK); }
   1726 break;
   1727 case 86:
   1728 	{ CCL_NEG_EXPR(iscntrl); }
   1729 break;
   1730 case 87:
   1731 	{ CCL_NEG_EXPR(isdigit); }
   1732 break;
   1733 case 88:
   1734 	{ CCL_NEG_EXPR(isgraph); }
   1735 break;
   1736 case 89:
   1737 	{ CCL_NEG_EXPR(isprint); }
   1738 break;
   1739 case 90:
   1740 	{ CCL_NEG_EXPR(ispunct); }
   1741 break;
   1742 case 91:
   1743 	{ CCL_NEG_EXPR(isspace); }
   1744 break;
   1745 case 92:
   1746 	{ CCL_NEG_EXPR(isxdigit); }
   1747 break;
   1748 case 93:
   1749 	{
   1750 				if ( sf_case_ins() )
   1751 					lwarn(_("[:^lower:] is ambiguous in case insensitive scanner"));
   1752 				else
   1753 					CCL_NEG_EXPR(islower);
   1754 				}
   1755 break;
   1756 case 94:
   1757 	{
   1758 				if ( sf_case_ins() )
   1759 					lwarn(_("[:^upper:] ambiguous in case insensitive scanner"));
   1760 				else
   1761 					CCL_NEG_EXPR(isupper);
   1762 				}
   1763 break;
   1764 case 95:
   1765 	{
   1766 			if ( yystack.l_mark[0] == nlch )
   1767 				rule_has_nl[num_rules] = true;
   1768 
   1769 			++rulelen;
   1770 
   1771             if (sf_case_ins() && has_case(yystack.l_mark[0]))
   1772                 yyval = mkor (mkstate(yystack.l_mark[0]), mkstate(reverse_case(yystack.l_mark[0])));
   1773             else
   1774                 yyval = mkstate (yystack.l_mark[0]);
   1775 
   1776 			yyval = link_machines( yystack.l_mark[-1], yyval);
   1777 			}
   1778 break;
   1779 case 96:
   1780 	{ yyval = mkstate( SYM_EPSILON ); }
   1781 break;
   1782     }
   1783     yystack.s_mark -= yym;
   1784     yystate = *yystack.s_mark;
   1785     yystack.l_mark -= yym;
   1786     yym = yylhs[yyn];
   1787     if (yystate == 0 && yym == 0)
   1788     {
   1789 #if YYDEBUG
   1790         if (yydebug)
   1791             printf("%sdebug: after reduction, shifting from state 0 to\
   1792  state %d\n", YYPREFIX, YYFINAL);
   1793 #endif
   1794         yystate = YYFINAL;
   1795         *++yystack.s_mark = YYFINAL;
   1796         *++yystack.l_mark = yyval;
   1797         if (yychar < 0)
   1798         {
   1799             if ((yychar = YYLEX) < 0) yychar = YYEOF;
   1800 #if YYDEBUG
   1801             if (yydebug)
   1802             {
   1803                 yys = yyname[YYTRANSLATE(yychar)];
   1804                 printf("%sdebug: state %d, reading %d (%s)\n",
   1805                         YYPREFIX, YYFINAL, yychar, yys);
   1806             }
   1807 #endif
   1808         }
   1809         if (yychar == YYEOF) goto yyaccept;
   1810         goto yyloop;
   1811     }
   1812     if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
   1813             yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
   1814         yystate = yytable[yyn];
   1815     else
   1816         yystate = yydgoto[yym];
   1817 #if YYDEBUG
   1818     if (yydebug)
   1819         printf("%sdebug: after reduction, shifting from state %d \
   1820 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
   1821 #endif
   1822     if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
   1823     {
   1824         goto yyoverflow;
   1825     }
   1826     *++yystack.s_mark = (YYINT) yystate;
   1827     *++yystack.l_mark = yyval;
   1828     goto yyloop;
   1829 
   1830 yyoverflow:
   1831     YYERROR_CALL("yacc stack overflow");
   1832 
   1833 yyabort:
   1834     yyfreestack(&yystack);
   1835     return (1);
   1836 
   1837 yyaccept:
   1838     yyfreestack(&yystack);
   1839     return (0);
   1840 }
   1841