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 17 namespace 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 */ 25 class ANTLR_API ParserInputState { 26 public: 27 /** Construct a new ParserInputState 28 * @param in the TokenBuffer to read from. The object is deleted together 29 * with the ParserInputState object. 30 */ ParserInputState(TokenBuffer * in)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 */ ParserInputState(TokenBuffer & in)41 ParserInputState( TokenBuffer& in ) 42 : guessing(0) 43 , filename("") 44 , input(&in) 45 , inputResponsible(false) 46 { 47 } 48 ~ParserInputState()49 virtual ~ParserInputState() 50 { 51 if (inputResponsible) 52 delete input; 53 } 54 getInput(void)55 TokenBuffer& getInput( void ) 56 { 57 return *input; 58 } 59 60 /// Reset the ParserInputState and the underlying TokenBuffer reset(void)61 void reset( void ) 62 { 63 input->reset(); 64 guessing = 0; 65 } 66 67 public: 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; 74 private: 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 86 typedef RefCount<ParserInputState> ParserSharedInputState; 87 88 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE 89 } 90 #endif 91 92 #endif //INC_ParserSharedInputState_hpp__ 93