KDevelop API Documentation

lib/antlr/src/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.0.4.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Oct 19 08:01:47 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003