fixed: auto_ptr -> unique_ptr
[opensg.git] / Source / System / FileIO / ScanParseSkel / OSGScanParseSkelParser.yy
blobd965fabe9bb531ca8a1fe30770a4c0e4c2f44efe
1 /*---------------------------------------------------------------------------*\
2  *                                OpenSG                                     *
3  *                                                                           *
4  *                                                                           *
5  *             Copyright (C) 2000-2002 by the OpenSG Forum                   *
6  *                                                                           *
7  *                            www.opensg.org                                 *
8  *                                                                           *
9  *   contact: dirk@opensg.org, gerrit.voss@vossg.org, jbehr@zgdv.de          *
10  *                                                                           *
11 \*---------------------------------------------------------------------------*/
12 /*---------------------------------------------------------------------------*\
13  *                                License                                    *
14  *                                                                           *
15  * This library is free software; you can redistribute it and/or modify it   *
16  * under the terms of the GNU Library General Public License as published    *
17  * by the Free Software Foundation, version 2.                               *
18  *                                                                           *
19  * This library is distributed in the hope that it will be useful, but       *
20  * WITHOUT ANY WARRANTY; without even the implied warranty of                *
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *
22  * Library General Public License for more details.                          *
23  *                                                                           *
24  * You should have received a copy of the GNU Library General Public         *
25  * License along with this library; if not, write to the Free Software       *
26  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                 *
27  *                                                                           *
28 \*---------------------------------------------------------------------------*/
29 /*---------------------------------------------------------------------------*\
30  *                                Changes                                    *
31  *                                                                           *
32  *                                                                           *
33  *                                                                           *
34  *                                                                           *
35  *                                                                           *
36  *                                                                           *
37 \*---------------------------------------------------------------------------*/
39 /* Author: Patrick Daehne */
41 %union {
42     long intVal;
43     double doubleVal;
44     float floatVal;
45     const char *stringVal;
46     bool boolVal;
51 #if __GNUC__ >= 4 || __GNUC_MINOR__ >=3
52 #pragma GCC diagnostic warning "-Wold-style-cast"
53 #endif
55 //#define YYPARSE_PARAM pSkel
56 //#define YYLEX_PARAM   pSkel
58 #define OSGScanParseSkel_error SKEL->handleError
60 #include "OSGConfig.h"
61 #include "OSGBaseFunctions.h"
62 #include "OSGMatrix.h"
63 #include "OSGScanParseLexer.h"
64 #include "OSGScanParseSkel.h"
66 #include <iostream>
68 #if defined(OSG_LINUX_ICC) || defined(OSG_WIN32_ICL)
69 #pragma warning( disable : 193 810 177 )
70 #endif
72 OSG_USING_NAMESPACE
74 #ifdef OSG_USE_OSG2_NAMESPACE
75 #define OSGScanParseSkel_lex OSG2ScanParseSkel_lex
76 #endif
78 int OSGScanParseSkel_lex(YYSTYPE *lvalp, void *);
80 #define SKEL (static_cast<ScanParseSkel *>(pSkel))
82 #if(!defined(__GNUC__) && defined(__ICL) && __INTEL_COMPILER_VERSION >= 900)
83 # define alloca(size)   __builtin_alloca (size)
84 #endif
88 %lex-param   { void *pSkel }
89 %parse-param { void *pSkel }
91 %token <stringVal> TOK_HEADER
93 %token TOK_PROFILE
94 %token TOK_COMPONENT
95 %token TOK_META
97 %token TOK_PROTO
98 %token TOK_EXTERNPROTO
99 %token TOK_IS
101 %token TOK_DEF
102 %token TOK_USE
104 %token TOK_ROUTE
105 %token TOK_TO
107 %token TOK_IMPORT
108 %token TOK_EXPORT
109 %token TOK_AS
111 %token TOK_eventIn
112 %token TOK_eventOut
113 %token TOK_exposedField
114 %token TOK_field
116 %token <intVal> TOK_MFBool
117 %token <intVal> TOK_MFColor
118 %token <intVal> TOK_MFColorRGBA
119 %token <intVal> TOK_MFDouble
120 %token <intVal> TOK_MFFloat
121 %token <intVal> TOK_MFImage
122 %token <intVal> TOK_MFInt32
123 %token <intVal> TOK_MFMatrix3d
124 %token <intVal> TOK_MFMatrix3f
125 %token <intVal> TOK_MFMatrix4d
126 %token <intVal> TOK_MFMatrix4f
127 %token <intVal> TOK_MFNode
128 %token <intVal> TOK_MFRotation
129 %token <intVal> TOK_MFString
130 %token <intVal> TOK_MFTime
131 %token <intVal> TOK_MFVec2d
132 %token <intVal> TOK_MFVec2f
133 %token <intVal> TOK_MFVec3d
134 %token <intVal> TOK_MFVec3f
135 %token <intVal> TOK_MFVec4d
136 %token <intVal> TOK_MFVec4f
137 %token <intVal> TOK_SFBool
138 %token <intVal> TOK_SFColor
139 %token <intVal> TOK_SFColorRGBA
140 %token <intVal> TOK_SFDouble
141 %token <intVal> TOK_SFFloat
142 %token <intVal> TOK_SFImage
143 %token <intVal> TOK_SFInt32
144 %token <intVal> TOK_SFMatrix3d
145 %token <intVal> TOK_SFMatrix3f
146 %token <intVal> TOK_SFMatrix4d
147 %token <intVal> TOK_SFMatrix4f
148 %token <intVal> TOK_SFNode
149 %token <intVal> TOK_SFRotation
150 %token <intVal> TOK_SFString
151 %token <intVal> TOK_SFTime
152 %token <intVal> TOK_SFVec2d
153 %token <intVal> TOK_SFVec2f
154 %token <intVal> TOK_SFVec3d
155 %token <intVal> TOK_SFVec3f
156 %token <intVal> TOK_SFVec4d
157 %token <intVal> TOK_SFVec4f
158 /* The following types are not VRML conformant */
159 %token <intVal> TOK_MFColor4i
160 %token <intVal> TOK_MFPnt2f
161 %token <intVal> TOK_MFPnt3f
162 %token <intVal> TOK_MFPnt4f
163 %token <intVal> TOK_MFPlane
164 %token <intVal> TOK_SFColor4i
165 %token <intVal> TOK_SFPnt2f
166 %token <intVal> TOK_SFPnt3f
167 %token <intVal> TOK_SFPnt4f
168 %token <intVal> TOK_SFPlane
169 %token <intVal> TOK_SFVolume
170 %token <intVal> TOK_SFVec2i
171 %token <intVal> TOK_SFVec3i
172 %token <intVal> TOK_MFVec2i
174 %token <intVal> TOK_hex
175 %token <intVal> TOK_int32
176 %token <doubleVal> TOK_double
177 %token <stringVal> TOK_string
178 %token <boolVal> TOK_bool
179 %token TOK_NULL
180 %token <stringVal> TOK_Id
182 %token TOK_ImageFinished
184 %token TOK_Error
186 %token TOK_ClusterLocal
187 %token TOK_ThreadLocal
189 %type <stringVal> profileNameId
190 %type <stringVal> componentNameId
191 /*%type <intVal> componentSupportLevel*/
192 %type <stringVal> metakey
193 %type <stringVal> metavalue
194 %type <stringVal> asStatement
195 %type <stringVal> nodeNameId
196 %type <stringVal> nodeTypeId
197 %type <stringVal> fieldId
198 %type <stringVal> eventInId
199 %type <stringVal> eventOutId
200 %type <intVal> fieldType
201 %type <intVal> fieldValue
202 %type <intVal> fieldEnd
203 %type <intVal> fieldDeclarationEnd
205 %type <intVal> int32
206 %type <doubleVal> double
207 %type <floatVal> float
209 %pure-parser
213 x3dScene:
214     headerStatement
215     profileStatement
216     componentStatements
217     metaStatements
218     statements;
220 headerStatement:
221     TOK_HEADER { if(SKEL->verifyHeader($1) == false) { YYABORT; } }
222     | /* empty */{ if(SKEL->checkHeader() == true) { YYABORT; } }
224 profileStatement:
225     TOK_PROFILE profileNameId { SKEL->profileElement($2); }
226     | /* empty */;
228 profileNameId:
229     TOK_Id;
231 componentStatements:
232     componentStatements componentStatement
233     | /* empty */;
235 componentStatement:
236     /* Not VRML conformant */
237     TOK_COMPONENT
238     componentNameId
239     { SKEL->componentElement($2); };
241 componentNameId:
242     TOK_Id
243     | TOK_string;
245 componentSupportLevel:
246     int32;
249 metaStatements:
250     metaStatements metaStatement
251     | /* empty */;
253 metaStatement:
254     TOK_META
255     metakey
256     { SKEL->_tmpString1 = $2; }
257     metavalue
258     { SKEL->metaElement(SKEL->_tmpString1.c_str(), $4); };
260 metakey:
261     TOK_string;
263 metavalue:
264     TOK_string;
266 statements:
267     statements statement
268     | /* empty */;
270 statement:
271     nodeStatement
272     | protoStatement
273     | routeStatement
274     | importStatement
275     | exportStatement;
278 nodeStatement:
279       nodeTypeId { SKEL->beginNode($1, 0); }
280       node
281     | TOK_DEF
282       nodeNameId { SKEL->_tmpString1 = $2; }
283       nodeTypeId { SKEL->beginNode($4, SKEL->_tmpString1.c_str()); }
284       node
285     | TOK_USE
286       nodeNameId { SKEL->use($2); };
289 nodeStatement:
290       nodeTypeId          { SKEL->_tmpString1 = $1; 
291                             SKEL->_tmpBitVector1 = 
292                                 TypeTraits<BitVector>::BitsClear; }
293       nodeOptionStatement { SKEL->beginNode(SKEL->_tmpString1.c_str(), 
294                                             0,
295                                             SKEL->_tmpBitVector1     ); }
296       node
297     | TOK_DEF
298       nodeNameId          { SKEL->_tmpString1 = $2; 
299                             SKEL->_tmpBitVector1 = 
300                                 TypeTraits<BitVector>::BitsClear; }
301       nodeTypeId          { SKEL->_tmpString2 = $4; }
302       nodeOptionStatement { SKEL->beginNode(SKEL->_tmpString2.c_str(), 
303                                             SKEL->_tmpString1.c_str(),
304                                             SKEL->_tmpBitVector1     ); }
305       node
306     | TOK_USE
307       nodeNameId { SKEL->use($2); };
309 nodeOptionStatement:
310       '[' nodeOptions ']' 
311     | /* empty */;
313 nodeOptions:
314       nodeOptions nodeOption
315     | /* empty */;
317 nodeOption:
318       TOK_ClusterLocal { SKEL->_tmpBitVector1 |= FCLocal::Cluster; }
319     | TOK_ThreadLocal  { SKEL->_tmpBitVector1 |= FCLocal::MT;      };
321 protoStatement:
322       proto
323     | externproto;
325 protoStatements:
326     protoStatements protoStatement
327     | /* empty */;
329 proto:
330     TOK_PROTO nodeTypeId { SKEL->beginProto($2); }
331     '[' interfaceDeclarations ']' { SKEL->endProtoInterface(); }
332     '{' statements '}' { SKEL->endProto(); }; /* Not VRML conformant */
334 interfaceDeclarations:
335     interfaceDeclarations interfaceDeclaration
336     | /* empty */;
338 interfaceDeclaration:
339     TOK_eventIn
340     fieldType { SKEL->_tmpString1 = SKEL->getLexer()->YYText(); }
341     eventInId { SKEL->beginEventInDecl(SKEL->_tmpString1.c_str(), $2, $4); SKEL->endEventDecl(); }
342     | TOK_eventOut
343       fieldType { SKEL->_tmpString1 = SKEL->getLexer()->YYText(); }
344       eventOutId { SKEL->beginEventOutDecl(SKEL->_tmpString1.c_str(), $2, $4); SKEL->endEventDecl(); }
345     | TOK_field
346       fieldType { SKEL->_tmpString1 = SKEL->getLexer()->YYText(); }
347       fieldId { SKEL->beginFieldDecl(SKEL->_tmpString1.c_str(), $2, $4); SKEL->getLexer()->expectType($2); }
348       fieldValue { SKEL->endFieldDecl(); }
349     | TOK_exposedField
350       fieldType { SKEL->_tmpString1 = SKEL->getLexer()->YYText(); }
351       fieldId { SKEL->beginExposedFieldDecl(SKEL->_tmpString1.c_str(), $2, $4); SKEL->getLexer()->expectType($2); }
352       fieldValue { SKEL->endExposedFieldDecl(); };
354 externproto:
355     TOK_EXTERNPROTO nodeTypeId { SKEL->beginExternProto($2); }
356     '[' externInterfaceDeclarations ']' { SKEL->endExternProtoInterface(); }
357     URLList { SKEL->endExternProto(); };
359 externInterfaceDeclarations:
360     externInterfaceDeclarations externInterfaceDeclaration
361     | /* empty */;
363 externInterfaceDeclaration:
364     TOK_eventIn
365     fieldType { SKEL->_tmpString1 = SKEL->getLexer()->YYText(); }
366     eventInId { SKEL->addExternEventInDecl(SKEL->_tmpString1.c_str(), $2, $4); }
367     | TOK_eventOut
368       fieldType  { SKEL->_tmpString1 = SKEL->getLexer()->YYText(); }
369       eventOutId { SKEL->addExternEventOutDecl(SKEL->_tmpString1.c_str(), $2, $4); }
370     | TOK_field
371       fieldType  { SKEL->_tmpString1 = SKEL->getLexer()->YYText(); }
372       fieldId { SKEL->addExternFieldDecl(SKEL->_tmpString1.c_str(), $2, $4); }
373     | TOK_exposedField
374       fieldType  { SKEL->_tmpString1 = SKEL->getLexer()->YYText(); }
375       fieldId { SKEL->addExternExposedFieldDecl(SKEL->_tmpString1.c_str(), $2, $4); };
377 routeStatement:
378     TOK_ROUTE
379     nodeNameId { SKEL->_tmpString1 = $2; }
380     '.'
381     eventOutId { SKEL->_tmpString2 = $5; }
382     TOK_TO
383     nodeNameId { SKEL->_tmpString3 = $8; }
384     '.'
385     eventInId
386     { SKEL->addRoute(SKEL->_tmpString1.c_str(), SKEL->_tmpString2.c_str(), SKEL->_tmpString3.c_str(), $11); };
388 importStatement:
389     TOK_IMPORT
390     nodeNameId { SKEL->_tmpString1 = $2; }
391     '.'
392     nodeNameId { SKEL->_tmpString2 = $5; }
393     asStatement
394     {
395         if ($7 != 0)
396             SKEL->importElement(SKEL->_tmpString1.c_str(), SKEL->_tmpString2.c_str(), $7);
397         else
398             SKEL->importElement(SKEL->_tmpString1.c_str(), SKEL->_tmpString2.c_str(), 0);
399     };
401 exportStatement:
402     TOK_EXPORT
403     nodeNameId { SKEL->_tmpString1 = $2; }
404     asStatement
405     {
406         if ($4 != 0)
407             SKEL->exportElement(SKEL->_tmpString1.c_str(), $4);
408         else
409             SKEL->exportElement(SKEL->_tmpString1.c_str(), 0);
410     };
412 asStatement:
413     TOK_AS
414     nodeNameId { $$ = $2; }
415     | /* empty */ { $$ = 0; };
417 URLList:
418     mfstringValue;
420 node:
421     '{' scriptBody '}' { SKEL->endNode(); }; /* Not VRML conformant */
423 scriptBody:
424     scriptBody scriptBodyElement
425     | /* empty */;
427 scriptBodyElement:
428     nodeBodyElement
429     | eventInDeclaration
430     | eventOutDeclaration
431     | fieldDeclaration
432     | exposedFieldDeclaration
433     | error;
435 eventInDeclaration:
436     TOK_eventIn
437     fieldType { SKEL->_tmpString1 = SKEL->getLexer()->YYText(); }
438     eventInId { SKEL->beginEventInDecl(SKEL->_tmpString1.c_str(), $2, $4); }
439     eventDeclarationEnd { SKEL->endEventDecl(); };
441 eventOutDeclaration:
442     TOK_eventOut
443     fieldType { SKEL->_tmpString1 = SKEL->getLexer()->YYText(); }
444     eventOutId { SKEL->beginEventOutDecl(SKEL->_tmpString1.c_str(), $2, $4); }
445     eventDeclarationEnd { SKEL->endEventDecl(); };
447 eventDeclarationEnd:
448     /* empty */
449     | TOK_IS fieldId { SKEL->is($2); };
451 fieldDeclaration:
452     TOK_field
453     fieldType { SKEL->_tmpString1 = SKEL->getLexer()->YYText(); }
454     fieldId { SKEL->beginFieldDecl(SKEL->_tmpString1.c_str(), $2, $4); SKEL->getLexer()->expectType($2); }
455     fieldDeclarationEnd { SKEL->endFieldDecl(); };
456    | TOK_field 
457      TOK_Id  { SKEL->_tmpString1 = SKEL->getLexer()->YYText(); }
458      fieldId { 
459                SKEL->beginFieldDecl(SKEL->_tmpString1.c_str(), 0, $4); 
461                Int32 iFieldTypeId = SKEL->getFieldType($4);
463                if(SKEL->getMapFieldTypes() == true)
464                  iFieldTypeId = SKEL->mapExtIntFieldType($4, iFieldTypeId);
466                SKEL->getLexer()->expectType(iFieldTypeId);
467              }
468      fieldDeclarationEnd { SKEL->endFieldDecl(); };
470 exposedFieldDeclaration:
471     TOK_exposedField
472     fieldType { SKEL->_tmpString1 = SKEL->getLexer()->YYText(); }
473     fieldId { SKEL->beginExposedFieldDecl(SKEL->_tmpString1.c_str(), $2, $4); SKEL->getLexer()->expectType($2); }
474     fieldDeclarationEnd { SKEL->endExposedFieldDecl(); };
476 fieldDeclarationEnd:
477     fieldValue
478     | fieldType TOK_IS fieldId { SKEL->is($3); };
480 nodeBodyElement:
481     fieldId
482     {
483         Int32 iFieldTypeId = SKEL->getFieldType($1);
484         if (SKEL->getMapFieldTypes() == true)
485             iFieldTypeId = SKEL->mapExtIntFieldType($1, iFieldTypeId);
486         SKEL->getLexer()->expectType(iFieldTypeId);
487         SKEL->beginField($1, iFieldTypeId);
488     }
489     fieldEnd { SKEL->endField(); }
490     | routeStatement
491     | protoStatement
492     | importStatement
493     | exportStatement;
495 fieldEnd:
496     fieldValue
497     | fieldType TOK_IS fieldId { SKEL->is($3); };
499 nodeNameId:
500     TOK_Id;
502 nodeTypeId:
503     TOK_Id;
505 fieldId:
506     TOK_Id;
508 eventInId:
509     TOK_Id;
511 eventOutId:
512     TOK_Id;
514 fieldType:
515     TOK_MFBool
516     | TOK_MFColor
517     | TOK_MFColorRGBA
518     | TOK_MFDouble
519     | TOK_MFFloat
520     | TOK_MFImage
521     | TOK_MFInt32
522     | TOK_MFMatrix3d
523     | TOK_MFMatrix3f
524     | TOK_MFMatrix4d
525     | TOK_MFMatrix4f
526     | TOK_MFNode
527     | TOK_MFRotation
528     | TOK_MFString
529     | TOK_MFTime
530     | TOK_MFVec2d
531     | TOK_MFVec2f
532     | TOK_MFVec3d
533     | TOK_MFVec3f
534     | TOK_MFVec4d
535     | TOK_MFVec4f
536     | TOK_SFBool
537     | TOK_SFColor
538     | TOK_SFColorRGBA
539     | TOK_SFDouble
540     | TOK_SFFloat
541     | TOK_SFImage
542     | TOK_SFInt32
543     | TOK_SFMatrix3d
544     | TOK_SFMatrix3f
545     | TOK_SFMatrix4d
546     | TOK_SFMatrix4f
547     | TOK_SFNode
548     | TOK_SFRotation
549     | TOK_SFString
550     | TOK_SFTime
551     | TOK_SFVec2d
552     | TOK_SFVec2f
553     | TOK_SFVec3d
554     | TOK_SFVec3f
555     | TOK_SFVec4d
556     | TOK_SFVec4f
557     /* The following types are not VRML conformant */
558     | TOK_MFColor4i
559     | TOK_MFPnt2f
560     | TOK_MFPnt3f
561     | TOK_MFPnt4f
562     | TOK_MFPlane
563     | TOK_SFColor4i
564     | TOK_SFPnt2f
565     | TOK_SFPnt3f
566     | TOK_SFPnt4f
567     | TOK_SFPlane
568     | TOK_SFVolume;
570 fieldValue:
571     TOK_MFBool mfboolValue
572     | TOK_MFColor mfcolorValue
573     | TOK_MFColorRGBA mfcolorRGBAValue
574     | TOK_MFDouble mfdoubleValue
575     | TOK_MFFloat mffloatValue
576     | TOK_MFImage mfimageValue
577     | TOK_MFInt32 mfint32Value
578     | TOK_MFMatrix3d mfmatrix3dValue
579     | TOK_MFMatrix3f mfmatrix3fValue
580     | TOK_MFMatrix4d mfmatrix4dValue
581     | TOK_MFMatrix4f mfmatrix4fValue
582     | TOK_MFNode mfnodeValue
583     | TOK_MFRotation mfrotationValue
584     | TOK_MFString mfstringValue
585     | TOK_MFTime mftimeValue
586     | TOK_MFVec2d mfvec2dValue
587     | TOK_MFVec2f mfvec2fValue
588     | TOK_MFVec3d mfvec3dValue
589     | TOK_MFVec3f mfvec3fValue
590     | TOK_MFVec4d mfvec4dValue
591     | TOK_MFVec4f mfvec4fValue
592     | TOK_SFBool sfboolValue
593     | TOK_SFColor sfcolorValue
594     | TOK_SFColorRGBA sfcolorRGBAValue
595     | TOK_SFDouble sfdoubleValue
596     | TOK_SFFloat sffloatValue
597     | TOK_SFImage sfimageValue
598     | TOK_SFInt32 sfint32Value
599     | TOK_SFMatrix3d sfmatrix3dValue
600     | TOK_SFMatrix3f sfmatrix3fValue
601     | TOK_SFMatrix4d sfmatrix4dValue
602     | TOK_SFMatrix4f sfmatrix4fValue
603     | TOK_SFNode sfnodeValue
604     | TOK_SFRotation sfrotationValue
605     | TOK_SFString sfstringValue
606     | TOK_SFTime sftimeValue
607     | TOK_SFVec2d sfvec2dValue
608     | TOK_SFVec2f sfvec2fValue
609     | TOK_SFVec3d sfvec3dValue
610     | TOK_SFVec3f sfvec3fValue
611     | TOK_SFVec4d sfvec4dValue
612     | TOK_SFVec4f sfvec4fValue
613     /* The following types are not VRML conformant */
614     | TOK_MFColor4i mfcolor4iValue
615     | TOK_MFPnt2f mfpnt2fValue
616     | TOK_MFPnt3f mfpnt3fValue
617     | TOK_MFPnt4f mfpnt4fValue
618     | TOK_MFPlane mfplaneValue
619     | TOK_SFColor4i sfcolor4iValue
620     | TOK_SFPnt2f sfpnt2fValue
621     | TOK_SFPnt3f sfpnt3fValue
622     | TOK_SFPnt4f sfpnt4fValue
623     | TOK_SFPlane sfplaneValue
624     | TOK_SFVolume sfVolumeValue;
625     | TOK_SFVec2i sfvec2iValue
626     | TOK_SFVec3i sfvec3iValue
627     | TOK_MFVec2i mfvec2iValue
629 int32:
630     TOK_hex { $$ = $1; }
631     | TOK_int32 { $$ = $1; };
633 double:
634     TOK_int32 { $$ = $1; }
635     | TOK_double { $$ = $1; };
637 float:
638     TOK_int32 { $$ = static_cast<float>($1); }
639     | TOK_double { $$ = static_cast<float>($1); };
641 sfboolValue:
642     TOK_bool
643     {
644         SKEL->addBoolValue($1);
645     }
646     | TOK_Id { SKEL->addFieldValue($1); }; /* Not VRML conformant */
648 sfcolorValue:
649     float { SKEL->beginValue(); }
650     float { SKEL->appendValue(); }
651     float
652     {
653         SKEL->appendValue();
654         SKEL->addColorValue(Color3f($1, $3, $5));
655     };
657 sfcolorRGBAValue:
658     float { SKEL->beginValue(); }
659     float { SKEL->appendValue(); }
660     float { SKEL->appendValue(); }
661     float
662     {
663         SKEL->appendValue();
664         SKEL->addColorRGBAValue(Color4f($1, $3, $5, $7));
665     };
667 sfdoubleValue:
668     double
669     {
670         SKEL->addDoubleValue($1);
671     };
673 sffloatValue:
674     float
675     {
676         SKEL->addFloatValue($1);
677     };
679 sfimageValue:
680     int32 { SKEL->beginValue(); }
681     int32 { SKEL->appendValue(); }
682     int32
683     {
684         SKEL->appendValue();
685         SKEL->beginImage($1, $3, $5);
686     }
687     pixels TOK_ImageFinished
688     {
689         SKEL->endImage();
690     };
692 pixels:
693     pixels int32
694     {
695         SKEL->addImagePixel($2);
696     }
697     | /* empty */;
699 sfint32Value:
700     int32
701     {
702         SKEL->addInt32Value($1);
703     };
705 sfmatrix3dValue:
706     double { SKEL->beginValue(); }
707     double { SKEL->appendValue(); }
708     double { SKEL->appendValue(); }
709     double { SKEL->appendValue(); }
710     double { SKEL->appendValue(); }
711     double { SKEL->appendValue(); }
712     double { SKEL->appendValue(); }
713     double { SKEL->appendValue(); }
714     double
715     {
716         SKEL->appendValue();
717         SKEL->addMatrix3dValue(
718             $1,  $7, $13,
719             $3,  $9, $15,
720             $5, $11, $17);
721     };
723 sfmatrix3fValue:
724     float { SKEL->beginValue(); }
725     float { SKEL->appendValue(); }
726     float { SKEL->appendValue(); }
727     float { SKEL->appendValue(); }
728     float { SKEL->appendValue(); }
729     float { SKEL->appendValue(); }
730     float { SKEL->appendValue(); }
731     float { SKEL->appendValue(); }
732     float
733     {
734         SKEL->appendValue();
735         SKEL->addMatrix3fValue(
736             $1,  $7, $13,
737             $3,  $9, $15,
738             $5, $11, $17);
739     };
741 sfmatrix4dValue:
742     double { SKEL->beginValue(); }
743     double { SKEL->appendValue(); }
744     double { SKEL->appendValue(); }
745     double { SKEL->appendValue(); }
746     double { SKEL->appendValue(); }
747     double { SKEL->appendValue(); }
748     double { SKEL->appendValue(); }
749     double { SKEL->appendValue(); }
750     double { SKEL->appendValue(); }
751     double { SKEL->appendValue(); }
752     double { SKEL->appendValue(); }
753     double { SKEL->appendValue(); }
754     double { SKEL->appendValue(); }
755     double { SKEL->appendValue(); }
756     double { SKEL->appendValue(); }
757     double
758     {
759         SKEL->appendValue();
760         SKEL->addMatrix4dValue(Matrix4d(
761             $1,  $9, $17, $25,
762             $3, $11, $19, $27,
763             $5, $13, $21, $29,
764             $7, $15, $23, $31));
765     };
767 sfmatrix4fValue:
768     float { SKEL->beginValue(); }
769     float { SKEL->appendValue(); }
770     float { SKEL->appendValue(); }
771     float { SKEL->appendValue(); }
772     float { SKEL->appendValue(); }
773     float { SKEL->appendValue(); }
774     float { SKEL->appendValue(); }
775     float { SKEL->appendValue(); }
776     float { SKEL->appendValue(); }
777     float { SKEL->appendValue(); }
778     float { SKEL->appendValue(); }
779     float { SKEL->appendValue(); }
780     float { SKEL->appendValue(); }
781     float { SKEL->appendValue(); }
782     float { SKEL->appendValue(); }
783     float
784     {
785         SKEL->appendValue();
786         SKEL->addMatrix4fValue(Matrix4f(
787             $1,  $9, $17, $25,
788             $3, $11, $19, $27,
789             $5, $13, $21, $29,
790             $7, $15, $23, $31));
791     };
793 sfnodeValue:
794     nodeStatement
795     | TOK_NULL { SKEL->nullNode(); }
797 sfrotationValue:
798     float { SKEL->beginValue(); }
799     float { SKEL->appendValue(); }
800     float { SKEL->appendValue(); }
801     float
802     {
803         SKEL->appendValue();
804         SKEL->addRotationValue(Vec3f($1, $3, $5), $7);
805     };
807 sfstringValue:
808     TOK_string
809     {
810         SKEL->addStringValue($1);
811     }
812     | TOK_Id
813     { /* Not VRML conformant */
814         SKEL->addStringValue($1);
815     }
816     | TOK_hex
817     { /* Not VRML conformant */
818         SKEL->addBufferAsStringValue();
819     }
820     | TOK_int32
821     { /* Not VRML conformant */
822         SKEL->addBufferAsStringValue();
823     };
825 sftimeValue:
826     double
827     {
828         SKEL->addTimeValue($1);
829     };
831 sfvec2dValue:
832     double { SKEL->beginValue(); }
833     double
834     {
835         SKEL->appendValue();
836         SKEL->addVec2dValue(Vec2d($1, $3));
837     };
839 sfvec2fValue:
840     float { SKEL->beginValue(); }
841     float
842     {
843         SKEL->appendValue();
844         SKEL->addVec2fValue(Vec2f($1, $3));
845     };
847 sfvec3dValue:
848     double { SKEL->beginValue(); }
849     double { SKEL->appendValue(); }
850     double { SKEL->appendValue(); }
851     {
852         SKEL->appendValue();
853         SKEL->addVec3dValue(Vec3d($1, $3, $5));
854     };
856 sfvec3fValue:
857     float { SKEL->beginValue(); }
858     float { SKEL->appendValue(); }
859     float { SKEL->appendValue(); }
860     {
861         SKEL->appendValue();
862         SKEL->addVec3fValue(Vec3f($1, $3, $5));
863     };
865 sfvec4dValue:
866     double { SKEL->beginValue(); }
867     double { SKEL->appendValue(); }
868     double { SKEL->appendValue(); }
869     double { SKEL->appendValue(); }
870     {
871         SKEL->appendValue();
872         SKEL->addVec4dValue(Vec4d($1, $3, $5, $7));
873     };
875 sfvec4fValue:
876     float { SKEL->beginValue(); }
877     float { SKEL->appendValue(); }
878     float { SKEL->appendValue(); }
879     float { SKEL->appendValue(); }
880     {
881         SKEL->appendValue();
882         SKEL->addVec4fValue(Vec4f($1, $3, $5, $7));
883     };
885 mfboolValue:
886     sfboolValue
887     | '[' sfboolValues ']';
889 sfboolValues:
890     sfboolValues sfboolValue
891     | /* empty */;
893 mfcolorValue:
894     sfcolorValue
895     | '[' sfcolorValues ']';
897 sfcolorValues:
898     sfcolorValues sfcolorValue
899     | /* empty */;
901 mfcolorRGBAValue:
902     sfcolorRGBAValue
903     | '[' sfcolorRGBAValues ']';
905 sfcolorRGBAValues:
906     sfcolorRGBAValues sfcolorRGBAValue
907     | /* empty */;
909 mfdoubleValue:
910     sfdoubleValue
911     | '[' sfdoubleValues ']';
913 sfdoubleValues:
914     sfdoubleValues sfdoubleValue
915     | /* empty */;
917 mffloatValue:
918     sffloatValue
919     | '[' sffloatValues ']';
921 sffloatValues:
922     sffloatValues sffloatValue
923     | /* empty */;
925 mfimageValue:
926     sfimageValue
927     | '[' sfimageValues ']';
929 sfimageValues:
930     sfimageValues sfimageValue
931     | /* empty */;
933 mfint32Value:
934     sfint32Value
935     | '[' sfint32Values ']';
937 sfint32Values:
938     sfint32Values sfint32Value
939     | /* empty */;
941 mfmatrix3dValue:
942     sfmatrix3dValue
943     | '[' sfmatrix3dValues ']';
945 sfmatrix3dValues:
946     sfmatrix3dValues sfmatrix3dValue
947     | /* empty */;
949 mfmatrix3fValue:
950     sfmatrix3fValue
951     | '[' sfmatrix3fValues ']';
953 sfmatrix3fValues:
954     sfmatrix3fValues sfmatrix3fValue
955     | /* empty */;
957 mfmatrix4dValue:
958     sfmatrix4dValue
959     | '[' sfmatrix4dValues ']';
961 sfmatrix4dValues:
962     sfmatrix4dValues sfmatrix4dValue
963     | /* empty */;
965 mfmatrix4fValue:
966     sfmatrix4fValue
967     | '[' sfmatrix4fValues ']';
969 sfmatrix4fValues:
970     sfmatrix4fValues sfmatrix4fValue
971     | /* empty */;
973 mfnodeValue:
974     sfnodeValue
975     | '[' sfnodeValues ']';
977 sfnodeValues:
978     sfnodeValues sfnodeValue
979     | /* empty */;
981 mfrotationValue:
982     sfrotationValue
983     | '[' sfrotationValues ']';
985 sfrotationValues:
986     sfrotationValues sfrotationValue
987     | /* empty */;
989 mfstringValue:
990     sfstringValue
991     | '[' sfstringValues ']';
993 sfstringValues:
994     sfstringValues sfstringValue
995     | /* empty */;
997 mftimeValue:
998     sftimeValue
999     | '[' sftimeValues ']';
1001 sftimeValues:
1002     sftimeValues sftimeValue
1003     | /* empty */;
1005 mfvec2dValue:
1006     sfvec2dValue
1007     | '[' sfvec2dValues ']';
1009 sfvec2dValues:
1010     sfvec2dValues sfvec2dValue
1011     | /* empty */;
1013 mfvec2fValue:
1014     sfvec2fValue
1015     | '[' sfvec2fValues ']';
1017 sfvec2fValues:
1018     sfvec2fValues sfvec2fValue
1019     | /* empty */;
1021 mfvec3dValue:
1022     sfvec3dValue
1023     | '[' sfvec3dValues ']';
1025 sfvec3dValues:
1026     sfvec3dValues sfvec3dValue
1027     | /* empty */;
1029 mfvec3fValue:
1030     sfvec3fValue
1031     | '[' sfvec3fValues ']';
1033 sfvec3fValues:
1034     sfvec3fValues sfvec3fValue
1035     | /* empty */;
1037 mfvec4dValue:
1038     sfvec4dValue
1039     | '[' sfvec4dValues ']';
1041 sfvec4dValues:
1042     sfvec4dValues sfvec4dValue
1043     | /* empty */;
1045 mfvec4fValue:
1046     sfvec4fValue
1047     | '[' sfvec4fValues ']';
1049 sfvec4fValues:
1050     sfvec4fValues sfvec4fValue
1051     | /* empty */;
1053 /* The following types are not VRML conformant */
1055 sfcolor4iValue:
1056     int32 { SKEL->beginValue(); }
1057     int32 { SKEL->appendValue(); }
1058     int32 { SKEL->appendValue(); }
1059     int32
1060     {
1061         SKEL->appendValue();
1062         SKEL->addColor4iValue(Color4ub(static_cast<UInt8>($1), static_cast<UInt8>($3),
1063                                        static_cast<UInt8>($5), static_cast<UInt8>($7)));
1064     };
1066 sfpnt2fValue:
1067     float { SKEL->beginValue(); }
1068     float
1069     {
1070         SKEL->appendValue();
1071         SKEL->addPnt2fValue(Pnt2f($1, $3));
1072     };
1074 sfpnt3fValue:
1075     float { SKEL->beginValue(); }
1076     float { SKEL->appendValue(); }
1077     float
1078     {
1079         SKEL->appendValue();
1080         SKEL->addPnt3fValue(Pnt3f($1, $3, $5));
1081     };
1083 sfpnt4fValue:
1084     float { SKEL->beginValue(); }
1085     float { SKEL->appendValue(); }
1086     float { SKEL->appendValue(); }
1087     float
1088     {
1089         SKEL->appendValue();
1090         SKEL->addPnt4fValue(Pnt4f($1, $3, $5, $7));
1091     };
1093 sfplaneValue:
1094     float { SKEL->beginValue(); }
1095     float { SKEL->appendValue(); }
1096     float { SKEL->appendValue(); }
1097     float
1098     {
1099         SKEL->appendValue();
1100         SKEL->addPlaneValue(Plane(Vec3f($1, $3, $5), $7));
1101     };
1103 sfVolumeValue:
1104     int32 { SKEL->beginValue();  }
1105     float { SKEL->appendValue(); }
1106     float { SKEL->appendValue(); }
1107     float { SKEL->appendValue(); }
1108     float { SKEL->appendValue(); }
1109     float { SKEL->appendValue(); }
1110     float
1111     {
1112         SKEL->appendValue();
1113         BoxVolume bv($3, $5, $7, $9, $11, $13);
1114         
1115         bv.setState($1);
1117         SKEL->addVolumeValue(bv);
1118     }
1120 sfvec2iValue:
1121     int32 { SKEL->beginValue(); }
1122     int32
1123     {
1124         SKEL->appendValue();
1125         SKEL->addVec2iValue(Vec2i($1, $3));
1126     };
1128 sfvec3iValue:
1129     int32 { SKEL->beginValue(); }
1130     int32
1131     {
1132         SKEL->appendValue();
1133     }
1134     int32
1135     {
1136         SKEL->appendValue();
1137         SKEL->addVec3iValue(Vec3i($1, $3, $5));
1138     };
1140 mfcolor4iValue:
1141     sfcolor4iValue
1142     | '[' sfcolor4iValues ']';
1144 sfcolor4iValues:
1145     sfcolor4iValues sfcolor4iValue
1146     | /* empty */;
1148 mfpnt2fValue:
1149     sfpnt2fValue
1150     | '[' sfpnt2fValues ']';
1152 sfpnt2fValues:
1153     sfpnt2fValues sfpnt2fValue
1154     | /* empty */;
1156 mfpnt3fValue:
1157     sfpnt3fValue
1158     | '[' sfpnt3fValues ']';
1160 sfpnt3fValues:
1161     sfpnt3fValues sfpnt3fValue
1162     | /* empty */;
1164 mfpnt4fValue:
1165     sfpnt4fValue
1166     | '[' sfpnt4fValues ']';
1168 sfpnt4fValues:
1169     sfpnt4fValues sfpnt4fValue
1170     | /* empty */;
1172 mfplaneValue:
1173     sfplaneValue
1174     | '[' sfplaneValues ']';
1176 sfplaneValues:
1177     sfplaneValues sfplaneValue
1178     | /* empty */;
1180 mfvec2iValue:
1181     sfvec2iValue
1182     | '[' sfvec2iValues ']';
1184 sfvec2iValues:
1185     sfvec2iValues sfvec2iValue
1186     | /* empty */;
1190 int OSGScanParseSkel_lex(YYSTYPE *lvalp, void *pSkel)
1192     return SKEL->lex(lvalp);