2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these libraries and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 // $TOG: defParser.C /main/5 1997/12/23 11:16:25 bill $
25 __attribute__((unused))
26 static const char defParsersccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/90";
28 #define defParserBYACC 1
35 #include "FeatureDefDictionary.h"
40 #define alloca(x) (malloc(x))
42 def_list_t* g_def_list = 0;
44 extern void defParsererror(char*);
45 extern int defParserlex();
51 unsigned char charData;
52 unsigned char* charPtrData;
55 FeatureValue* valueData;
57 defv_t* valueListPtrData;
58 TypeValues* typeValuesPtrData;
59 type_values_list_t* typeValuesListPtrData;
61 def_list_t* defListPtrData;
62 FeatureDef* defPtrData;
68 #define SEMI_COLON 260
71 #define OPER_parenopen 263
72 #define OPER_parenclose 264
75 #define NORMAL_STRING 267
76 #define QUOTED_STRING 268
79 #define ValueListOpt 271
80 #define defParserERRCODE 256
81 short defParserlhs[] = { -1,
82 0, 11, 11, 6, 6, 6, 6, 8, 10, 7,
83 9, 1, 5, 5, 4, 4, 3, 3, 2, 2,
86 short defParserlen[] = { 2,
87 1, 2, 1, 1, 1, 1, 1, 4, 4, 2,
88 2, 1, 3, 1, 4, 1, 3, 1, 1, 1,
91 short defParserdefred[] = { 0,
92 0, 12, 0, 0, 3, 6, 4, 7, 5, 0,
93 11, 0, 10, 0, 2, 0, 14, 0, 0, 0,
94 0, 9, 8, 19, 21, 20, 18, 0, 13, 0,
97 short defParserdgoto[] = { 3,
98 4, 27, 28, 17, 18, 5, 6, 7, 8, 9,
101 short defParsersindex[] = { -256,
102 -258, 0, 0, -240, 0, 0, 0, 0, 0, -256,
103 0, -262, 0, -256, 0, -249, 0, -254, -257, -250,
104 -262, 0, 0, 0, 0, 0, 0, -251, 0, -250,
107 short defParserrindex[] = { 0,
108 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
109 0, 0, 0, 0, 0, -236, 0, 0, 0, 0,
110 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
113 short defParsergindex[] = { 0,
114 0, -13, 0, 2, 0, -7, 0, 0, 0, 0,
117 #define defParserTABLESIZE 25
118 short defParsertable[] = { 1,
119 1, 11, 15, 21, 23, 22, 30, 16, 1, 2,
120 2, 15, 31, 20, 24, 25, 32, 26, 12, 13,
123 short defParsercheck[] = { 257,
124 257, 260, 10, 258, 262, 260, 258, 270, 0, 267,
125 267, 19, 264, 263, 265, 266, 30, 268, 259, 260,
126 261, 258, 21, 260, 14,
128 #define defParserFINAL 3
129 #ifndef defParserDEBUG
130 #define defParserDEBUG 0
132 #define defParserMAXTOKEN 271
134 char *defParsername[] = {
135 "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,
136 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
137 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
138 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
139 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
140 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
141 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"STAR","COMMA","COLON",
142 "SEMI_COLON","FSOPEN","FSCLOSE","OPER_parenopen","OPER_parenclose","INTEGER",
143 "REAL","NORMAL_STRING","QUOTED_STRING","REF_NAME","TYPE","ValueListOpt",
145 char *defParserrule[] = {
146 "$accept : featureDef",
147 "featureDef : DefList",
148 "DefList : DefList Def",
150 "Def : CompositeDef",
151 "Def : PrimitiveDef",
152 "Def : DefReference",
154 "CompositeDef : Name FSOPEN DefList FSCLOSE",
155 "PrimitiveDef : Name COLON TypeValuesList SEMI_COLON",
156 "DefReference : Name SEMI_COLON",
157 "WildCardDef : STAR SEMI_COLON",
158 "Name : NORMAL_STRING",
159 "TypeValuesList : TypeValuesList COMMA TypeValues",
160 "TypeValuesList : TypeValues",
161 "TypeValues : TYPE OPER_parenopen ValueList OPER_parenclose",
163 "ValueList : ValueList COMMA Value",
166 "Value : QUOTED_STRING",
170 #define defParserclearin (defParserchar=(-1))
171 #define defParsererrok (defParsererrflag=0)
172 #ifdef defParserSTACKSIZE
173 #ifndef defParserMAXDEPTH
174 #define defParserMAXDEPTH defParserSTACKSIZE
177 #ifdef defParserMAXDEPTH
178 #define defParserSTACKSIZE defParserMAXDEPTH
180 #define defParserSTACKSIZE 500
181 #define defParserMAXDEPTH 500
186 int defParsererrflag;
189 defParserSTYPE *defParservsp;
190 defParserSTYPE defParserval;
191 defParserSTYPE defParserlval;
192 short defParserss[defParserSTACKSIZE];
193 defParserSTYPE defParservs[defParserSTACKSIZE];
194 #define defParserstacksize defParserSTACKSIZE
197 void defParsererror(char *errorstr)
202 #define defParserABORT goto defParserabort
203 #define defParserACCEPT goto defParseraccept
204 #define defParserERROR goto defParsererrlab
207 extern char *getenv(const char *);
213 register int defParserm, defParsern, defParserstate;
215 register char *defParsers;
217 if (defParsers = getenv("defParserDEBUG"))
219 defParsern = *defParsers;
220 if (defParsern >= '0' && defParsern <= '9')
221 defParserdebug = defParsern - '0';
226 defParsererrflag = 0;
227 defParserchar = (-1);
229 defParserssp = defParserss;
230 defParservsp = defParservs;
231 *defParserssp = defParserstate = 0;
234 if ((defParsern = defParserdefred[defParserstate])) goto defParserreduce;
235 if (defParserchar < 0)
237 if ((defParserchar = defParserlex()) < 0) defParserchar = 0;
242 if (defParserchar <= defParserMAXTOKEN) defParsers = defParsername[defParserchar];
243 if (!defParsers) defParsers = "illegal-symbol";
244 printf("defParserdebug: state %d, reading %d (%s)\n", defParserstate,
245 defParserchar, defParsers);
249 if ((defParsern = defParsersindex[defParserstate]) && (defParsern += defParserchar) >= 0 &&
250 defParsern <= defParserTABLESIZE && defParsercheck[defParsern] == defParserchar)
254 printf("defParserdebug: state %d, shifting to state %d\n",
255 defParserstate, defParsertable[defParsern]);
257 if (defParserssp >= defParserss + defParserstacksize - 1)
259 goto defParseroverflow;
261 *++defParserssp = defParserstate = defParsertable[defParsern];
262 *++defParservsp = defParserlval;
263 defParserchar = (-1);
264 if (defParsererrflag > 0) --defParsererrflag;
267 if ((defParsern = defParserrindex[defParserstate]) && (defParsern += defParserchar) >= 0 &&
268 defParsern <= defParserTABLESIZE && defParsercheck[defParsern] == defParserchar)
270 defParsern = defParsertable[defParsern];
271 goto defParserreduce;
273 if (defParsererrflag) goto defParserinrecovery;
277 goto defParsernewerror;
281 defParsererror((char*)"syntax error");
285 goto defParsererrlab;
291 if (defParsererrflag < 3)
293 defParsererrflag = 3;
296 if ((defParsern = defParsersindex[*defParserssp]) && (defParsern += defParserERRCODE) >= 0 &&
297 defParsern <= defParserTABLESIZE && defParsercheck[defParsern] == defParserERRCODE)
301 printf("defParserdebug: state %d, error recovery shifting\
302 to state %d\n", *defParserssp, defParsertable[defParsern]);
304 if (defParserssp >= defParserss + defParserstacksize - 1)
306 goto defParseroverflow;
308 *++defParserssp = defParserstate = defParsertable[defParsern];
309 *++defParservsp = defParserlval;
316 printf("defParserdebug: error recovery discarding state %d\n",
319 if (defParserssp <= defParserss) goto defParserabort;
327 if (defParserchar == 0) goto defParserabort;
332 if (defParserchar <= defParserMAXTOKEN) defParsers = defParsername[defParserchar];
333 if (!defParsers) defParsers = "illegal-symbol";
334 printf("defParserdebug: state %d, error recovery discards token %d (%s)\n",
335 defParserstate, defParserchar, defParsers);
338 defParserchar = (-1);
344 printf("defParserdebug: state %d, reducing by rule %d (%s)\n",
345 defParserstate, defParsern, defParserrule[defParsern]);
347 defParserm = defParserlen[defParsern];
348 defParserval = defParservsp[1-defParserm];
353 g_def_list = defParservsp[0].defListPtrData;
358 defParserval.defListPtrData=defParservsp[-1].defListPtrData;
360 if ( defParservsp[0].defPtrData -> type() == FeatureDef::WILDCARD )
361 defParserval.defListPtrData -> prepend(defParservsp[0].defPtrData);
363 defParserval.defListPtrData -> append(defParservsp[0].defPtrData);
368 defParserval.defListPtrData=new def_list_t();
369 defParserval.defListPtrData -> append(defParservsp[0].defPtrData);
374 defParserval.defPtrData=defParservsp[0].defPtrData;
379 defParserval.defPtrData=defParservsp[0].defPtrData;
384 defParserval.defPtrData=defParservsp[0].defPtrData;
389 defParserval.defPtrData=defParservsp[0].defPtrData;
394 defParserval.defPtrData= new FeatureDefComposite((char*)defParservsp[-3].charPtrData, defParservsp[-1].defListPtrData);
395 delete defParservsp[-3].charPtrData;
400 defParserval.defPtrData= new FeatureDefPrimitive((char*)defParservsp[-3].charPtrData, defParservsp[-1].typeValuesListPtrData);
401 delete defParservsp[-3].charPtrData;
406 defParserval.defPtrData= new FeatureDefReference((char*)defParservsp[-1].charPtrData);
407 delete defParservsp[-1].charPtrData;
412 defParserval.defPtrData= new FeatureDefWildCard("*");
417 defParserval.charPtrData=defParservsp[0].charPtrData;
422 defParserval.typeValuesListPtrData=defParservsp[-2].typeValuesListPtrData;
423 defParserval.typeValuesListPtrData -> append(defParservsp[0].typeValuesPtrData);
428 defParserval.typeValuesListPtrData=new type_values_list_t();
429 defParserval.typeValuesListPtrData -> append(defParservsp[0].typeValuesPtrData);
434 defParserval.typeValuesPtrData=new TypeValues((char*)defParservsp[-3].charPtrData, defParservsp[-1].valueListPtrData);
435 delete defParservsp[-3].charPtrData;
440 defParserval.typeValuesPtrData=new TypeValues((char*)defParservsp[0].charPtrData, 0);
441 delete defParservsp[0].charPtrData;
446 defParservsp[-2].valueListPtrData -> append(defParservsp[0].valueData);
447 defParserval.valueListPtrData=defParservsp[-2].valueListPtrData;
452 defParserval.valueListPtrData = new defv_t();
453 defParserval.valueListPtrData -> append(defParservsp[0].valueData);
459 defParserval.valueData=new FeatureValueInt(defParservsp[0].intData);
464 defParserval.valueData=new FeatureValueString((char*)defParservsp[0].charPtrData);
465 delete defParservsp[0].charPtrData;
470 defParserval.valueData=new FeatureValueReal(defParservsp[0].realData);
474 defParserssp -= defParserm;
475 defParserstate = *defParserssp;
476 defParservsp -= defParserm;
477 defParserm = defParserlhs[defParsern];
478 if (defParserstate == 0 && defParserm == 0)
482 printf("defParserdebug: after reduction, shifting from state 0 to\
483 state %d\n", defParserFINAL);
485 defParserstate = defParserFINAL;
486 *++defParserssp = defParserFINAL;
487 *++defParservsp = defParserval;
488 if (defParserchar < 0)
490 if ((defParserchar = defParserlex()) < 0) defParserchar = 0;
495 if (defParserchar <= defParserMAXTOKEN) defParsers = defParsername[defParserchar];
496 if (!defParsers) defParsers = "illegal-symbol";
497 printf("defParserdebug: state %d, reading %d (%s)\n",
498 defParserFINAL, defParserchar, defParsers);
502 if (defParserchar == 0) goto defParseraccept;
505 if ((defParsern = defParsergindex[defParserm]) && (defParsern += defParserstate) >= 0 &&
506 defParsern <= defParserTABLESIZE && defParsercheck[defParsern] == defParserstate)
507 defParserstate = defParsertable[defParsern];
509 defParserstate = defParserdgoto[defParserm];
512 printf("defParserdebug: after reduction, shifting from state %d \
513 to state %d\n", *defParserssp, defParserstate);
515 if (defParserssp >= defParserss + defParserstacksize - 1)
517 goto defParseroverflow;
519 *++defParserssp = defParserstate;
520 *++defParservsp = defParserval;
523 defParsererror((char*)"yacc stack overflow");