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