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