00001 #ifndef INC_vrml97parser_hpp_
00002 #define INC_vrml97parser_hpp_
00003
00004 #include <antlr/config.hpp>
00005
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
00114
00115
00116 std::stack<wrl::MFNode> mfNodeBufferStack;
00117
00118 std::stack<wrl::Node::FieldHandle> handleStack;
00119
00120 std::stack<wrl::ProtoDeclaration*> protoStack;
00121
00122 std::stack<wrl::Script*> scriptStack;
00123
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
00128 std::map<std::string,wrl::Node*> definedNodes;
00129
00130 std::map<std::string,wrl::ProtoDeclaration*> declaredProtos;
00131 std::deque<wrl::ProtoDeclaration*> protos;
00132 std::deque<wrl::ExternProtoDeclaration*> externProtos;
00133
00134
00135 wrl::Node* nodeFromTypeId(const std::string& t);
00136
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