]>
Commit | Line | Data |
---|---|---|
427c49bc A |
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 | */ | |
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 | ||
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__ |