1#ifndef INC_ParserSharedInputState_hpp__ 2#define INC_ParserSharedInputState_hpp__ 3 4/* ANTLR Translator Generator 5 * Project led by Terence Parr at http://www.jGuru.com 6 * Software rights: http://www.antlr.org/license.html 7 * 8 * $Id: //depot/code/org.antlr/release/antlr-2.7.7/lib/cpp/antlr/ParserSharedInputState.hpp#2 $ 9 */ 10 11#include <antlr/config.hpp> 12#include <antlr/TokenBuffer.hpp> 13#include <antlr/RefCount.hpp> 14#include <string> 15 16#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE 17namespace antlr { 18#endif 19 20/** This object contains the data associated with an 21 * input stream of tokens. Multiple parsers 22 * share a single ParserSharedInputState to parse 23 * the same stream of tokens. 24 */ 25class ANTLR_API ParserInputState { 26public: 27 /** Construct a new ParserInputState 28 * @param in the TokenBuffer to read from. The object is deleted together 29 * with the ParserInputState object. 30 */ 31 ParserInputState( TokenBuffer* in ) 32 : guessing(0) 33 , filename() 34 , input(in) 35 , inputResponsible(true) 36 { 37 } 38 /** Construct a new ParserInputState 39 * @param in the TokenBuffer to read from. 40 */ 41 ParserInputState( TokenBuffer& in ) 42 : guessing(0) 43 , filename("") 44 , input(&in) 45 , inputResponsible(false) 46 { 47 } 48 49 virtual ~ParserInputState() 50 { 51 if (inputResponsible) 52 delete input; 53 } 54 55 TokenBuffer& getInput( void ) 56 { 57 return *input; 58 } 59 60 /// Reset the ParserInputState and the underlying TokenBuffer 61 void reset( void ) 62 { 63 input->reset(); 64 guessing = 0; 65 } 66 67public: 68 /** Are we guessing (guessing>0)? */ 69 int guessing; 70 /** What file (if known) caused the problem? 71 * @todo wrap this one.. 72 */ 73 ANTLR_USE_NAMESPACE(std)string filename; 74private: 75 /** Where to get token objects */ 76 TokenBuffer* input; 77 /// Do we need to free the TokenBuffer or is it owned by another.. 78 bool inputResponsible; 79 80 // we don't want these: 81 ParserInputState(const ParserInputState&); 82 ParserInputState& operator=(const ParserInputState&); 83}; 84 85/// A reference counted ParserInputState 86typedef RefCount<ParserInputState> ParserSharedInputState; 87 88#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE 89} 90#endif 91 92#endif //INC_ParserSharedInputState_hpp__ 93