1 /*
2 * Copyright (C) 1988-1991 Yale University
3 *
4 * This work is distributed in the hope that it will be useful; you can
5 * redistribute it and/or modify it under the terms of the
6 * GNU General Public License as published by the Free Software Foundation;
7 * either version 2 of the License,
8 * or any later version, on the following conditions:
9 *
10 * (a) YALE MAKES NO, AND EXPRESSLY DISCLAIMS
11 * ALL, REPRESENTATIONS OR WARRANTIES THAT THE MANUFACTURE, USE, PRACTICE,
12 * SALE OR
13 * OTHER DISPOSAL OF THE SOFTWARE DOES NOT OR WILL NOT INFRINGE UPON ANY
14 * PATENT OR
15 * OTHER RIGHTS NOT VESTED IN YALE.
16 *
17 * (b) YALE MAKES NO, AND EXPRESSLY DISCLAIMS ALL, REPRESENTATIONS AND
18 * WARRANTIES
19 * WHATSOEVER WITH RESPECT TO THE SOFTWARE, EITHER EXPRESS OR IMPLIED,
20 * INCLUDING,
21 * BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A
22 * PARTICULAR
23 * PURPOSE.
24 *
25 * (c) LICENSEE SHALL MAKE NO STATEMENTS, REPRESENTATION OR WARRANTIES
26 * WHATSOEVER TO
27 * ANY THIRD PARTIES THAT ARE INCONSISTENT WITH THE DISCLAIMERS BY YALE IN
28 * ARTICLE
29 * (a) AND (b) above.
30 *
31 * (d) IN NO EVENT SHALL YALE, OR ITS TRUSTEES, DIRECTORS, OFFICERS,
32 * EMPLOYEES AND
33 * AFFILIATES BE LIABLE FOR DAMAGES OF ANY KIND, INCLUDING ECONOMIC DAMAGE OR
34 * INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER YALE SHALL BE
35 * ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE
36 * POSSIBILITY OF THE FOREGOING.
37 *
38 */
39
40 #define YYBYACC 1
41 /* -----------------------------------------------------------------
42 FILE: readcells.c <- readcells_yacc <- readcells_lex
43 DESCRIPTION:This file contains the grammar (BNF) for the TimberWolfMC
44 input file parser. The rules for lex are in readcells_lex.
45 The grammar for yacc is in readcells_yacc.
46 The output of yacc (y.tab.c) is renamed to readcells.c
47 CONTENTS:
48 readcells( fp )
49 FILE *fp ;
50 yyerror(s)
51 char *s;
52 yywrap()
53
54 Note:readcells.c will also include the yacc parser.
55 DATE: Aug 7, 1988
56 REVISIONS: Oct 27, 1988 - modified fixed and group cell code.
57 Now accept designs without pads.
58 Jan 29, 1989 - changed to YmsgG and added \n.
59 Mar 6, 1989 - removed redundant string from padgroupname
60 Mar 7, 1989 - now able to parse instance lists but
61 don't process them.
62 Mar 12, 1989 - changed group cell and supercell reference
63 from integer to string to be easier for user.
64 Mar 13, 1989 - added string to instance to tell them apart.
65 May 7, 1989 - added layer to input format. Also fixed
66 multiple equiv case.
67 May 12, 1989 - added layer to data structures.
68 Oct 2, 1989 - added warning messages for cells without pins.
69 Feb 2, 1989 - added orient to input fields.
70 Thu Dec 20 00:01:58 EST 1990 - now specify an ANALOGPIN.
71 Dec 21, 1990 - rewrote pinrecord to make it more flexible
72 and also changed NO_CROSS_UNDER to NO_LAYER_CHANGE.
73 Sun Jan 20 21:34:36 PST 1991 - ported to AIX.
74 Wed Jan 23 14:40:30 PST 1991 - made language context free.
75 Mon Feb 4 02:17:24 EST 1991 - added new pinspace option
76 and fixed fixCell problem.
77 Wed Feb 13 23:56:34 EST 1991 - modified for new pad code.
78 Thu Apr 18 01:44:14 EDT 1991 - renamed stdcell to cluster
79 and reversed corners.
80 Thu Aug 22 22:10:09 CDT 1991 - fixed problem with
81 fixed cells moving during pairwise flips.
82 ----------------------------------------------------------------- */
83
84 #include <string.h>
85 #include <yalecad/string.h>
86 #include <custom.h>
87 #include <initialize.h>
88 #include <readcells.h> /* redefine yacc and lex globals */
89
90 #undef REJECT /* undefine TWMC macro for lex's version */
91 #define YYDEBUG 1 /* condition compile for yacc debug */
92 /* #define LEXDEBUG 1 */ /* conditional compile for lex debug */
93 #ifdef LEXDEBUG
94 /* two bugs in yale version of lex */
95 #define allprint(x) fprintf( stdout, "%c\n", x )
96 #define sprint(x) fprintf( stdout, "%s\n", x )
97 #endif
98
99 static INT line_countS ;
100 static char bufferS[LRECL] ;
101
102 typedef union {
103 INT ival ;
104 char *string ;
105 DOUBLE fval ;
106 } YYSTYPE;
107 #define INTEGER 257
108 #define STRING 258
109 #define FLOAT 259
110 #define ADDEQUIV 260
111 #define ASPLB 261
112 #define ASPUB 262
113 #define AT 263
114 #define CELLGROUP 264
115 #define CLASS 265
116 #define CONNECT 266
117 #define CORNERS 267
118 #define EQUIV 268
119 #define FIXED 269
120 #define FROM 270
121 #define HARDCELL 271
122 #define INSTANCE 272
123 #define LAYER 273
124 #define NAME 274
125 #define NEIGHBORHOOD 275
126 #define NONFIXED 276
127 #define NOPERMUTE 277
128 #define ORIENT 278
129 #define ORIENTATIONS 279
130 #define PAD 280
131 #define PADGROUP 281
132 #define PERMUTE 282
133 #define PIN 283
134 #define PINGROUP 284
135 #define RESTRICT 285
136 #define SIDE 286
137 #define SIDESPACE 287
138 #define SIGNAL 288
139 #define SOFTCELL 289
140 #define SOFTPIN 290
141 #define CLUSTER 291
142 #define SUPERGROUP 292
143 #define TIMING 293
144 #define CURRENT 294
145 #define KEEPOUT 295
146 #define NO_LAYER_CHANGE 296
147 #define POWER 297
148 #define YYERRCODE 256
149 short yylhs[] = { -1,
150 0, 0, 7, 7, 9, 9, 11, 11, 8, 8,
151 14, 14, 15, 15, 10, 10, 12, 12, 20, 20,
152 22, 22, 13, 13, 30, 30, 31, 31, 31, 23,
153 16, 16, 17, 18, 18, 19, 19, 29, 29, 29,
154 44, 44, 21, 21, 46, 2, 3, 35, 39, 39,
155 39, 41, 41, 43, 43, 24, 6, 47, 47, 26,
156 26, 27, 27, 48, 49, 49, 36, 36, 32, 33,
157 50, 50, 51, 51, 28, 28, 52, 52, 54, 56,
158 57, 57, 62, 63, 63, 59, 59, 60, 60, 61,
159 61, 53, 53, 64, 67, 67, 67, 68, 70, 69,
160 69, 71, 72, 5, 5, 34, 34, 73, 73, 74,
161 74, 75, 75, 55, 55, 76, 4, 4, 65, 65,
162 77, 77, 66, 66, 66, 38, 38, 38, 78, 78,
163 37, 37, 40, 40, 79, 79, 42, 42, 45, 45,
164 25, 25, 80, 80, 81, 82, 82, 58, 58, 1,
165 1, 1,
166 };
167 short yylen[] = { 2,
168 2, 1, 1, 2, 1, 2, 1, 1, 1, 2,
169 1, 2, 1, 2, 1, 2, 2, 3, 1, 3,
170 5, 4, 2, 3, 1, 3, 7, 6, 5, 2,
171 6, 5, 4, 4, 3, 4, 2, 4, 4, 2,
172 13, 14, 8, 14, 1, 1, 1, 4, 3, 3,
173 2, 4, 2, 4, 2, 2, 2, 2, 3, 2,
174 2, 4, 3, 1, 1, 2, 0, 2, 4, 1,
175 1, 2, 1, 1, 1, 2, 1, 2, 6, 6,
176 2, 2, 2, 2, 3, 0, 2, 0, 2, 0,
177 1, 3, 4, 7, 1, 2, 1, 2, 1, 1,
178 2, 3, 4, 0, 1, 4, 5, 3, 3, 1,
179 2, 2, 2, 1, 2, 6, 0, 2, 0, 3,
180 1, 2, 0, 2, 3, 0, 2, 3, 1, 1,
181 0, 3, 1, 2, 2, 2, 1, 2, 1, 2,
182 0, 1, 1, 2, 5, 2, 3, 0, 2, 1,
183 1, 1,
184 };
185 short yydefred[] = { 0,
186 0, 0, 0, 0, 0, 0, 5, 7, 8, 0,
187 0, 37, 151, 150, 152, 0, 40, 0, 0, 0,
188 1, 0, 11, 0, 0, 0, 0, 6, 15, 0,
189 0, 0, 45, 0, 0, 0, 19, 0, 0, 0,
190 0, 0, 25, 0, 0, 0, 0, 0, 0, 12,
191 13, 0, 0, 55, 0, 53, 0, 16, 137, 0,
192 0, 0, 57, 0, 0, 0, 0, 0, 0, 0,
193 0, 143, 0, 0, 0, 0, 0, 0, 36, 38,
194 39, 0, 51, 0, 14, 0, 0, 133, 0, 0,
195 0, 0, 0, 138, 0, 0, 0, 139, 0, 58,
196 0, 30, 20, 0, 0, 144, 0, 0, 0, 0,
197 26, 48, 50, 49, 135, 136, 0, 0, 134, 68,
198 0, 54, 52, 61, 60, 64, 0, 34, 0, 0,
199 0, 140, 59, 0, 0, 0, 0, 0, 0, 0,
200 0, 33, 0, 65, 0, 0, 46, 0, 0, 0,
201 0, 0, 75, 0, 0, 0, 0, 69, 0, 130,
202 129, 132, 0, 0, 66, 63, 0, 0, 0, 0,
203 0, 0, 76, 0, 0, 114, 0, 0, 0, 0,
204 0, 0, 0, 0, 0, 71, 73, 74, 0, 128,
205 62, 0, 0, 146, 0, 0, 0, 115, 81, 83,
206 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207 72, 0, 0, 47, 0, 0, 147, 0, 0, 149,
208 0, 0, 84, 0, 43, 0, 0, 0, 0, 0,
209 0, 110, 0, 0, 0, 0, 0, 0, 0, 0,
210 87, 0, 0, 85, 0, 0, 109, 108, 0, 112,
211 113, 0, 111, 121, 0, 0, 99, 0, 93, 0,
212 0, 0, 100, 0, 0, 0, 80, 118, 0, 89,
213 91, 79, 0, 0, 0, 106, 122, 125, 0, 0,
214 101, 98, 0, 0, 0, 116, 0, 0, 107, 0,
215 105, 102, 0, 0, 0, 94, 103, 0, 0, 0,
216 41, 0, 44, 42,
217 };
218 short yydgoto[] = { 4,
219 230, 148, 215, 240, 292, 34, 5, 21, 6, 27,
220 7, 8, 9, 22, 49, 23, 51, 29, 10, 35,
221 36, 37, 67, 38, 70, 95, 128, 152, 11, 42,
222 43, 77, 184, 209, 24, 90, 118, 142, 52, 87,
223 30, 60, 31, 62, 99, 39, 65, 129, 145, 185,
224 186, 153, 188, 154, 175, 155, 179, 202, 222, 243,
225 272, 180, 204, 189, 213, 235, 259, 260, 261, 262,
226 263, 264, 210, 231, 232, 176, 255, 162, 88, 71,
227 72, 171,
228 };
229 short yysindex[] = { -207,
230 -145, -141, -233, 0, -203, -231, 0, 0, 0, -138,
231 -138, 0, 0, 0, 0, -194, 0, -144, -134, -150,
232 0, -157, 0, -175, -137, -131, -242, 0, 0, -150,
233 -130, -162, 0, -115, -129, -175, 0, -151, -189, -175,
234 -114, -129, 0, -150, -150, -150, -128, -122, -127, 0,
235 0, -150, -126, 0, -125, 0, -124, 0, 0, -186,
236 -182, -150, 0, -109, -106, -150, -175, -129, -117, -110,
237 -151, 0, -100, -99, -129, -98, -151, -175, 0, 0,
238 0, -150, 0, -183, 0, -180, -223, 0, -97, -123,
239 -150, -150, -118, 0, -241, -111, -94, 0, -150, 0,
240 -92, 0, 0, -90, -241, 0, -102, -101, -91, -110,
241 0, 0, 0, 0, 0, 0, -116, -113, 0, 0,
242 -113, 0, 0, 0, 0, 0, -85, 0, -104, -82,
243 -89, 0, 0, -103, -105, -82, -82, -80, -241, -155,
244 -77, 0, -105, 0, -209, -85, 0, -84, -82, -74,
245 -88, -105, 0, -83, -239, -73, -70, 0, -193, 0,
246 0, 0, -71, -105, 0, 0, -209, -81, -67, -66,
247 -65, -150, 0, -79, -83, 0, -64, -63, -96, -61,
248 -72, -69, -75, -107, -193, 0, 0, 0, -76, 0,
249 0, -58, -68, 0, -54, -78, -150, 0, 0, 0,
250 -55, -62, -52, -51, -58, -58, -150, -150, -107, -150,
251 0, -60, -57, 0, -49, -58, 0, -150, -56, 0,
252 -48, -53, 0, -45, 0, -43, -50, -177, -150, -178,
253 -215, 0, -42, -41, -192, -47, -38, -56, -37, -36,
254 0, -35, -46, 0, -39, -150, 0, 0, -215, 0,
255 0, -57, 0, 0, -32, -31, 0, -40, 0, -33,
256 -33, -76, 0, -76, -82, -34, 0, 0, -24, 0,
257 0, 0, -82, -56, -57, 0, 0, 0, -150, -33,
258 0, 0, -44, -20, -82, 0, -18, -96, 0, -56,
259 0, 0, -30, -16, -27, 0, 0, -58, -25, -58,
260 0, -58, 0, 0,
261 };
262 short yyrindex[] = { 0,
263 0, 0, 0, 0, 216, 6, 0, 0, 0, 0,
264 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
265 0, 229, 0, 0, 0, 0, 8, 0, 0, 0,
266 0, 0, 0, 0, 598, 0, 0, -19, 0, 0,
267 0, 621, 0, 0, 0, 0, 0, 0, 247, 0,
268 0, 0, 207, 0, 0, 0, 0, 0, 0, 0,
269 0, 0, 0, 0, 110, 0, 0, 629, 0, 0,
270 -17, 0, 0, 0, 635, 0, -19, 0, 0, 0,
271 0, 0, 0, 0, 0, 0, 49, 0, 0, 27,
272 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
273 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
274 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
275 37, 0, 0, 0, 0, 0, 0, 0, 0, 0,
276 0, 0, 0, 0, 544, 0, 0, 0, 0, 0,
277 0, 0, 21, 0, 495, 0, 0, 0, 0, 0,
278 0, 548, 0, 311, 0, 0, 0, 0, 574, 0,
279 0, 0, 57, 25, 0, 0, 495, 0, 0, 0,
280 -250, 0, 0, 0, 370, 0, 0, 0, 32, 0,
281 0, 0, 0, 584, 227, 0, 0, 0, 213, 0,
282 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
283 0, 63, 0, 1, 0, 0, 0, 0, 588, 0,
284 0, 0, 275, 0, 0, 0, 0, 0, -8, 0,
285 0, 93, 0, 0, 0, 0, 0, 0, 0, 0,
286 509, 0, 0, 0, 428, 0, 0, -179, 0, 0,
287 0, 0, 289, 0, 0, 0, 0, 0, 509, 0,
288 0, 538, 0, 0, 166, 325, 0, 0, 0, 442,
289 466, 399, 0, 356, 0, 0, 0, 0, 0, 0,
290 0, 0, 0, 132, 538, 0, 0, 0, 0, 480,
291 0, 0, 413, 0, 0, 0, 0, 180, 0, 242,
292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
293 0, 0, 0, 0,
294 };
295 short yygindex[] = { 0,
296 903, -132, -196, -235, 0, 0, 0, 0, 0, 0,
297 245, 0, 0, 0, 0, 230, 204, 228, 0, 218,
298 246, 189, -28, -11, 181, -59, -93, 116, 0, 220,
299 183, 0, 0, 0, 0, -86, 172, 142, 0, 0,
300 0, 0, 0, 0, 0, 0, 0, 0, 118, 0,
301 81, -133, 0, 0, 0, 0, 0, -21, 0, 0,
302 0, 0, 0, 0, -208, -222, 0, 0, 10, 0,
303 -195, 0, 59, 45, -166, 101, 0, 0, 190, 0,
304 208, 0,
305 };
306 #define YYTABLESIZE 1182
307 short yytable[] = { 41,
308 82, 126, 267, 156, 157, 3, 35, 4, 225, 226,
309 105, 135, 53, 78, 145, 126, 169, 177, 173, 237,
310 32, 25, 252, 19, 31, 187, 131, 178, 41, 276,
311 173, 148, 25, 13, 14, 15, 126, 127, 288, 1,
312 275, 13, 14, 15, 145, 159, 78, 165, 131, 26,
313 139, 187, 289, 282, 297, 283, 127, 2, 166, 3,
314 26, 117, 86, 1, 253, 281, 41, 257, 89, 212,
315 13, 14, 15, 73, 96, 258, 20, 117, 93, 44,
316 191, 2, 253, 3, 281, 74, 97, 117, 115, 151,
317 250, 32, 88, 113, 63, 116, 183, 251, 114, 247,
318 160, 301, 161, 303, 248, 304, 13, 14, 15, 56,
319 12, 13, 14, 15, 17, 13, 14, 15, 54, 13,
320 14, 15, 20, 48, 56, 13, 14, 15, 32, 45,
321 33, 117, 284, 83, 13, 14, 15, 124, 125, 46,
322 287, 64, 66, 69, 61, 82, 76, 100, 91, 92,
323 101, 89, 294, 48, 93, 104, 107, 108, 130, 120,
324 109, 117, 131, 150, 133, 120, 134, 136, 137, 140,
325 138, 144, 168, 141, 146, 147, 208, 151, 158, 148,
326 149, 163, 170, 181, 174, 172, 182, 190, 192, 193,
327 194, 195, 199, 200, 197, 203, 201, 205, 207, 214,
328 206, 216, 217, 220, 223, 224, 67, 236, 212, 218,
329 241, 244, 119, 245, 254, 2, 239, 256, 266, 268,
330 269, 291, 265, 270, 277, 233, 70, 278, 9, 234,
331 273, 221, 286, 279, 258, 285, 293, 246, 295, 298,
332 299, 117, 300, 242, 302, 141, 10, 142, 117, 271,
333 28, 50, 85, 68, 58, 103, 40, 110, 164, 75,
334 111, 121, 143, 167, 82, 211, 296, 229, 82, 280,
335 35, 82, 82, 249, 123, 198, 119, 0, 106, 0,
336 82, 82, 126, 82, 82, 3, 35, 4, 90, 82,
337 82, 82, 82, 82, 82, 148, 82, 82, 35, 148,
338 32, 32, 148, 148, 31, 31, 131, 131, 0, 131,
339 77, 148, 148, 131, 148, 148, 126, 126, 0, 126,
340 148, 148, 148, 148, 124, 148, 86, 148, 148, 131,
341 86, 0, 0, 86, 86, 131, 127, 127, 0, 127,
342 0, 0, 86, 86, 0, 86, 86, 0, 0, 0,
343 0, 86, 86, 86, 86, 119, 88, 0, 86, 86,
344 88, 0, 0, 88, 88, 0, 0, 0, 0, 78,
345 56, 0, 88, 88, 56, 88, 88, 0, 0, 0,
346 0, 88, 88, 88, 88, 0, 0, 56, 88, 56,
347 56, 117, 56, 0, 56, 117, 56, 0, 119, 117,
348 0, 0, 117, 117, 56, 0, 0, 0, 0, 0,
349 0, 117, 104, 0, 117, 117, 117, 0, 117, 0,
350 117, 117, 117, 117, 117, 120, 0, 92, 0, 120,
351 0, 120, 0, 120, 0, 0, 120, 120, 0, 148,
352 0, 95, 0, 148, 0, 120, 0, 148, 120, 120,
353 148, 148, 120, 0, 120, 120, 120, 120, 0, 148,
354 0, 0, 148, 148, 148, 97, 148, 0, 148, 148,
355 148, 148, 119, 0, 0, 0, 119, 0, 0, 96,
356 119, 0, 0, 119, 119, 0, 67, 67, 0, 67,
357 70, 67, 119, 67, 67, 119, 119, 70, 70, 119,
358 0, 119, 119, 119, 119, 117, 70, 117, 119, 117,
359 70, 0, 117, 117, 0, 70, 0, 70, 70, 0,
360 0, 117, 0, 0, 117, 117, 117, 0, 0, 0,
361 117, 117, 117, 117, 123, 0, 0, 123, 123, 0,
362 0, 0, 123, 22, 0, 123, 123, 21, 0, 0,
363 0, 0, 90, 0, 123, 0, 90, 123, 123, 90,
364 90, 0, 0, 123, 123, 123, 123, 0, 90, 90,
365 0, 90, 90, 29, 77, 0, 0, 90, 90, 90,
366 90, 77, 77, 28, 124, 0, 0, 27, 124, 0,
367 77, 77, 124, 77, 77, 124, 124, 17, 0, 77,
368 77, 77, 77, 0, 124, 0, 0, 124, 124, 0,
369 0, 0, 0, 124, 124, 124, 124, 0, 0, 119,
370 23, 119, 0, 119, 0, 0, 119, 119, 18, 0,
371 0, 0, 0, 78, 24, 119, 0, 0, 119, 119,
372 78, 78, 0, 0, 119, 119, 119, 119, 0, 78,
373 78, 0, 78, 78, 0, 0, 0, 0, 78, 78,
374 78, 78, 119, 0, 0, 0, 119, 0, 0, 119,
375 119, 0, 0, 0, 0, 0, 104, 0, 119, 0,
376 104, 119, 119, 104, 104, 0, 0, 119, 119, 119,
377 119, 92, 104, 0, 0, 104, 104, 0, 92, 92,
378 0, 104, 104, 104, 104, 95, 0, 92, 0, 0,
379 92, 92, 95, 95, 0, 0, 92, 92, 92, 92,
380 0, 95, 0, 0, 95, 95, 0, 0, 0, 97,
381 95, 95, 95, 95, 0, 0, 97, 97, 0, 0,
382 0, 0, 0, 96, 0, 97, 0, 0, 97, 97,
383 96, 96, 0, 0, 97, 97, 97, 97, 67, 96,
384 0, 0, 96, 96, 0, 67, 67, 0, 96, 96,
385 96, 96, 119, 0, 67, 0, 0, 67, 0, 119,
386 119, 0, 0, 67, 67, 67, 67, 0, 119, 0,
387 0, 0, 119, 0, 0, 119, 0, 119, 0, 119,
388 119, 123, 0, 0, 0, 0, 0, 22, 123, 123,
389 0, 21, 0, 0, 22, 22, 0, 123, 21, 21,
390 0, 123, 0, 22, 0, 0, 123, 21, 123, 123,
391 0, 0, 22, 0, 22, 22, 21, 29, 21, 21,
392 0, 0, 0, 0, 29, 29, 0, 28, 0, 0,
393 0, 27, 0, 29, 28, 28, 0, 0, 27, 27,
394 0, 17, 29, 28, 29, 29, 0, 27, 17, 0,
395 0, 0, 28, 0, 28, 28, 27, 17, 27, 27,
396 0, 0, 0, 0, 23, 0, 17, 0, 17, 17,
397 0, 23, 18, 0, 0, 0, 0, 0, 24, 18,
398 23, 0, 0, 16, 18, 24, 0, 0, 18, 23,
399 0, 23, 23, 0, 24, 0, 0, 18, 0, 18,
400 18, 0, 47, 24, 0, 24, 24, 55, 57, 0,
401 0, 0, 59, 0, 0, 0, 0, 0, 0, 0,
402 0, 0, 0, 0, 0, 0, 79, 80, 81, 0,
403 84, 0, 0, 0, 86, 0, 0, 0, 0, 0,
404 0, 0, 94, 0, 98, 0, 0, 0, 102, 0,
405 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
406 0, 0, 0, 0, 112, 0, 0, 0, 0, 86,
407 0, 0, 0, 122, 123, 0, 0, 0, 0, 0,
408 0, 132, 0, 0, 0, 0, 0, 0, 0, 0,
409 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
410 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
411 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
412 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
413 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
414 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
415 0, 0, 0, 0, 196, 0, 0, 0, 0, 0,
416 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
417 0, 0, 0, 0, 0, 0, 0, 0, 0, 219,
418 0, 0, 0, 0, 0, 0, 0, 0, 0, 227,
419 228, 0, 0, 0, 0, 0, 0, 0, 0, 0,
420 238, 0, 0, 0, 0, 0, 0, 0, 0, 0,
421 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
422 0, 0, 0, 0, 0, 0, 0, 0, 274, 0,
423 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
424 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
425 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
426 0, 290,
427 };
428 short yycheck[] = { 11,
429 0, 0, 238, 136, 137, 0, 0, 0, 205, 206,
430 70, 105, 24, 42, 265, 257, 149, 257, 152, 216,
431 0, 264, 231, 257, 0, 159, 0, 267, 40, 252,
432 164, 0, 264, 257, 258, 259, 0, 279, 274, 271,
433 249, 257, 258, 259, 295, 139, 75, 257, 0, 292,
434 110, 185, 275, 262, 290, 264, 0, 289, 145, 291,
435 292, 285, 0, 271, 231, 261, 78, 260, 278, 285,
436 257, 258, 259, 263, 257, 268, 280, 257, 265, 274,
437 167, 289, 249, 291, 280, 275, 269, 267, 269, 283,
438 269, 267, 0, 277, 257, 276, 290, 276, 282, 277,
439 256, 298, 258, 300, 282, 302, 257, 258, 259, 0,
440 256, 257, 258, 259, 256, 257, 258, 259, 256, 257,
441 258, 259, 280, 281, 256, 257, 258, 259, 267, 274,
442 269, 0, 265, 256, 257, 258, 259, 256, 257, 274,
443 273, 257, 272, 295, 275, 274, 261, 257, 274, 274,
444 257, 278, 285, 281, 265, 273, 257, 257, 270, 257,
445 259, 285, 257, 267, 257, 0, 257, 270, 270, 286,
446 262, 257, 257, 287, 279, 258, 284, 283, 259, 0,
447 270, 259, 257, 257, 268, 274, 257, 259, 270, 257,
448 257, 257, 257, 257, 274, 257, 293, 270, 274, 258,
449 270, 270, 257, 259, 257, 257, 0, 257, 285, 288,
450 259, 257, 0, 257, 257, 0, 273, 259, 257, 257,
451 257, 266, 270, 259, 257, 286, 0, 259, 0, 287,
452 270, 294, 257, 274, 268, 270, 257, 288, 257, 270,
453 257, 0, 270, 297, 270, 265, 0, 265, 257, 296,
454 6, 22, 49, 36, 27, 67, 11, 77, 143, 40,
455 78, 90, 121, 146, 264, 185, 288, 209, 268, 260,
456 264, 271, 272, 229, 0, 175, 87, -1, 71, -1,
457 280, 281, 281, 283, 284, 280, 280, 280, 0, 289,
458 290, 291, 292, 293, 294, 264, 296, 297, 292, 268,
459 280, 281, 271, 272, 280, 281, 280, 281, -1, 283,
460 0, 280, 281, 287, 283, 284, 280, 281, -1, 283,
461 289, 290, 291, 292, 0, 294, 264, 296, 297, 281,
462 268, -1, -1, 271, 272, 287, 280, 281, -1, 283,
463 -1, -1, 280, 281, -1, 283, 284, -1, -1, -1,
464 -1, 289, 290, 291, 292, 0, 264, -1, 296, 297,
465 268, -1, -1, 271, 272, -1, -1, -1, -1, 0,
466 261, -1, 280, 281, 265, 283, 284, -1, -1, -1,
467 -1, 289, 290, 291, 292, -1, -1, 278, 296, 280,
468 281, 260, 283, -1, 285, 264, 287, -1, 0, 268,
469 -1, -1, 271, 272, 295, -1, -1, -1, -1, -1,
470 -1, 280, 0, -1, 283, 284, 285, -1, 287, -1,
471 289, 290, 291, 292, 293, 260, -1, 0, -1, 264,
472 -1, 266, -1, 268, -1, -1, 271, 272, -1, 260,
473 -1, 0, -1, 264, -1, 280, -1, 268, 283, 284,
474 271, 272, 287, -1, 289, 290, 291, 292, -1, 280,
475 -1, -1, 283, 284, 285, 0, 287, -1, 289, 290,
476 291, 292, 260, -1, -1, -1, 264, -1, -1, 0,
477 268, -1, -1, 271, 272, -1, 280, 281, -1, 283,
478 264, 285, 280, 287, 0, 283, 284, 271, 272, 287,
479 -1, 289, 290, 291, 292, 264, 280, 266, 0, 268,
480 284, -1, 271, 272, -1, 289, -1, 291, 292, -1,
481 -1, 280, -1, -1, 283, 284, 285, -1, -1, -1,
482 289, 290, 291, 292, 260, -1, -1, 0, 264, -1,
483 -1, -1, 268, 0, -1, 271, 272, 0, -1, -1,
484 -1, -1, 264, -1, 280, -1, 268, 283, 284, 271,
485 272, -1, -1, 289, 290, 291, 292, -1, 280, 281,
486 -1, 283, 284, 0, 264, -1, -1, 289, 290, 291,
487 292, 271, 272, 0, 260, -1, -1, 0, 264, -1,
488 280, 281, 268, 283, 284, 271, 272, 0, -1, 289,
489 290, 291, 292, -1, 280, -1, -1, 283, 284, -1,
490 -1, -1, -1, 289, 290, 291, 292, -1, -1, 264,
491 0, 266, -1, 268, -1, -1, 271, 272, 0, -1,
492 -1, -1, -1, 264, 0, 280, -1, -1, 283, 284,
493 271, 272, -1, -1, 289, 290, 291, 292, -1, 280,
494 281, -1, 283, 284, -1, -1, -1, -1, 289, 290,
495 291, 292, 264, -1, -1, -1, 268, -1, -1, 271,
496 272, -1, -1, -1, -1, -1, 264, -1, 280, -1,
497 268, 283, 284, 271, 272, -1, -1, 289, 290, 291,
498 292, 264, 280, -1, -1, 283, 284, -1, 271, 272,
499 -1, 289, 290, 291, 292, 264, -1, 280, -1, -1,
500 283, 284, 271, 272, -1, -1, 289, 290, 291, 292,
501 -1, 280, -1, -1, 283, 284, -1, -1, -1, 264,
502 289, 290, 291, 292, -1, -1, 271, 272, -1, -1,
503 -1, -1, -1, 264, -1, 280, -1, -1, 283, 284,
504 271, 272, -1, -1, 289, 290, 291, 292, 264, 280,
505 -1, -1, 283, 284, -1, 271, 272, -1, 289, 290,
506 291, 292, 264, -1, 280, -1, -1, 283, -1, 271,
507 272, -1, -1, 289, 290, 291, 292, -1, 280, -1,
508 -1, -1, 284, -1, -1, 287, -1, 289, -1, 291,
509 292, 264, -1, -1, -1, -1, -1, 264, 271, 272,
510 -1, 264, -1, -1, 271, 272, -1, 280, 271, 272,
511 -1, 284, -1, 280, -1, -1, 289, 280, 291, 292,
512 -1, -1, 289, -1, 291, 292, 289, 264, 291, 292,
513 -1, -1, -1, -1, 271, 272, -1, 264, -1, -1,
514 -1, 264, -1, 280, 271, 272, -1, -1, 271, 272,
515 -1, 264, 289, 280, 291, 292, -1, 280, 271, -1,
516 -1, -1, 289, -1, 291, 292, 289, 280, 291, 292,
517 -1, -1, -1, -1, 264, -1, 289, -1, 291, 292,
518 -1, 271, 264, -1, -1, -1, -1, -1, 264, 271,
519 280, -1, -1, 1, 2, 271, -1, -1, 280, 289,
520 -1, 291, 292, -1, 280, -1, -1, 289, -1, 291,
521 292, -1, 20, 289, -1, 291, 292, 25, 26, -1,
522 -1, -1, 30, -1, -1, -1, -1, -1, -1, -1,
523 -1, -1, -1, -1, -1, -1, 44, 45, 46, -1,
524 48, -1, -1, -1, 52, -1, -1, -1, -1, -1,
525 -1, -1, 60, -1, 62, -1, -1, -1, 66, -1,
526 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
527 -1, -1, -1, -1, 82, -1, -1, -1, -1, 87,
528 -1, -1, -1, 91, 92, -1, -1, -1, -1, -1,
529 -1, 99, -1, -1, -1, -1, -1, -1, -1, -1,
530 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
531 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
532 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
533 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
534 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
535 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
536 -1, -1, -1, -1, 172, -1, -1, -1, -1, -1,
537 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
538 -1, -1, -1, -1, -1, -1, -1, -1, -1, 197,
539 -1, -1, -1, -1, -1, -1, -1, -1, -1, 207,
540 208, -1, -1, -1, -1, -1, -1, -1, -1, -1,
541 218, -1, -1, -1, -1, -1, -1, -1, -1, -1,
542 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
543 -1, -1, -1, -1, -1, -1, -1, -1, 246, -1,
544 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
545 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
546 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
547 -1, 279,
548 };
549 #define YYFINAL 4
550 #ifndef YYDEBUG
551 #define YYDEBUG 0
552 #endif
553 #define YYMAXTOKEN 297
554 #if YYDEBUG
555 char *yyname[] = {
556 "end-of-file",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,
557 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,
558 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,
559 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,
560 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,
561 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,
562 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"INTEGER","STRING","FLOAT",
563 "ADDEQUIV","ASPLB","ASPUB","AT","CELLGROUP","CLASS","CONNECT","CORNERS","EQUIV",
564 "FIXED","FROM","HARDCELL","INSTANCE","LAYER","NAME","NEIGHBORHOOD","NONFIXED",
565 "NOPERMUTE","ORIENT","ORIENTATIONS","PAD","PADGROUP","PERMUTE","PIN","PINGROUP",
566 "RESTRICT","SIDE","SIDESPACE","SIGNAL","SOFTCELL","SOFTPIN","CLUSTER",
567 "SUPERGROUP","TIMING","CURRENT","KEEPOUT","NO_LAYER_CHANGE","POWER",
568 };
569 char *yyrule[] = {
570 "$accept : start_file",
571 "start_file : core pads",
572 "start_file : core",
573 "core : corecells",
574 "core : corecells cellgroups",
575 "corecells : coretype",
576 "corecells : corecells coretype",
577 "coretype : customcell",
578 "coretype : softcell",
579 "pads : padcells",
580 "pads : padcells padgroups",
581 "padcells : padcell",
582 "padcells : padcells padcell",
583 "padgroups : padgroup",
584 "padgroups : padgroups padgroup",
585 "cellgroups : cellgroup",
586 "cellgroups : cellgroups cellgroup",
587 "customcell : cellname custom_instance_list",
588 "customcell : cellname fixed custom_instance_list",
589 "custom_instance_list : custom_instance",
590 "custom_instance_list : custom_instance_list instance custom_instance",
591 "custom_instance : corners keep_outs class orient hardpins",
592 "custom_instance : corners keep_outs class orient",
593 "softcell : softname soft_instance_list",
594 "softcell : softname fixed soft_instance_list",
595 "soft_instance_list : soft_instance",
596 "soft_instance_list : soft_instance_list instance soft_instance",
597 "soft_instance : corners aspect keep_outs class orient softpins pingroup",
598 "soft_instance : corners aspect keep_outs class orient softpins",
599 "soft_instance : corners aspect keep_outs class orient",
600 "instance : INSTANCE string",
601 "padcell : padname corners cur_orient restriction sidespace hardpins",
602 "padcell : padname corners cur_orient restriction sidespace",
603 "padgroup : padgroupname padgrouplist restriction sidespace",
604 "cellgroup : supergroupname supergrouplist class orient",
605 "cellgroup : cellgroupname neighborhood cellgrouplist",
606 "cellname : HARDCELL string NAME string",
607 "cellname : HARDCELL error",
608 "softname : SOFTCELL string NAME string",
609 "softname : CLUSTER INTEGER NAME string",
610 "softname : SOFTCELL error",
611 "neighborhood : NEIGHBORHOOD INTEGER FROM xloc INTEGER FROM yloc INTEGER FROM xloc INTEGER FROM yloc",
612 "neighborhood : NEIGHBORHOOD FIXED INTEGER FROM xloc INTEGER FROM yloc INTEGER FROM xloc INTEGER FROM yloc",
613 "fixed : fixedcontext AT INTEGER FROM xloc INTEGER FROM yloc",
614 "fixed : fixedcontext NEIGHBORHOOD INTEGER FROM xloc INTEGER FROM yloc INTEGER FROM xloc INTEGER FROM yloc",
615 "fixedcontext : FIXED",
616 "xloc : STRING",
617 "yloc : STRING",
618 "padname : PAD string NAME string",
619 "padgroupname : PADGROUP string PERMUTE",
620 "padgroupname : PADGROUP string NOPERMUTE",
621 "padgroupname : PADGROUP error",
622 "supergroupname : SUPERGROUP string NAME string",
623 "supergroupname : SUPERGROUP error",
624 "cellgroupname : CELLGROUP string NAME string",
625 "cellgroupname : CELLGROUP error",
626 "corners : numcorners cornerpts",
627 "numcorners : CORNERS INTEGER",
628 "cornerpts : INTEGER INTEGER",
629 "cornerpts : cornerpts INTEGER INTEGER",
630 "class : CLASS INTEGER",
631 "class : CLASS error",
632 "orient : numorientations ORIENTATIONS orientlist cur_orient",
633 "orient : ORIENTATIONS orientlist cur_orient",
634 "numorientations : INTEGER",
635 "orientlist : INTEGER",
636 "orientlist : orientlist INTEGER",
637 "cur_orient :",
638 "cur_orient : ORIENT INTEGER",
639 "aspect : ASPLB FLOAT ASPUB FLOAT",
640 "softpins : softpinlist",
641 "softpinlist : softtype",
642 "softpinlist : softpinlist softtype",
643 "softtype : pintype",
644 "softtype : softpin",
645 "hardpins : pintype",
646 "hardpins : hardpins pintype",
647 "pintype : pinrecord",
648 "pintype : pinrecord equiv_list",
649 "pinrecord : required_pinfo contour timing current power no_layer_change",
650 "required_pinfo : PIN NAME string SIGNAL string layer",
651 "contour : INTEGER INTEGER",
652 "contour : num_corners pin_pts",
653 "num_corners : CORNERS INTEGER",
654 "pin_pts : INTEGER INTEGER",
655 "pin_pts : pin_pts INTEGER INTEGER",
656 "current :",
657 "current : CURRENT FLOAT",
658 "power :",
659 "power : POWER FLOAT",
660 "no_layer_change :",
661 "no_layer_change : NO_LAYER_CHANGE",
662 "softpin : softpin_info siderestriction pinspace",
663 "softpin : softpin_info siderestriction pinspace softequivs",
664 "softpin_info : SOFTPIN NAME string SIGNAL string layer timing",
665 "softequivs : mc_equiv",
666 "softequivs : mc_equiv user_equiv_list",
667 "softequivs : user_equiv_list",
668 "mc_equiv : addequiv siderestriction",
669 "addequiv : ADDEQUIV",
670 "user_equiv_list : user_equiv",
671 "user_equiv_list : user_equiv_list user_equiv",
672 "user_equiv : equiv_name siderestriction connect",
673 "equiv_name : EQUIV NAME string layer",
674 "connect :",
675 "connect : CONNECT",
676 "pingroup : pingroupname pingrouplist siderestriction pinspace",
677 "pingroup : pingroup pingroupname pingrouplist siderestriction pinspace",
678 "pingroupname : PINGROUP string PERMUTE",
679 "pingroupname : PINGROUP string NOPERMUTE",
680 "pingrouplist : pinset",
681 "pingrouplist : pingrouplist pinset",
682 "pinset : string FIXED",
683 "pinset : string NONFIXED",
684 "equiv_list : equiv",
685 "equiv_list : equiv_list equiv",
686 "equiv : EQUIV NAME string layer INTEGER INTEGER",
687 "layer :",
688 "layer : LAYER INTEGER",
689 "siderestriction :",
690 "siderestriction : RESTRICT SIDE side_list",
691 "side_list : INTEGER",
692 "side_list : side_list INTEGER",
693 "pinspace :",
694 "pinspace : SIDESPACE FLOAT",
695 "pinspace : SIDESPACE FLOAT FLOAT",
696 "sidespace :",
697 "sidespace : SIDESPACE FLOAT",
698 "sidespace : SIDESPACE FLOAT FLOAT",
699 "sideplace : STRING",
700 "sideplace : error",
701 "restriction :",
702 "restriction : RESTRICT SIDE sideplace",
703 "padgrouplist : padset",
704 "padgrouplist : padgrouplist padset",
705 "padset : string FIXED",
706 "padset : string NONFIXED",
707 "supergrouplist : string",
708 "supergrouplist : supergrouplist string",
709 "cellgrouplist : string",
710 "cellgrouplist : cellgrouplist string",
711 "keep_outs :",
712 "keep_outs : keep_out_list",
713 "keep_out_list : keep_out",
714 "keep_out_list : keep_out_list keep_out",
715 "keep_out : KEEPOUT LAYER INTEGER CORNERS keep_pts",
716 "keep_pts : INTEGER INTEGER",
717 "keep_pts : keep_pts INTEGER INTEGER",
718 "timing :",
719 "timing : TIMING FLOAT",
720 "string : STRING",
721 "string : INTEGER",
722 "string : FLOAT",
723 };
724 #endif
725 #define yyclearin (yychar=(-1))
726 #define yyerrok (yyerrflag=0)
727 #ifdef YYSTACKSIZE
728 #ifndef YYMAXDEPTH
729 #define YYMAXDEPTH YYSTACKSIZE
730 #endif
731 #else
732 #ifdef YYMAXDEPTH
733 #define YYSTACKSIZE YYMAXDEPTH
734 #else
735 #define YYSTACKSIZE 500
736 #define YYMAXDEPTH 500
737 #endif
738 #endif
739 int yycnprs = 0;
740 int yydebug;
741 int yynerrs;
742 int yyerrflag;
743 int yychar;
744 short *yyssp2;
745 YYSTYPE *yyvsp2;
746 YYSTYPE yyval;
747 YYSTYPE yylval;
748 short yyss2[YYSTACKSIZE];
749 YYSTYPE yyvs2[YYSTACKSIZE];
750 #define yystacksize YYSTACKSIZE
751
752 #include "readcells_l.h"
753 /* add readcells_l.h for debug purposes */
754 /* ********************* #include "readcells_l.h" *******************/
755 /* ********************* #include "readcells_l.h" *******************/
756
readcells(fp)757 void readcells( fp )
758 FILE *fp ;
759 {
760 #ifdef YYDEBUG
761 extern int yydebug ;
762 yydebug = FALSE ;
763 #endif
764
765 yyin = fp ;
766 line_countS = 0 ;
767 initCellInfo() ;
768 /* parse input file using yacc */
769 yyparse();
770 cleanupReadCells() ;
771
772 } /* end readcells */
773
yyerror(s)774 void yyerror(s)
775 char *s;
776 {
777 sprintf(YmsgG,"problem reading %s.[m]cel:", cktNameG );
778 M( ERRMSG, "readcells", YmsgG ) ;
779 sprintf(YmsgG, " line %d near '%s' : %s\n" ,
780 line_countS+1, yytext, s );
781 M( ERRMSG, NULL, YmsgG ) ;
782 setErrorFlag() ;
783 }
784
yywrap()785 int yywrap()
786 {
787 return(1);
788 }
789
790 #define YYABORT goto yyabort
791 #define YYACCEPT goto yyaccept
792 #define YYERROR goto yyerrlab
793 int
yyparse()794 yyparse()
795 {
796 register int yym, yyn, yystate;
797 #if YYDEBUG
798 register char *yys;
799 extern char *getenv();
800
801 if (yys = getenv("YYDEBUG"))
802 {
803 yyn = *yys;
804 if (yyn >= '0' && yyn <= '9')
805 yydebug = yyn - '0';
806 }
807 #endif
808
809 yynerrs = 0;
810 yyerrflag = 0;
811 yychar = (-1);
812
813 yyssp2 = yyss2;
814 yyvsp2 = yyvs2;
815 *yyssp2 = yystate = 0;
816
817 yyloop:
818 if (yyn = yydefred[yystate]) goto yyreduce;
819 if (yychar < 0)
820 {
821 if ((yychar = yylex()) < 0) yychar = 0;
822 #if YYDEBUG
823 if (yydebug)
824 {
825 yys = 0;
826 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
827 if (!yys) yys = "illegal-symbol";
828 printf("yydebug: state %d, reading %d (%s)\n", yystate,
829 yychar, yys);
830 }
831 #endif
832 }
833 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
834 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
835 {
836 #if YYDEBUG
837 if (yydebug)
838 printf("yydebug: state %d, shifting to state %d\n",
839 yystate, yytable[yyn]);
840 #endif
841 if (yyssp2 >= yyss2 + yystacksize - 1)
842 {
843 goto yyoverflow;
844 }
845 *++yyssp2 = yystate = yytable[yyn];
846 *++yyvsp2 = yylval;
847 yychar = (-1);
848 if (yyerrflag > 0) --yyerrflag;
849 goto yyloop;
850 }
851 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
852 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
853 {
854 yyn = yytable[yyn];
855 goto yyreduce;
856 }
857 if (yyerrflag) goto yyinrecovery;
858 #ifdef lint
859 goto yynewerror;
860 #endif
861 yynewerror:
862 #if YYDEBUG
863 {
864 int test_state, i, expect, two_or_more ;
865 char err_msg[BUFSIZ] ;
866 if( yyname[yychar] ){
867 sprintf( err_msg, "Found %s.\nExpected ",
868 yyname[yychar] ) ;
869 two_or_more = 0 ;
870 if( test_state = yysindex[yystate] ){
871 for( i = 1; i <= YYMAXTOKEN; i++ ){
872 expect = test_state + i ;
873 if((expect <= YYTABLESIZE) &&
874 (yycheck[expect] == i) &&
875 yyname[i]){
876 if( two_or_more ){
877 strcat( err_msg, " | " ) ;
878 } else {
879 two_or_more = 1 ;
880 }
881 strcat( err_msg, yyname[i] ) ;
882 }
883 }
884 }
885 if( test_state = yyrindex[yystate] ){
886 for( i = 1; i <= YYMAXTOKEN; i++ ){
887 expect = test_state + i ;
888 if((expect <= YYTABLESIZE) &&
889 (yycheck[expect] == i) &&
890 yyname[i]){
891 if( two_or_more ){
892 strcat( err_msg, " | " ) ;
893 } else {
894 two_or_more = 1 ;
895 }
896 strcat( err_msg, yyname[i] ) ;
897 }
898 }
899 }
900 yyerror( err_msg ) ;
901 if (yycnprs) {
902 yychar = (-1);
903 if (yyerrflag > 0) --yyerrflag;
904 goto yyloop;
905 }
906 } else {
907 sprintf( err_msg, "Found unknown token.\nExpected ");
908 two_or_more = 0 ;
909 if( test_state = yysindex[yystate] ){
910 for( i = 1; i <= YYMAXTOKEN; i++ ){
911 expect = test_state + i ;
912 if((expect <= YYTABLESIZE) &&
913 (yycheck[expect] == i) &&
914 yyname[i]){
915 if( two_or_more ){
916 strcat( err_msg, " | " ) ;
917 } else {
918 two_or_more = 1 ;
919 }
920 strcat( err_msg, yyname[i] ) ;
921 }
922 }
923 }
924 if( test_state = yyrindex[yystate] ){
925 for( i = 1; i <= YYMAXTOKEN; i++ ){
926 expect = test_state + i ;
927 if((expect <= YYTABLESIZE) &&
928 (yycheck[expect] == i) &&
929 yyname[i]){
930 if( two_or_more ){
931 strcat( err_msg, " | " ) ;
932 } else {
933 two_or_more = 1 ;
934 }
935 strcat( err_msg, yyname[i] ) ;
936 }
937 }
938 }
939 yyerror( err_msg ) ;
940 if (yycnprs) {
941 yychar = (-1);
942 if (yyerrflag > 0) --yyerrflag;
943 goto yyloop;
944 }
945 }
946 }
947 #else
948 yyerror("syntax error");
949 if (yycnprs) {
950 yychar = (-1);
951 if (yyerrflag > 0) --yyerrflag;
952 goto yyloop;
953 }
954 #endif
955 #ifdef lint
956 goto yyerrlab;
957 #endif
958 yyerrlab:
959 ++yynerrs;
960 yyinrecovery:
961 if (yyerrflag < 3)
962 {
963 yyerrflag = 3;
964 for (;;)
965 {
966 if ((yyn = yysindex[*yyssp2]) && (yyn += YYERRCODE) >= 0 &&
967 yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
968 {
969 #if YYDEBUG
970 if (yydebug)
971 printf("yydebug: state %d, error recovery shifting\
972 to state %d\n", *yyssp2, yytable[yyn]);
973 #endif
974 if (yyssp2 >= yyss2 + yystacksize - 1)
975 {
976 goto yyoverflow;
977 }
978 *++yyssp2 = yystate = yytable[yyn];
979 *++yyvsp2 = yylval;
980 goto yyloop;
981 }
982 else
983 {
984 #if YYDEBUG
985 if (yydebug)
986 printf("yydebug: error recovery discarding state %d\n",
987 *yyssp2);
988 #endif
989 if (yyssp2 <= yyss2) goto yyabort;
990 --yyssp2;
991 --yyvsp2;
992 }
993 }
994 }
995 else
996 {
997 if (yychar == 0) goto yyabort;
998 #if YYDEBUG
999 if (yydebug)
1000 {
1001 yys = 0;
1002 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
1003 if (!yys) yys = "illegal-symbol";
1004 printf("yydebug: state %d, error recovery discards token %d (%s)\n",
1005 yystate, yychar, yys);
1006 }
1007 #endif
1008 yychar = (-1);
1009 goto yyloop;
1010 }
1011 yyreduce:
1012 #if YYDEBUG
1013 if (yydebug)
1014 printf("yydebug: state %d, reducing by rule %d (%s)\n",
1015 yystate, yyn, yyrule[yyn]);
1016 #endif
1017 yym = yylen[yyn];
1018 yyval = yyvsp2[1-yym];
1019 switch (yyn)
1020 {
1021 case 7:
1022 {
1023 endCell() ;
1024 }
1025 break;
1026 case 8:
1027 {
1028 endCell() ;
1029 }
1030 break;
1031 case 11:
1032 {
1033 endCell() ;
1034 }
1035 break;
1036 case 12:
1037 {
1038 endCell() ;
1039 }
1040 break;
1041 case 13:
1042 {
1043 endCell() ;
1044 }
1045 break;
1046 case 14:
1047 {
1048 endCell() ;
1049 }
1050 break;
1051 case 15:
1052 {
1053 endCell() ;
1054 }
1055 break;
1056 case 16:
1057 {
1058 endCell() ;
1059 }
1060 break;
1061 case 22:
1062 {
1063 sprintf(YmsgG,
1064 "cell at line %d does not have any pins\n",
1065 line_countS+1);
1066 M( WARNMSG,"readcells", YmsgG ) ;
1067 }
1068 break;
1069 case 29:
1070 {
1071 sprintf(YmsgG,
1072 "cell at line %d does not have any pins\n",
1073 line_countS+1);
1074 M( WARNMSG,"readcells", YmsgG ) ;
1075 }
1076 break;
1077 case 30:
1078 {
1079 endCell() ;
1080 add_instance( yyvsp2[0].string ) ;
1081 }
1082 break;
1083 case 32:
1084 {
1085 sprintf(YmsgG,
1086 "pad at line %d does not have any pins\n",
1087 line_countS+1);
1088 M( WARNMSG,"readcells", YmsgG ) ;
1089 }
1090 break;
1091 case 36:
1092 {
1093 addCell( yyvsp2[0].string, CUSTOMCELLTYPE ) ;
1094 }
1095 break;
1096 case 38:
1097 {
1098 addCell( yyvsp2[0].string, SOFTCELLTYPE ) ;
1099 }
1100 break;
1101 case 39:
1102 {
1103 addCell( yyvsp2[0].string, STDCELLTYPE ) ;
1104 }
1105 break;
1106 case 41:
1107 {
1108 /* group neighborhood is free to move */
1109 /* we use fixCell to build group box */
1110 fixCell( GROUPFLAG, yyvsp2[-11].ival, yyvsp2[-9].string, yyvsp2[-8].ival, yyvsp2[-6].string,
1111 yyvsp2[-5].ival, yyvsp2[-3].string, yyvsp2[-2].ival, yyvsp2[0].string ) ;
1112 addClass( --unique_classG ) ;
1113 }
1114 break;
1115 case 42:
1116 {
1117 /* group neighborhood is fixed */
1118 /* we use fixCell to build group box */
1119 fixCell( FIXEDGROUPFLAG, yyvsp2[-11].ival, yyvsp2[-9].string, yyvsp2[-8].ival, yyvsp2[-6].string,
1120 yyvsp2[-5].ival, yyvsp2[-3].string, yyvsp2[-2].ival, yyvsp2[0].string ) ;
1121 addClass( --unique_classG ) ;
1122
1123 }
1124 break;
1125 case 43:
1126 {
1127 /* cell is fixed at a point */
1128 fixCell( POINTFLAG, yyvsp2[-5].ival, yyvsp2[-3].string, yyvsp2[-2].ival, yyvsp2[0].string,
1129 0, "L", 0, "B" ) ;
1130 addClass( --unique_classG ) ;
1131 }
1132 break;
1133 case 44:
1134 {
1135 /* cell is fixed within a fixed neighborhood */
1136 fixCell( NEIGHBORHOODFLAG, yyvsp2[-11].ival, yyvsp2[-9].string, yyvsp2[-8].ival, yyvsp2[-6].string,
1137 yyvsp2[-5].ival, yyvsp2[-3].string, yyvsp2[-2].ival, yyvsp2[0].string ) ;
1138 addClass( --unique_classG ) ;
1139 }
1140 break;
1141 case 46:
1142 {
1143 yyval.string = yyvsp2[0].string ;
1144 }
1145 break;
1146 case 47:
1147 {
1148 yyval.string = yyvsp2[0].string ;
1149 }
1150 break;
1151 case 48:
1152 {
1153 addCell( yyvsp2[0].string, PADCELLTYPE ) ;
1154 }
1155 break;
1156 case 49:
1157 {
1158 addCell( yyvsp2[-1].string, PADGROUPTYPE ) ;
1159 setPermutation( TRUE ) ;
1160 }
1161 break;
1162 case 50:
1163 {
1164 addCell( yyvsp2[-1].string, PADGROUPTYPE ) ;
1165 setPermutation( FALSE ) ;
1166 }
1167 break;
1168 case 52:
1169 {
1170 addCell( yyvsp2[0].string, SUPERCELLTYPE ) ;
1171 /* initSuperGroup() ; */
1172 }
1173 break;
1174 case 54:
1175 {
1176 addCell( yyvsp2[0].string, GROUPCELLTYPE ) ;
1177 }
1178 break;
1179 case 56:
1180 {
1181 processCorners( yyvsp2[-1].ival ) ;
1182 }
1183 break;
1184 case 57:
1185 {
1186 yyval.ival = yyvsp2[0].ival ;
1187 }
1188 break;
1189 case 58:
1190 {
1191 addCorner( yyvsp2[-1].ival, yyvsp2[0].ival ) ;
1192 }
1193 break;
1194 case 59:
1195 {
1196 addCorner( yyvsp2[-1].ival, yyvsp2[0].ival ) ;
1197 }
1198 break;
1199 case 60:
1200 {
1201 addClass( yyvsp2[0].ival ) ;
1202 }
1203 break;
1204 case 65:
1205 {
1206 /* first in the list is the initial orientation */
1207 initOrient( yyvsp2[0].ival ) ;
1208 }
1209 break;
1210 case 66:
1211 {
1212 addOrient( yyvsp2[0].ival ) ;
1213 }
1214 break;
1215 case 68:
1216 {
1217 set_cur_orient( yyvsp2[0].ival ) ;
1218 }
1219 break;
1220 case 69:
1221 {
1222 addAspectBounds( yyvsp2[-2].fval, yyvsp2[0].fval ) ;
1223 }
1224 break;
1225 case 70:
1226 {
1227 add_soft_array() ;
1228 }
1229 break;
1230 case 79:
1231 {
1232 process_pin() ;
1233 }
1234 break;
1235 case 80:
1236 {
1237 addPin( yyvsp2[-3].string, yyvsp2[-1].string, yyvsp2[0].ival, HARDPINTYPE ) ;
1238 }
1239 break;
1240 case 81:
1241 {
1242 set_pin_pos( yyvsp2[-1].ival, yyvsp2[0].ival ) ;
1243 }
1244 break;
1245 case 83:
1246 {
1247 add_analog( yyvsp2[0].ival ) ;
1248 }
1249 break;
1250 case 84:
1251 {
1252 add_pin_contour( yyvsp2[-1].ival, yyvsp2[0].ival ) ;
1253 }
1254 break;
1255 case 85:
1256 {
1257 add_pin_contour( yyvsp2[-1].ival, yyvsp2[0].ival ) ;
1258 }
1259 break;
1260 case 87:
1261 {
1262 add_current( yyvsp2[0].fval ) ;
1263 }
1264 break;
1265 case 89:
1266 {
1267 add_power( yyvsp2[0].fval ) ;
1268 }
1269 break;
1270 case 91:
1271 {
1272 no_layer_change() ;
1273 }
1274 break;
1275 case 94:
1276 {
1277 addPin( yyvsp2[-4].string, yyvsp2[-2].string, yyvsp2[-1].ival, SOFTPINTYPE ) ;
1278 set_restrict_type( SOFTPINTYPE ) ;
1279 }
1280 break;
1281 case 98:
1282 {
1283 /* we are now done with addequiv types */
1284 set_restrict_type( SOFTEQUIVTYPE ) ;
1285 }
1286 break;
1287 case 99:
1288 {
1289 set_restrict_type( ADDEQUIVTYPE ) ;
1290 addEquivPin( NULL, 0, 0, 0, ADDEQUIVTYPE ) ;
1291 }
1292 break;
1293 case 103:
1294 {
1295 addPin( yyvsp2[-1].string, NULL, yyvsp2[0].ival, SOFTEQUIVTYPE ) ;
1296 }
1297 break;
1298 case 104:
1299 { yyval.ival = FALSE ; }
1300 break;
1301 case 105:
1302 { yyval.ival = TRUE ; }
1303 break;
1304 case 108:
1305 {
1306 set_restrict_type( PINGROUPTYPE ) ;
1307 start_pin_group( yyvsp2[-1].string, TRUE ) ;
1308 }
1309 break;
1310 case 109:
1311 {
1312 set_restrict_type( PINGROUPTYPE ) ;
1313 start_pin_group( yyvsp2[-1].string, FALSE ) ;
1314 }
1315 break;
1316 case 112:
1317 {
1318 add2pingroup( yyvsp2[-1].string, TRUE ) ; /* fixed */
1319 }
1320 break;
1321 case 113:
1322 {
1323 add2pingroup( yyvsp2[-1].string, FALSE ) ; /* nonfixed */
1324 }
1325 break;
1326 case 116:
1327 {
1328 addEquivPin( yyvsp2[-3].string, yyvsp2[-2].ival, yyvsp2[-1].ival, yyvsp2[0].ival, HARDPINTYPE ) ;
1329 }
1330 break;
1331 case 117:
1332 { /* default any layer */ yyval.ival = 0 ; }
1333 break;
1334 case 118:
1335 { yyval.ival = yyvsp2[0].ival ; }
1336 break;
1337 case 121:
1338 {
1339 addSideRestriction( yyvsp2[0].ival ) ;
1340 }
1341 break;
1342 case 122:
1343 {
1344 addSideRestriction( yyvsp2[0].ival ) ;
1345 }
1346 break;
1347 case 124:
1348 {
1349 add_pinspace( yyvsp2[0].fval, yyvsp2[0].fval ) ;
1350 }
1351 break;
1352 case 125:
1353 {
1354 add_pinspace( yyvsp2[-1].fval, yyvsp2[0].fval ) ;
1355 }
1356 break;
1357 case 127:
1358 {
1359 addSideSpace( yyvsp2[0].fval, yyvsp2[0].fval ) ;
1360 }
1361 break;
1362 case 128:
1363 {
1364 addSideSpace( yyvsp2[-1].fval, yyvsp2[0].fval ) ;
1365 }
1366 break;
1367 case 129:
1368 {
1369 addPadSide( yyvsp2[0].string ) ;
1370 }
1371 break;
1372 case 135:
1373 {
1374 add2padgroup( yyvsp2[-1].string, TRUE ) ; /* fixed */
1375 }
1376 break;
1377 case 136:
1378 {
1379 add2padgroup( yyvsp2[-1].string, FALSE ) ; /* nonfixed */
1380 }
1381 break;
1382 case 139:
1383 {
1384 add_cell_to_group( yyvsp2[0].string ) ;
1385 }
1386 break;
1387 case 140:
1388 {
1389 add_cell_to_group( yyvsp2[0].string ) ;
1390 }
1391 break;
1392 case 150:
1393 {
1394 yyval.string = yyvsp2[0].string ;
1395 }
1396 break;
1397 case 151:
1398 {
1399 /* convert integer to string */
1400 /* this allows integers to be used as strings */
1401 /* a kluge but timberwolf's old parser supported it */
1402 sprintf( bufferS,"%d", yyvsp2[0].ival ) ;
1403 /* now clone string */
1404 yyval.string = (char *) Ystrclone( bufferS ) ;
1405 }
1406 break;
1407 case 152:
1408 {
1409 /* convert float to string */
1410 /* this allows floats to be used as strings */
1411 /* a kluge but timberwolf's old parser supported it */
1412 sprintf( bufferS,"%f", yyvsp2[0].fval ) ;
1413 /* now clone string */
1414 yyval.string = (char *) Ystrclone( bufferS ) ;
1415 }
1416 break;
1417 }
1418 yyssp2 -= yym;
1419 yystate = *yyssp2;
1420 yyvsp2 -= yym;
1421 yym = yylhs[yyn];
1422 if (yystate == 0 && yym == 0)
1423 {
1424 #if YYDEBUG
1425 if (yydebug)
1426 printf("yydebug: after reduction, shifting from state 0 to\
1427 state %d\n", YYFINAL);
1428 #endif
1429 yystate = YYFINAL;
1430 *++yyssp2 = YYFINAL;
1431 *++yyvsp2 = yyval;
1432 if (yychar < 0)
1433 {
1434 if ((yychar = yylex()) < 0) yychar = 0;
1435 #if YYDEBUG
1436 if (yydebug)
1437 {
1438 yys = 0;
1439 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
1440 if (!yys) yys = "illegal-symbol";
1441 printf("yydebug: state %d, reading %d (%s)\n",
1442 YYFINAL, yychar, yys);
1443 }
1444 #endif
1445 }
1446 if (yychar == 0) goto yyaccept;
1447 goto yyloop;
1448 }
1449 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
1450 yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
1451 yystate = yytable[yyn];
1452 else
1453 yystate = yydgoto[yym];
1454 #if YYDEBUG
1455 if (yydebug)
1456 printf("yydebug: after reduction, shifting from state %d \
1457 to state %d\n", *yyssp2, yystate);
1458 #endif
1459 if (yyssp2 >= yyss2 + yystacksize - 1)
1460 {
1461 goto yyoverflow;
1462 }
1463 *++yyssp2 = yystate;
1464 *++yyvsp2 = yyval;
1465 goto yyloop;
1466 yyoverflow:
1467 yyerror("yacc stack overflow");
1468 yyabort:
1469 return (1);
1470 yyaccept:
1471 return (0);
1472 }
1473