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