Home Hierarchy Members Alphabetical Related Pages

include/xdkwrl/parser/vrml97parser.hpp

Go to the documentation of this file.
00001 #ifndef INC_vrml97parser_hpp_
00002 #define INC_vrml97parser_hpp_
00003 
00004 #include <antlr/config.hpp>
00005 /* $ANTLR 2.7.4: "vrml97.g" -> "vrml97parser.hpp"$ */
00006 #include <antlr/TokenStream.hpp>
00007 #include <antlr/TokenBuffer.hpp>
00008 #include "vrml97parserTokenTypes.hpp"
00009 #include <antlr/LLkParser.hpp>
00010 
00011 #line 2 "vrml97.g"
00012 
00013 #include <xdkwrl/fieldtypes/sfbool.h>
00014 #include <xdkwrl/fieldtypes/sfcolor.h>
00015 #include <xdkwrl/fieldtypes/sffloat.h>
00016 #include <xdkwrl/fieldtypes/sfimage.h>
00017 #include <xdkwrl/fieldtypes/sfint32.h>
00018 #include <xdkwrl/fieldtypes/sfnode.h>
00019 #include <xdkwrl/fieldtypes/sfrotation.h>
00020 #include <xdkwrl/fieldtypes/sfstring.h>
00021 #include <xdkwrl/fieldtypes/sftime.h>
00022 #include <xdkwrl/fieldtypes/sfvec2f.h>
00023 #include <xdkwrl/fieldtypes/sfvec3f.h>
00024 #include <xdkwrl/fieldtypes/mfcolor.h>
00025 #include <xdkwrl/fieldtypes/mffloat.h>
00026 #include <xdkwrl/fieldtypes/mfint32.h>
00027 #include <xdkwrl/fieldtypes/mfnode.h>
00028 #include <xdkwrl/fieldtypes/mfrotation.h>
00029 #include <xdkwrl/fieldtypes/mfstring.h>
00030 #include <xdkwrl/fieldtypes/mftime.h>
00031 #include <xdkwrl/fieldtypes/mfvec2f.h>
00032 #include <xdkwrl/fieldtypes/mfvec3f.h>
00033 #include <xdkwrl/proto.h>
00034 #include <xdkwrl/script.h>
00035 #include <iostream>
00036 #include <string>
00037 #include <stack>
00038 #include <map>
00039 
00040 #line 41 "vrml97parser.hpp"
00041 class CUSTOM_API vrml97parser : public ANTLR_USE_NAMESPACE(antlr)LLkParser, public vrml97parserTokenTypes
00042 {
00043 #line 228 "vrml97.g"
00044 
00045     public:
00046     void setVerbose(bool b) { verbose_ = b; }
00047     bool verbose() const { return verbose_; }
00048     template <class O>
00049     O getParsedNodes(O o) const
00050         {
00051             if (mfNodeBufferStack.empty())
00052                 {
00053                     return o;
00054                 }
00055             for (wrl::MFNode::const_iterator
00056                      iter = mfNodeBufferStack.top().begin();
00057                  iter != mfNodeBufferStack.top().end();++iter)
00058                 {
00059                     *o++ = *iter;
00060                 }
00061             return o;
00062         }
00063     template <class O>
00064     O getParsedProtos(O o) const
00065         {
00066             for (std::deque<wrl::ProtoDeclaration*>::const_iterator
00067                      iter = protos.begin();
00068                  iter != protos.end();++iter)
00069                 {
00070                     *o++ = *iter;
00071                 }
00072             return o;
00073         }
00074     template <class O>
00075     O getParsedExternProtos(O o) const
00076         {
00077             for (std::deque<wrl::ExternProtoDeclaration*>::const_iterator
00078                      iter = externProtos.begin();
00079                  iter != externProtos.end();++iter)
00080                 {
00081                     *o++ = *iter;
00082                 }
00083             return o;
00084         }
00085     public:
00086     inline bool sfboolParsed()     { return currentHandle().fieldTypeId() == wrl::sfBool; }
00087     inline bool sfcolorParsed()    { return currentHandle().fieldTypeId() == wrl::sfColor; }
00088     inline bool sffloatParsed()    { return currentHandle().fieldTypeId() == wrl::sfFloat; }
00089     inline bool sfimageParsed()    { return currentHandle().fieldTypeId() == wrl::sfImage; }
00090     inline bool sfint32Parsed()    { return currentHandle().fieldTypeId() == wrl::sfInt32; }
00091     inline bool sfnodeParsed()     { return currentHandle().fieldTypeId() == wrl::sfNode; }
00092     inline bool sfrotationParsed() { return currentHandle().fieldTypeId() == wrl::sfRotation; }
00093     inline bool sfstringParsed()   { return currentHandle().fieldTypeId() == wrl::sfString; }
00094     inline bool sftimeParsed()     { return currentHandle().fieldTypeId() == wrl::sfTime; }
00095     inline bool sfvec2fParsed()    { return currentHandle().fieldTypeId() == wrl::sfVec2f; }
00096     inline bool sfvec3fParsed()    { return currentHandle().fieldTypeId() == wrl::sfVec3f; }
00097     inline bool mfcolorParsed()    { return currentHandle().fieldTypeId() == wrl::mfColor; }
00098     inline bool mffloatParsed()    { return currentHandle().fieldTypeId() == wrl::mfFloat; }
00099     inline bool mfint32Parsed()    { return currentHandle().fieldTypeId() == wrl::mfInt32; }
00100     inline bool mfnodeParsed()     { return currentHandle().fieldTypeId() == wrl::mfNode; }
00101     inline bool mfrotationParsed() { return currentHandle().fieldTypeId() == wrl::mfRotation; }
00102     inline bool mfstringParsed()   { return currentHandle().fieldTypeId() == wrl::mfString; }
00103     inline bool mfvec2fParsed()    { return currentHandle().fieldTypeId() == wrl::mfVec2f; }
00104     inline bool mfvec3fParsed()    { return currentHandle().fieldTypeId() == wrl::mfVec3f; }
00105     wrl::MFColor    mfColorBuffer;
00106     wrl::MFFloat    mfFloatBuffer;
00107     wrl::MFInt32    mfInt32Buffer;
00108     wrl::MFNode     mfNodeBuffer;
00109     wrl::MFRotation mfRotationBuffer;
00110     wrl::MFString   mfStringBuffer;
00111     wrl::MFVec2f    mfVec2fBuffer;
00112     wrl::MFVec3f    mfVec3fBuffer;
00113     // We must do a special case for node list because we might have
00114     // recursion so we must use a stack. See mfnodeValue rule and
00115     // nodeStatement for explanations.
00116     std::stack<wrl::MFNode> mfNodeBufferStack;
00117     // For the same reason we must have a stack of node handle
00118     std::stack<wrl::Node::FieldHandle> handleStack;
00119     // And a proto stack
00120     std::stack<wrl::ProtoDeclaration*> protoStack;
00121     // And a script stack
00122     std::stack<wrl::Script*> scriptStack;    
00123     // We define some function to simplify access to this current elements.
00124     inline wrl::Node* currentNode() { return mfNodeBufferStack.top().back(); }
00125     inline wrl::Node::FieldHandle& currentHandle() { return handleStack.top(); }
00126     inline unsigned int depth() { return mfNodeBufferStack.size(); }
00127     // This stores nodes for DEF/USE statements
00128     std::map<std::string,wrl::Node*> definedNodes;    
00129     // This stores proto definitions
00130     std::map<std::string,wrl::ProtoDeclaration*> declaredProtos;    
00131     std::deque<wrl::ProtoDeclaration*> protos;    
00132     std::deque<wrl::ExternProtoDeclaration*> externProtos;    
00133     // This function is on important piece: it uses standard nodes
00134     // knowledge and proto definitions to parse nodes.
00135     wrl::Node* nodeFromTypeId(const std::string& t);
00136     // We also need a stack to know wether we parse a PROTO or a Script
00137     std::stack<int> modeStack_;
00138     private:
00139     bool verbose_;
00140 #line 45 "vrml97parser.hpp"
00141 public:
00142         void initializeASTFactory( ANTLR_USE_NAMESPACE(antlr)ASTFactory& factory );
00143 protected:
00144         vrml97parser(ANTLR_USE_NAMESPACE(antlr)TokenBuffer& tokenBuf, int k);
00145 public:
00146         vrml97parser(ANTLR_USE_NAMESPACE(antlr)TokenBuffer& tokenBuf);
00147 protected:
00148         vrml97parser(ANTLR_USE_NAMESPACE(antlr)TokenStream& lexer, int k);
00149 public:
00150         vrml97parser(ANTLR_USE_NAMESPACE(antlr)TokenStream& lexer);
00151         vrml97parser(const ANTLR_USE_NAMESPACE(antlr)ParserSharedInputState& state);
00152         int getNumTokens() const
00153         {
00154                 return vrml97parser::NUM_TOKENS;
00155         }
00156         const char* getTokenName( int type ) const
00157         {
00158                 if( type > getNumTokens() ) return 0;
00159                 return vrml97parser::tokenNames[type];
00160         }
00161         const char* const* getTokenNames() const
00162         {
00163                 return vrml97parser::tokenNames;
00164         }
00165         public: void parseScene();
00166         public: void statements();
00167         public: void statement();
00168         public: void nodeStatement();
00169         public: void protoStatement();
00170         public: void routeStatement();
00171         public: void node();
00172         public: std::string  nodeNameId();
00173         public: void rootNodeStatement();
00174         public: void proto();
00175         public: void externproto();
00176         public: void protoStatements();
00177         public: std::string  nodeTypeId();
00178         public: void interfaceDeclarations();
00179         public: void protoBody();
00180         public: void interfaceDeclaration();
00181         public: void restrictedInterfaceDeclaration();
00182         public: wrl::FieldTypeId  fieldType();
00183         public: std::string  eventInId();
00184         public: std::string  eventOutId();
00185         public: std::string  fieldId();
00186         public: void fieldValue();
00187         public: void externInterfaceDeclarations();
00188         public: void mfstringValue();
00189         public: void externInterfaceDeclaration();
00190         public: void nodeBody();
00191         public: void scriptBody();
00192         public: void nodeBodyElement();
00193         public: void scriptBodyElement();
00194         public: wrl::SFBool  sfboolValue();
00195         public: wrl::SFColor  sfcolorValue();
00196         public: wrl::SFFloat  sffloatValue();
00197         public: wrl::SFImage  sfimageValue();
00198         public: wrl::SFInt32  sfint32Value();
00199         public: wrl::SFNode  sfnodeValue();
00200         public: wrl::SFRotation  sfrotationValue();
00201         public: wrl::SFString  sfstringValue();
00202         public: wrl::SFTime  sftimeValue();
00203         public: wrl::SFVec2f  sfvec2fValue();
00204         public: wrl::SFVec3f  sfvec3fValue();
00205         public: void mfcolorValue();
00206         public: void mffloatValue();
00207         public: void mfint32Value();
00208         public: void mfnodeValue();
00209         public: void mfrotationValue();
00210         public: void mfvec2fValue();
00211         public: void mfvec3fValue();
00212         public: float  floatv();
00213         public: int  int32();
00214         public: std::string  stringv();
00215 public:
00216         ANTLR_USE_NAMESPACE(antlr)RefAST getAST()
00217         {
00218                 return returnAST;
00219         }
00220         
00221 protected:
00222         ANTLR_USE_NAMESPACE(antlr)RefAST returnAST;
00223 private:
00224         static const char* tokenNames[];
00225 #ifndef NO_STATIC_CONSTS
00226         static const int NUM_TOKENS = 60;
00227 #else
00228         enum {
00229                 NUM_TOKENS = 60
00230         };
00231 #endif
00232         
00233         static const unsigned long _tokenSet_0_data_[];
00234         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_0;
00235         static const unsigned long _tokenSet_1_data_[];
00236         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_1;
00237         static const unsigned long _tokenSet_2_data_[];
00238         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_2;
00239         static const unsigned long _tokenSet_3_data_[];
00240         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_3;
00241         static const unsigned long _tokenSet_4_data_[];
00242         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_4;
00243         static const unsigned long _tokenSet_5_data_[];
00244         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_5;
00245         static const unsigned long _tokenSet_6_data_[];
00246         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_6;
00247         static const unsigned long _tokenSet_7_data_[];
00248         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_7;
00249         static const unsigned long _tokenSet_8_data_[];
00250         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_8;
00251         static const unsigned long _tokenSet_9_data_[];
00252         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_9;
00253         static const unsigned long _tokenSet_10_data_[];
00254         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_10;
00255         static const unsigned long _tokenSet_11_data_[];
00256         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_11;
00257         static const unsigned long _tokenSet_12_data_[];
00258         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_12;
00259         static const unsigned long _tokenSet_13_data_[];
00260         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_13;
00261         static const unsigned long _tokenSet_14_data_[];
00262         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_14;
00263         static const unsigned long _tokenSet_15_data_[];
00264         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_15;
00265         static const unsigned long _tokenSet_16_data_[];
00266         static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_16;
00267 };
00268 
00269 #endif /*INC_vrml97parser_hpp_*/

Generated on 24 Feb 2005 with doxygen version 1.3.9.1. Valid HTML 4.0! Valid CSS!