KDevelop API Documentation

TokenStreamSelector.cpp

Go to the documentation of this file.
00001 /* ANTLR Translator Generator
00002  * Project led by Terence Parr at http://www.jGuru.com
00003  * Software rights: http://www.antlr.org/RIGHTS.html
00004  *
00005  * $Id: TokenStreamSelector.cpp,v 1.2 2003/05/02 00:36:20 okellogg Exp $
00006  */
00007 #include "antlr/TokenStreamSelector.hpp"
00008 #include "antlr/TokenStreamRetryException.hpp"
00009 
00010 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
00011 namespace antlr {
00012 #endif
00013 
00022 TokenStreamSelector::TokenStreamSelector()
00023 : input(0)
00024 {
00025 }
00026 
00027 TokenStreamSelector::~TokenStreamSelector()
00028 {
00029 }
00030 
00031 void TokenStreamSelector::addInputStream(TokenStream* stream, const ANTLR_USE_NAMESPACE(std)string& key)
00032 {
00033     inputStreamNames[key] = stream;
00034 }
00035 
00036 TokenStream* TokenStreamSelector::getCurrentStream() const
00037 {
00038     return input;
00039 }
00040 
00041 TokenStream* TokenStreamSelector::getStream(const ANTLR_USE_NAMESPACE(std)string& sname) const
00042 {
00043     inputStreamNames_coll::const_iterator i = inputStreamNames.find(sname);
00044     if (i == inputStreamNames.end()) {
00045         throw ANTLR_USE_NAMESPACE(std)string("TokenStream ")+sname+" not found";
00046     }
00047     return (*i).second;
00048 }
00049 
00050 RefToken TokenStreamSelector::nextToken()
00051 {
00052     // keep looking for a token until you don't
00053     // get a retry exception
00054     for (;;) {
00055         try {
00056             return input->nextToken();
00057         }
00058         catch (TokenStreamRetryException& r) {
00059             // just retry "forever"
00060         }
00061     }
00062 }
00063 
00064 TokenStream* TokenStreamSelector::pop()
00065 {
00066     TokenStream* stream = streamStack.top();
00067     streamStack.pop();
00068     select(stream);
00069     return stream;
00070 }
00071 
00072 void TokenStreamSelector::push(TokenStream* stream)
00073 {
00074     streamStack.push(input);
00075     select(stream);
00076 }
00077 
00078 void TokenStreamSelector::push(const ANTLR_USE_NAMESPACE(std)string& sname)
00079 {
00080     streamStack.push(input);
00081     select(sname);
00082 }
00083 
00084 void TokenStreamSelector::retry()
00085 {
00086     throw TokenStreamRetryException();
00087 }
00088 
00090 void TokenStreamSelector::select(TokenStream* stream)
00091 {
00092     input = stream;
00093 }
00094 
00095 void TokenStreamSelector::select(const ANTLR_USE_NAMESPACE(std)string& sname)
00096 {
00097     inputStreamNames_coll::const_iterator i = inputStreamNames.find(sname);
00098     if (i == inputStreamNames.end()) {
00099         throw ANTLR_USE_NAMESPACE(std)string("TokenStream ")+sname+" not found";
00100     }
00101     input = (*i).second;
00102 }
00103 
00104 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
00105 }
00106 #endif
00107 
KDE Logo
This file is part of the documentation for KDevelop Version 3.1.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Feb 22 09:22:34 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003