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