ANTLR Support Libraries 2.7.1+

antlr/TokenStreamSelector.hpp

Go to the documentation of this file.
00001 #ifndef INC_TokenStreamSelector_hpp__
00002 #define INC_TokenStreamSelector_hpp__
00003 
00004 /* ANTLR Translator Generator
00005  * Project led by Terence Parr at http://www.jGuru.com
00006  * Software rights: http://www.antlr.org/license.html
00007  *
00008  * $Id: //depot/code/org.antlr/release/antlr-2.7.7/lib/cpp/antlr/TokenStreamSelector.hpp#2 $
00009  */
00010 
00011 #include <antlr/config.hpp>
00012 #include <antlr/TokenStream.hpp>
00013 #include <map>
00014 #include <stack>
00015 
00016 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
00017 namespace antlr {
00018 #endif
00019 
00027 class ANTLR_API TokenStreamSelector : public TokenStream {
00028 protected:
00030 #ifdef OS_NO_ALLOCATOR
00031    typedef ANTLR_USE_NAMESPACE(std)less<ANTLR_USE_NAMESPACE(std)string> lessp;
00032    typedef ANTLR_USE_NAMESPACE(std)map<ANTLR_USE_NAMESPACE(std)string,TokenStream*,lessp> inputStreamNames_coll;
00033 #else
00034    typedef ANTLR_USE_NAMESPACE(std)map<ANTLR_USE_NAMESPACE(std)string,TokenStream*> inputStreamNames_coll;
00035 #endif
00036    inputStreamNames_coll inputStreamNames;
00037 
00039    TokenStream* input;
00040 
00042 #ifdef OS_NO_ALLOCATOR
00043    typedef ANTLR_USE_NAMESPACE(std)stack<TokenStream*, ANTLR_USE_NAMESPACE(std)deque<TokenStream*> > streamStack_coll;
00044 #else
00045    typedef ANTLR_USE_NAMESPACE(std)stack<TokenStream*> streamStack_coll;
00046 #endif
00047    streamStack_coll streamStack;
00048 
00049 public:
00050    TokenStreamSelector();
00051    ~TokenStreamSelector();
00052 
00053    void addInputStream(TokenStream* stream, const ANTLR_USE_NAMESPACE(std)string& key);
00054 
00056    TokenStream* getCurrentStream() const;
00057 
00058    TokenStream* getStream(const ANTLR_USE_NAMESPACE(std)string& sname) const;
00059 
00060    RefToken nextToken();
00061 
00062    TokenStream* pop();
00063 
00064    void push(TokenStream* stream);
00065 
00066    void push(const ANTLR_USE_NAMESPACE(std)string& sname);
00067 
00075    void retry();
00076 
00078    void select(TokenStream* stream);
00079 
00080    void select(const ANTLR_USE_NAMESPACE(std)string& sname);
00081 };
00082 
00083 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
00084 }
00085 #endif
00086 
00087 #endif //INC_TokenStreamSelector_hpp__
 All Classes Namespaces Files Functions Variables Typedefs Friends Defines