|
|
1.1 root 1:
2: # line 3 "parser.y"
3: /*******************************************************************
4: * *
5: * File: CIFPLOT/parser.y *
6: * Written by Dan Fitzpatrick *
7: * copyright 1980 -- Regents of the University of California *
8: * *
9: ********************************************************************/
10:
11: /* This is a YACC description for the parser */
12:
13: /* In the offical CIF language description SEMI = BLANKLIST ';' BLANKLIST
14: * but this causes ambiguities for the LALR(1) parser so the scanner
15: * returns ';' when it spots the pattern BLANKLIST ';'
16: */
17:
18: #include <stdio.h>
19: #include "defs.h"
20: #include "globals.h"
21: #include "structs.h"
22: #include "alloc.h"
23:
24: #define yyparse parser
25: #define yylex scanner
26:
27: #define null Concat("",0);
28: int Definning=0;
29: int SendAll=0; /* If set causes the lexical analyzer to return
30: * BLANKLIST and ';' seperately */
31: int A = 1;
32: int B = 1;
33:
34: #define SCALE(x) ( (((real) A) * ((real) x)) / ((real) B ))
35:
36: # define BLANK 257
37: # define OTHERCHAR 258
38: # define COMMENT_COMMAND 259
39: #define yyclearin yychar = -1
40: #define yyerrok yyerrflag = 0
41: extern int yychar;
42: extern short yyerrflag;
43: #ifndef YYMAXDEPTH
44: #define YYMAXDEPTH 150
45: #endif
46: #ifndef YYSTYPE
47: #define YYSTYPE int
48: #endif
49: YYSTYPE yylval, yyval;
50: # define YYERRCODE 256
51:
52: # line 527 "parser.y"
53:
54:
55: #include "scanner.c"
56:
57: short yyexca[] ={
58: -1, 1,
59: 0, -1,
60: -2, 0,
61: -1, 2,
62: 0, 4,
63: -2, 167,
64: -1, 23,
65: 59, 35,
66: -2, 16,
67: -1, 49,
68: 59, 35,
69: -2, 26,
70: -1, 155,
71: 59, 81,
72: -2, 160,
73: };
74: # define YYNPROD 168
75: # define YYLAST 1046
76: short yyact[]={
77:
78: 242, 158, 132, 183, 226, 227, 192, 193, 184, 157,
79: 182, 194, 162, 164, 89, 90, 91, 92, 93, 94,
80: 95, 96, 97, 98, 36, 159, 160, 167, 166, 165,
81: 70, 99, 100, 101, 102, 103, 104, 105, 106, 107,
82: 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
83: 118, 119, 120, 121, 122, 123, 124, 188, 68, 66,
84: 64, 61, 11, 192, 193, 55, 52, 133, 194, 132,
85: 150, 89, 90, 91, 92, 93, 94, 95, 96, 97,
86: 98, 11, 131, 57, 44, 149, 220, 218, 99, 100,
87: 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
88: 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
89: 121, 122, 123, 124, 230, 54, 200, 214, 231, 76,
90: 192, 193, 10, 26, 75, 194, 198, 34, 89, 90,
91: 91, 92, 93, 94, 95, 96, 97, 98, 43, 22,
92: 21, 20, 19, 18, 17, 99, 100, 101, 102, 103,
93: 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
94: 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
95: 124, 16, 129, 36, 126, 25, 27, 50, 15, 14,
96: 13, 41, 6, 36, 83, 5, 2, 1, 0, 36,
97: 0, 0, 0, 159, 217, 0, 0, 0, 0, 0,
98: 192, 193, 159, 0, 0, 194, 0, 0, 89, 90,
99: 91, 92, 93, 94, 95, 96, 97, 98, 159, 0,
100: 0, 181, 174, 232, 191, 99, 100, 101, 102, 103,
101: 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
102: 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
103: 124, 188, 207, 170, 204, 0, 36, 192, 193, 38,
104: 12, 0, 194, 0, 180, 89, 90, 91, 92, 93,
105: 94, 95, 96, 97, 98, 48, 0, 0, 224, 0,
106: 235, 191, 99, 100, 101, 102, 103, 104, 105, 106,
107: 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
108: 117, 118, 119, 120, 121, 122, 123, 124, 234, 89,
109: 90, 91, 92, 93, 94, 95, 96, 97, 98, 146,
110: 0, 0, 89, 90, 91, 92, 93, 94, 95, 96,
111: 97, 98, 0, 251, 250, 0, 253, 232, 191, 99,
112: 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
113: 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
114: 120, 121, 122, 123, 124, 141, 0, 0, 89, 90,
115: 91, 92, 93, 94, 95, 96, 97, 98, 0, 0,
116: 0, 0, 0, 0, 0, 99, 100, 101, 102, 103,
117: 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
118: 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
119: 124, 87, 88, 186, 0, 0, 86, 215, 191, 89,
120: 90, 91, 92, 93, 94, 95, 96, 97, 98, 0,
121: 48, 0, 0, 187, 185, 0, 99, 100, 101, 102,
122: 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
123: 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
124: 123, 124, 89, 90, 91, 92, 93, 94, 95, 96,
125: 97, 98, 0, 0, 0, 191, 0, 0, 0, 99,
126: 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
127: 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
128: 120, 121, 122, 123, 124, 99, 100, 101, 102, 103,
129: 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
130: 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
131: 124, 136, 137, 99, 100, 101, 102, 103, 104, 105,
132: 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
133: 116, 117, 118, 119, 120, 121, 122, 123, 124, 59,
134: 4, 0, 35, 0, 0, 4, 0, 0, 0, 0,
135: 0, 4, 11, 0, 35, 0, 0, 136, 137, 29,
136: 33, 24, 9, 0, 4, 0, 156, 134, 0, 32,
137: 0, 140, 4, 28, 11, 30, 0, 0, 202, 211,
138: 31, 29, 33, 47, 29, 33, 24, 4, 0, 0,
139: 4, 32, 0, 0, 32, 28, 211, 30, 28, 0,
140: 30, 0, 31, 29, 33, 31, 211, 0, 36, 155,
141: 212, 0, 216, 32, 0, 211, 0, 28, 221, 30,
142: 0, 135, 153, 0, 31, 138, 142, 0, 144, 0,
143: 142, 147, 233, 148, 145, 0, 0, 0, 7, 0,
144: 161, 163, 0, 0, 39, 40, 154, 3, 233, 0,
145: 0, 36, 37, 45, 58, 0, 0, 0, 42, 85,
146: 0, 0, 0, 0, 53, 0, 0, 0, 0, 4,
147: 35, 51, 0, 0, 56, 0, 139, 136, 137, 67,
148: 125, 0, 0, 0, 62, 62, 62, 128, 62, 152,
149: 0, 0, 0, 0, 127, 189, 0, 130, 0, 4,
150: 199, 0, 0, 0, 0, 136, 137, 0, 0, 35,
151: 0, 0, 0, 176, 0, 0, 0, 0, 178, 0,
152: 0, 0, 0, 4, 195, 0, 0, 0, 0, 201,
153: 0, 203, 0, 84, 0, 0, 0, 0, 0, 205,
154: 219, 0, 0, 0, 0, 206, 0, 0, 155, 8,
155: 155, 0, 23, 0, 143, 0, 0, 0, 143, 0,
156: 219, 0, 0, 151, 213, 168, 155, 155, 0, 0,
157: 155, 46, 152, 0, 49, 36, 169, 23, 190, 0,
158: 0, 0, 155, 0, 60, 190, 62, 0, 62, 0,
159: 236, 237, 0, 4, 36, 0, 49, 240, 0, 62,
160: 0, 0, 0, 152, 0, 0, 197, 190, 0, 173,
161: 248, 0, 0, 62, 249, 63, 65, 190, 69, 252,
162: 190, 0, 179, 0, 190, 190, 0, 0, 0, 152,
163: 209, 225, 0, 228, 190, 0, 175, 143, 0, 0,
164: 190, 175, 143, 190, 0, 0, 151, 0, 0, 238,
165: 239, 0, 0, 241, 0, 0, 190, 208, 0, 210,
166: 62, 0, 0, 0, 0, 247, 0, 0, 62, 0,
167: 152, 0, 175, 0, 175, 0, 0, 151, 0, 0,
168: 0, 223, 0, 0, 0, 0, 0, 0, 0, 0,
169: 0, 62, 0, 0, 0, 62, 0, 0, 0, 0,
170: 254, 0, 0, 151, 0, 0, 0, 0, 0, 0,
171: 243, 0, 245, 0, 0, 0, 171, 0, 172, 71,
172: 72, 73, 77, 78, 79, 80, 81, 82, 74, 177,
173: 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
174: 0, 0, 0, 196, 151, 0, 0, 99, 100, 101,
175: 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
176: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
177: 122, 123, 124, 0, 0, 0, 0, 0, 0, 0,
178: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
179: 222, 0, 0, 0, 0, 0, 0, 0, 229, 0,
180: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
181: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
182: 0, 244, 0, 0, 0, 246 };
183: short yypact[]={
184:
185: -1000,-1000, 513,-233,-1000, 3, 22,-1000,-1000,-1000,
186: -1000,-1000,-1000,-1000, 535,-1000,-1000,-1000,-1000,-1000,
187: -1000,-1000,-1000,-1000,-190, 22,-1000,-1000,-191,-195,
188: -196,-197,-198,-226, 891,-1000,-1000, 371,-1000,-1000,
189: -1000, 22,-233,-1000,-1000,-1000,-1000,-1000, 22,-1000,
190: -1000, -1,-1000,-1000, 468,-1000,-1000, 440, 320,-1000,
191: 468,-1000, 274, 468,-1000, 468,-1000, 414,-1000,-1000,
192: -1000, -64,-231, -55, -39,-227,-228,-1000,-1000,-1000,
193: -1000,-1000,-1000,-229,-1000,-1000,-1000,-1000,-1000,-1000,
194: -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
195: -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
196: -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
197: -1000,-1000,-1000,-1000,-1000,-1000, 22, -68,-1000,-1000,
198: 538,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
199: 261, 261,-1000,-1000,-1000, 261, 261,-1000,-1000,-1000,
200: 902,-1000,-1000,-1000, -74,-1000, 217,-232,-1000,-1000,
201: -1000, 82,-232, 217,-232,-1000,-1000,-1000,-1000, 557,
202: -1000, 468,-1000,-1000,-1000,-1000, 261, 468, 261,-1000,
203: 468, 902,-1000,-1000,-1000, 217,-1000,-1000,-1000,-1000,
204: -1000,-1000,-1000,-1000,-1000, 217, 468,-233, 160,-1000,
205: -1000, 52, 217, 217,-1000,-1000,-1000, 902,-1000, -84,
206: -1000,-1000, 217,-1000,-1000,-1000,-1000,-1000, 80,-1000,
207: -1000, 23, 468, 468,-1000,-1000,-1000,-1000,-1000, 468,
208: -1000,-1000,-1000,-1000, -34,-1000,-1000,-1000,-1000,-1000,
209: -1000,-1000,-1000,-232,-1000,-1000, 468,-1000, 902,-1000,
210: -1000, 468,-1000,-1000,-233 };
211: short yypgo[]={
212:
213: 0, 187, 186, 185, 666, 658, 184, 182, 181, 122,
214: 260, 180, 179, 123, 178, 177, 176, 84, 175, 174,
215: 172, 171, 144, 143, 142, 141, 140, 139, 115, 804,
216: 587, 694, 85, 642, 127, 586, 434, 83, 126, 87,
217: 124, 119, 559, 674, 591, 715, 70, 641, 413, 433,
218: 118, 117 };
219: short yyr1[]={
220:
221: 0, 1, 1, 1, 1, 1, 2, 2, 2, 8,
222: 2, 7, 9, 9, 9, 9, 15, 14, 14, 14,
223: 12, 12, 12, 19, 12, 17, 20, 17, 10, 10,
224: 10, 10, 10, 10, 10, 10, 21, 21, 22, 22,
225: 22, 23, 23, 24, 24, 25, 25, 18, 18, 13,
226: 11, 16, 26, 26, 27, 27, 27, 27, 27, 27,
227: 27, 27, 27, 27, 27, 40, 40, 40, 40, 41,
228: 41, 41, 41, 41, 41, 34, 3, 33, 33, 33,
229: 33, 33, 28, 28, 31, 31, 37, 37, 29, 29,
230: 44, 44, 32, 32, 32, 32, 46, 46, 43, 43,
231: 30, 30, 30, 47, 47, 47, 47, 47, 47, 47,
232: 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
233: 47, 47, 47, 47, 47, 47, 47, 47, 47, 45,
234: 45, 45, 45, 45, 45, 45, 45, 45, 45, 36,
235: 36, 48, 48, 39, 39, 50, 50, 38, 38, 51,
236: 51, 51, 49, 49, 49, 49, 49, 49, 35, 4,
237: 4, 6, 6, 6, 6, 6, 5, 42 };
238: short yyr2[]={
239:
240: 0, 3, 3, 3, 1, 5, 3, 2, 1, 0,
241: 4, 1, 1, 1, 2, 1, 0, 4, 1, 1,
242: 2, 2, 2, 0, 4, 2, 0, 4, 1, 1,
243: 1, 1, 1, 1, 1, 1, 2, 2, 6, 8,
244: 2, 4, 2, 4, 2, 3, 2, 4, 8, 3,
245: 4, 2, 3, 2, 4, 5, 13, 4, 7, 8,
246: 4, 7, 9, 3, 3, 1, 1, 1, 1, 1,
247: 1, 1, 1, 1, 1, 1, 1, 4, 5, 5,
248: 4, 1, 3, 1, 3, 2, 2, 3, 2, 3,
249: 2, 1, 1, 2, 3, 4, 1, 1, 2, 1,
250: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
251: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
252: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
253: 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
254: 1, 1, 1, 2, 1, 1, 1, 2, 1, 1,
255: 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
256: 1, 1, 1, 1, 1, 1, 2, 0 };
257: short yychk[]={
258:
259: -1000, -1, -2, -4, -42, -3, -7, -5, 256, 69,
260: -9, 59, -10, -11, -12, -14, -21, -22, -23, -24,
261: -25, -26, -27, 259, 68, -18, -13, -16, 80, 66,
262: 82, 87, 76, 67, -34, -42, 257, -4, 256, -5,
263: -5, -8, -4, -13, -17, -5, 256, 68, -10, 259,
264: -15, -4, 256, -5, -28, 256, -31, -37, -43, -42,
265: -29, 256, -43, -29, 256, -29, 256, -4, 256, -29,
266: 256, 48, 49, 50, 57, -40, -41, 51, 52, 53,
267: 54, 55, 56, -6, -45, -47, 45, 40, 41, 48,
268: 49, 50, 51, 52, 53, 54, 55, 56, 57, 65,
269: 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
270: 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
271: 86, 87, 88, 89, 90, -5, -19, -4, -5, -20,
272: -4, 83, 70, 68, -30, -47, 257, 258, -30, 256,
273: -44, 45, -30, -45, -30, -44, 45, -30, -30, -32,
274: -46, -45, -47, -33, -4, -42, -35, 73, 65, 257,
275: 257, -35, 67, -35, 52, 256, 256, 256, -5, -4,
276: -9, -29, -29, -31, -37, -45, -44, -29, -44, -31,
277: -28, -46, 84, 77, 82, -36, -48, -49, 34, -45,
278: -47, 258, 40, 41, 45, -35, -29, -4, -38, -42,
279: 34, -35, -36, -35, -17, -30, -30, -46, -31, -4,
280: -31, -48, -36, -30, -51, 257, -49, 34, -39, -42,
281: 34, -36, -29, -31, -46, -33, 88, 89, -33, -29,
282: 34, -50, 257, -49, -39, 257, -30, -30, -33, -33,
283: -30, -33, 34, -31, -29, -31, -29, -33, -35, -30,
284: -32, -37, -30, -37, -4 };
285: short yydef[]={
286:
287: 167, -2, -2, 8, 160, 167, 0, 7, 9, 76,
288: 11, 167, 12, 13, 167, 15, 28, 29, 30, 31,
289: 32, 33, 34, -2, 167, 0, 18, 19, 167, 167,
290: 167, 167, 167, 167, 0, 75, 159, 1, 2, 3,
291: 6, 0, 166, 14, 20, 21, 23, 167, 0, -2,
292: 167, 0, 51, 22, 36, 37, 83, 0, 0, 99,
293: 0, 40, 0, 0, 42, 0, 44, 0, 46, 167,
294: 53, 65, 66, 67, 68, 0, 0, 69, 70, 71,
295: 72, 73, 74, 0, 161, 162, 163, 164, 165, 129,
296: 130, 131, 132, 133, 134, 135, 136, 137, 138, 103,
297: 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
298: 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
299: 124, 125, 126, 127, 128, 10, 0, 0, 25, 167,
300: 167, 167, 49, 167, 167, 100, 101, 102, 167, 85,
301: 86, 0, 98, 91, 167, 88, 0, 167, 167, 45,
302: 92, 96, 97, 52, 0, -2, 0, 0, 167, 167,
303: 167, 0, 0, 0, 0, 63, 64, 5, 24, 167,
304: 17, 47, 50, 82, 84, 90, 87, 0, 89, 41,
305: 43, 93, 167, 167, 167, 54, 140, 141, 142, 152,
306: 153, 154, 155, 156, 157, 0, 0, 158, 57, 148,
307: 167, 0, 60, 0, 27, 167, 167, 94, 167, 0,
308: 167, 139, 55, 167, 147, 149, 150, 151, 0, 144,
309: 167, 0, 0, 38, 95, 77, 167, 167, 80, 0,
310: 167, 143, 145, 146, 0, 167, 167, 167, 78, 79,
311: 167, 58, 167, 61, 48, 39, 0, 59, 0, 167,
312: 62, 0, 167, 167, 56 };
313: #
314: # define YYFLAG -1000
315: # define YYERROR goto yyerrlab
316: # define YYACCEPT return(0)
317: # define YYABORT return(1)
318:
319: /* parser for yacc output */
320:
321: #ifdef YYDEBUG
322: int yydebug = 0; /* 1 for debugging */
323: #endif
324: YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
325: int yychar = -1; /* current input token number */
326: int yynerrs = 0; /* number of errors */
327: short yyerrflag = 0; /* error recovery flag */
328:
329: yyparse() {
330:
331: short yys[YYMAXDEPTH];
332: short yyj, yym;
333: register YYSTYPE *yypvt;
334: register short yystate, *yyps, yyn;
335: register YYSTYPE *yypv;
336: register short *yyxi;
337:
338: yystate = 0;
339: yychar = -1;
340: yynerrs = 0;
341: yyerrflag = 0;
342: yyps= &yys[-1];
343: yypv= &yyv[-1];
344:
345: yystack: /* put a state and value onto the stack */
346:
347: #ifdef YYDEBUG
348: if( yydebug ) printf( "state %d, char 0%o\n", yystate, yychar );
349: #endif
350: if( ++yyps> &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); }
351: *yyps = yystate;
352: ++yypv;
353: *yypv = yyval;
354:
355: yynewstate:
356:
357: yyn = yypact[yystate];
358:
359: if( yyn<= YYFLAG ) goto yydefault; /* simple state */
360:
361: if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
362: if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
363:
364: if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
365: yychar = -1;
366: yyval = yylval;
367: yystate = yyn;
368: if( yyerrflag > 0 ) --yyerrflag;
369: goto yystack;
370: }
371:
372: yydefault:
373: /* default state action */
374:
375: if( (yyn=yydef[yystate]) == -2 ) {
376: if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
377: /* look through exception table */
378:
379: for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
380:
381: while( *(yyxi+=2) >= 0 ){
382: if( *yyxi == yychar ) break;
383: }
384: if( (yyn = yyxi[1]) < 0 ) return(0); /* accept */
385: }
386:
387: if( yyn == 0 ){ /* error */
388: /* error ... attempt to resume parsing */
389:
390: switch( yyerrflag ){
391:
392: case 0: /* brand new error */
393:
394: yyerror( "syntax error" );
395: yyerrlab:
396: ++yynerrs;
397:
398: case 1:
399: case 2: /* incompletely recovered error ... try again */
400:
401: yyerrflag = 3;
402:
403: /* find a state where "error" is a legal shift action */
404:
405: while ( yyps >= yys ) {
406: yyn = yypact[*yyps] + YYERRCODE;
407: if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
408: yystate = yyact[yyn]; /* simulate a shift of "error" */
409: goto yystack;
410: }
411: yyn = yypact[*yyps];
412:
413: /* the current yyps has no shift onn "error", pop stack */
414:
415: #ifdef YYDEBUG
416: if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
417: #endif
418: --yyps;
419: --yypv;
420: }
421:
422: /* there is no state on the stack with an error shift ... abort */
423:
424: yyabort:
425: return(1);
426:
427:
428: case 3: /* no shift yet; clobber input char */
429:
430: #ifdef YYDEBUG
431: if( yydebug ) printf( "error recovery discards char %d\n", yychar );
432: #endif
433:
434: if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
435: yychar = -1;
436: goto yynewstate; /* try again in the same state */
437:
438: }
439:
440: }
441:
442: /* reduction by production yyn */
443:
444: #ifdef YYDEBUG
445: if( yydebug ) printf("reduce %d\n",yyn);
446: #endif
447: yyps -= yyr2[yyn];
448: yypvt = yypv;
449: yypv -= yyr2[yyn];
450: yyval = yypv[1];
451: yym=yyn;
452: /* consult goto table to find next state */
453: yyn = yyr1[yyn];
454: yyj = yypgo[yyn] + *yyps + 1;
455: if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
456: switch(yym){
457:
458: case 2:
459: # line 47 "parser.y"
460: { Error("Improper Ending",FATAL); } break;
461: case 3:
462: # line 49 "parser.y"
463: { Error("Semi-Colon found after End",
464: RECOVERABLE); } break;
465: case 4:
466: # line 52 "parser.y"
467: { Error("No End Statement",RECOVERABLE); } break;
468: case 5:
469: # line 54 "parser.y"
470: { Error("Garbage after End Statement",
471: RECOVERABLE); } break;
472: case 9:
473: # line 63 "parser.y"
474: { Error("Unrecognizable Command",FATAL); } break;
475: case 12:
476: # line 73 "parser.y"
477: { Execute(yypvt[-0]); } break;
478: case 14:
479: # line 76 "parser.y"
480: { Execute(yypvt[-1]);
481: Definning = 0;
482: A=1; B=1; } break;
483: case 16:
484: # line 84 "parser.y"
485: { Error("Comments must end with a semi-colon",
486: RECOVERABLE); } break;
487: case 17:
488: # line 87 "parser.y"
489: { yyval = yypvt[-3]; } break;
490: case 18:
491: # line 89 "parser.y"
492: { Error("Define Finnished found outside of Definition",
493: FATAL);
494: yyval = yypvt[-0]; } break;
495: case 19:
496: # line 93 "parser.y"
497: { Error("Unrecognized Definition Command",
498: FATAL); } break;
499: case 20:
500: # line 99 "parser.y"
501: { yyval = AddCmd(yypvt[-1],yypvt[-0]); } break;
502: case 21:
503: # line 101 "parser.y"
504: { yyval = yypvt[-1]; } break;
505: case 22:
506: # line 103 "parser.y"
507: { Definning = 1;
508: A=(int) ((Command *) yypvt[-1])->Ctype.Symbl.a;
509: B=(int) ((Command *) yypvt[-1])->Ctype.Symbl.b;
510: yyval = yypvt[-1]; } break;
511: case 23:
512: # line 108 "parser.y"
513: { yyval = yypvt[-1];
514: Error("Unrecognized or Illegal Command in Definition",
515: FATAL); } break;
516: case 25:
517: # line 116 "parser.y"
518: { yyval = yypvt[-1]; } break;
519: case 26:
520: # line 118 "parser.y"
521: { Error("Comments must end with a semi-colon",RECOVERABLE); } break;
522: case 27:
523: # line 120 "parser.y"
524: { yyval = yypvt[-0]; } break;
525: case 36:
526: # line 136 "parser.y"
527: { /* Polygons must have more than two
528: * vertices to be well defined */
529: if( ((struct PathHeader *) yypvt[-0])->PNo < 3)
530: Error("Degenerate Polygon",WARNING);
531: /* Polygons with less than two vertices are
532: * useless */
533: if( ((struct PathHeader *) yypvt[-0])->PNo < 2) {
534: Error("Command Ignored",WARNING);
535: yyval = MakeComment();
536: }
537: else
538: yyval = MakePoly(yypvt[-0]); } break;
539: case 37:
540: # line 149 "parser.y"
541: { Error("Bad Path Descriptor in Polygon",FATAL);
542: yyval = MakeComment(); } break;
543: case 38:
544: # line 155 "parser.y"
545: { yyval = MakeBox(SCALE(yypvt[-4]),SCALE(yypvt[-2]),yypvt[-0],
546: MakePoint(1.0,0.0));
547: Free(yypvt[-0]); } break;
548: case 39:
549: # line 159 "parser.y"
550: { if(!CheckPoint(yypvt[-0]))
551: Error("Bad Direction Vector in Box Command",FATAL);
552: yyval = MakeBox(SCALE(yypvt[-6]),SCALE(yypvt[-4]),yypvt[-2],yypvt[-0]);
553: Free(yypvt[-2]); Free(yypvt[-0]); } break;
554: case 40:
555: # line 164 "parser.y"
556: { Error("Illegal Box Description",FATAL);
557: yyval = MakeComment(); } break;
558: case 41:
559: # line 170 "parser.y"
560: { yyval = MakeFlash(SCALE(yypvt[-2]),yypvt[-0]);} break;
561: case 42:
562: # line 172 "parser.y"
563: { Error("Illegal Round Flash Description",FATAL);
564: yyval = MakeComment(); } break;
565: case 43:
566: # line 178 "parser.y"
567: { if( ((struct PathHeader *) yypvt[-0])->PNo < 2)
568: Error("Degenerate Wire",WARNING);
569: yyval = MakeWire(SCALE(yypvt[-2]),yypvt[-0]); } break;
570: case 44:
571: # line 182 "parser.y"
572: { Error("Illegal Wire Description",FATAL);
573: yyval = MakeComment(); } break;
574: case 45:
575: # line 188 "parser.y"
576: { yyval = MakeLayer(yypvt[-0]); } break;
577: case 46:
578: # line 190 "parser.y"
579: { Error("Illegal Layer Command",FATAL);
580: yyval = MakeComment(); } break;
581: case 47:
582: # line 196 "parser.y"
583: { yyval = MakeSymbol(yypvt[-0],1,1);} break;
584: case 48:
585: # line 198 "parser.y"
586: { yyval = MakeSymbol(yypvt[-4],yypvt[-2],yypvt[-0]);} break;
587: case 49:
588: # line 203 "parser.y"
589: { yyval = 0; } break;
590: case 50:
591: # line 208 "parser.y"
592: { DeleteDefintion(yypvt[-0]);
593: yyval = MakeComment(); } break;
594: case 52:
595: # line 219 "parser.y"
596: { yyval = MakeCall(yypvt[-1],yypvt[-0]); } break;
597: case 53:
598: # line 221 "parser.y"
599: { Error("Illegal Call Command",FATAL);
600: yyval = MakeComment(); } break;
601: case 54:
602: # line 227 "parser.y"
603: { yyval = MakeComment();
604: if(!standard)
605: Include(yypvt[-0]);
606: else
607: Error("User Extention Ignored\n",WARNING);
608: SendAll = 0;
609: Free(yypvt[-0]); } break;
610: case 55:
611: # line 235 "parser.y"
612: { yyval = MakeComment();
613: if(!standard)
614: Include(yypvt[-1]);
615: else
616: Error("User Extention Ignored\n",WARNING);
617: SendAll = 0;
618: Free(yypvt[-1]); } break;
619: case 56:
620: # line 243 "parser.y"
621: { if(!standard)
622: yyval = MakeArray(yypvt[-9],yypvt[-7],yypvt[-5],SCALE(yypvt[-3]),SCALE(yypvt[-1]));
623: else {
624: Error("User Extention Ignored\n",WARNING);
625: yyval = MakeComment();
626: }
627: SendAll = 0; } break;
628: case 57:
629: # line 251 "parser.y"
630: { yyval = MakeComment();
631: if(!standard)
632: fprintf(stderr,"%s\n",yypvt[-0]);
633: else
634: Error("User Extention Ignored\n",WARNING);
635: SendAll = 0;
636: Free(yypvt[-0]); } break;
637: case 58:
638: # line 259 "parser.y"
639: { if(!standard)
640: yyval = MakeText(yypvt[-2],yypvt[-0],'l');
641: else {
642: Error("User Extention Ignored\n",WARNING);
643: yyval = MakeComment();
644: }
645: SendAll = 0; } break;
646: case 59:
647: # line 267 "parser.y"
648: { if(!standard)
649: yyval = MakeText(yypvt[-2],yypvt[-0],'c');
650: else {
651: Error("User Extention Ignored\n",WARNING);
652: yyval = MakeComment();
653: }
654: SendAll = 0; } break;
655: case 60:
656: # line 275 "parser.y"
657: { if(!standard)
658: yyval = MakeName(yypvt[-0]);
659: else {
660: Error("User Extention Ignored\n",WARNING);
661: yyval = MakeComment();
662: }
663: SendAll = 0; } break;
664: case 61:
665: # line 283 "parser.y"
666: { if(!standard) {
667: yyval = MakePointName(yypvt[-2],yypvt[-0],"all");
668: Free(yypvt[-0]);
669: }
670: else {
671: Error("User Extention Ignored\n",WARNING);
672: yyval = MakeComment();
673: }
674: SendAll = 0; } break;
675: case 62:
676: # line 293 "parser.y"
677: { if(!standard) {
678: yyval = MakePointName(yypvt[-4],yypvt[-2],yypvt[-0]);
679: Free(yypvt[-2]);
680: }
681: else {
682: Error("User Extention Ignored\n",WARNING);
683: yyval = MakeComment();
684: }
685: SendAll = 0; } break;
686: case 63:
687: # line 303 "parser.y"
688: { yyval = MakeComment();
689: Error("Bad Syntax in Extension Command --- Command Ignored",
690: WARNING);
691: SendAll = 0; } break;
692: case 64:
693: # line 308 "parser.y"
694: { yyval = MakeComment();
695: Error("Unimplemented User Extension",
696: WARNING);
697: SendAll = 0; } break;
698: case 75:
699: # line 323 "parser.y"
700: {SendAll = 1; } break;
701: case 77:
702: # line 332 "parser.y"
703: { yyval = Translate(yypvt[-1],yypvt[-0]);
704: if(output == NOPLOT)
705: Free(((transform *) yypvt[-0])->TransString);
706: Free(yypvt[-1]); FreeTransform(yypvt[-0]); } break;
707: case 78:
708: # line 337 "parser.y"
709: { yyval = Mirror('x',yypvt[-0]);
710: if(output == NOPLOT)
711: Free(((transform *) yypvt[-0])->TransString);
712: FreeTransform(yypvt[-0]); } break;
713: case 79:
714: # line 342 "parser.y"
715: { yyval = Mirror('y',yypvt[-0]);
716: if(output == NOPLOT)
717: Free(((transform *) yypvt[-0])->TransString);
718: FreeTransform(yypvt[-0]); } break;
719: case 80:
720: # line 347 "parser.y"
721: { if(!CheckPoint(yypvt[-1]))
722: Error("Bad Rotation Vector",FATAL);
723: yyval = Rotate(yypvt[-1],yypvt[-0]);
724: if(output == NOPLOT)
725: Free(((transform *) yypvt[-0])->TransString);
726: Free(yypvt[-1]); FreeTransform(yypvt[-0]); } break;
727: case 81:
728: # line 354 "parser.y"
729: { yyval = MakeTransform(); } break;
730: case 82:
731: # line 359 "parser.y"
732: { yyval = AddPath(yypvt[-2],yypvt[-0]);
733: Free(yypvt[-0]); } break;
734: case 83:
735: # line 362 "parser.y"
736: { yyval = MakePath(yypvt[-0]); } break;
737: case 84:
738: # line 367 "parser.y"
739: { yyval = MakePoint(SCALE(yypvt[-2]),SCALE(yypvt[-0])); } break;
740: case 85:
741: # line 369 "parser.y"
742: { Error("Odd number of values encountered",
743: FATAL);
744: yyval = MakePoint(SCALE(yypvt[-1]),0.0);} break;
745: case 86:
746: # line 376 "parser.y"
747: { yyval = yypvt[-0]; } break;
748: case 87:
749: # line 378 "parser.y"
750: { yyval = - yypvt[-0]; } break;
751: case 88:
752: # line 383 "parser.y"
753: { yyval = yypvt[-0]; } break;
754: case 89:
755: # line 385 "parser.y"
756: { Error("Expected Positive Integer",FATAL);
757: yyval = yypvt[-0]; } break;
758: case 90:
759: # line 391 "parser.y"
760: { if (yypvt[-1] > (0x800000 / 10)) {
761: Error("Integers may not exceed 2**24",
762: FATAL);
763: yyval = 0;
764: }
765: else
766: yyval = (yypvt[-1]*10)+yypvt[-0]-'0'; } break;
767: case 91:
768: # line 399 "parser.y"
769: { yyval = yypvt[-0] - '0'; } break;
770: case 93:
771: # line 405 "parser.y"
772: { yyval = Concat(yypvt[-1],yypvt[-0],0);
773: Free(yypvt[-1]); Free(yypvt[-0]); } break;
774: case 94:
775: # line 408 "parser.y"
776: { yyval = Concat(yypvt[-2],yypvt[-1],yypvt[-0],0);
777: Free(yypvt[-2]); Free(yypvt[-1]); Free(yypvt[-0]); } break;
778: case 95:
779: # line 411 "parser.y"
780: { yyval = Concat(yypvt[-3],yypvt[-2],yypvt[-1],yypvt[-0],0);
781: Free(yypvt[-3]); Free(yypvt[-2]);
782: Free(yypvt[-1]); Free(yypvt[-0]); } break;
783: case 96:
784: # line 418 "parser.y"
785: { yyval = MakeString(yypvt[-0]); } break;
786: case 97:
787: # line 420 "parser.y"
788: { yyval = MakeString(yypvt[-0]); } break;
789: case 139:
790: # line 448 "parser.y"
791: { yyval = Concat(yypvt[-1],yypvt[-0],0);
792: Free(yypvt[-1]); Free(yypvt[-0]); } break;
793: case 142:
794: # line 456 "parser.y"
795: { yyval = MakeString('"'); } break;
796: case 143:
797: # line 461 "parser.y"
798: { yyval = Concat(yypvt[-1],yypvt[-0],0);
799: Free(yypvt[-1]); Free(yypvt[-0]); } break;
800: case 144:
801: # line 464 "parser.y"
802: { yyval = null; } break;
803: case 145:
804: # line 469 "parser.y"
805: { yyval = MakeString(yypvt[-0]); } break;
806: case 147:
807: # line 475 "parser.y"
808: { yyval = Concat(yypvt[-1],yypvt[-0],0);
809: Free(yypvt[-1]); Free(yypvt[-0]); } break;
810: case 148:
811: # line 478 "parser.y"
812: { yyval = null; } break;
813: case 149:
814: # line 483 "parser.y"
815: { yyval = MakeString(yypvt[-0]); } break;
816: case 151:
817: # line 486 "parser.y"
818: { yyval = MakeString('"'); } break;
819: case 152:
820: # line 491 "parser.y"
821: { yyval = MakeString(yypvt[-0]); } break;
822: case 153:
823: # line 493 "parser.y"
824: { yyval = MakeString(yypvt[-0]); } break;
825: case 154:
826: # line 495 "parser.y"
827: { yyval = MakeString(yypvt[-0]); } break;
828: case 155:
829: # line 497 "parser.y"
830: { yyval = MakeString('('); } break;
831: case 156:
832: # line 499 "parser.y"
833: { yyval = MakeString(')'); } break;
834: case 157:
835: # line 501 "parser.y"
836: { yyval = MakeString('-'); } break;
837: }
838: goto yystack; /* stack new state and value */
839:
840: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.