source: trunk/yao/share/antlr-2.7.7/lib/cpp/antlr/LexerSharedInputState.hpp @ 1

Last change on this file since 1 was 1, checked in by lnalod, 15 years ago

Initial import of YAO sources

File size: 3.4 KB
Line 
1#ifndef INC_LexerSharedInputState_hpp__
2#define INC_LexerSharedInputState_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/LexerSharedInputState.hpp#2 $
9 */
10
11#include <antlr/config.hpp>
12#include <antlr/InputBuffer.hpp>
13#include <antlr/RefCount.hpp>
14#include <antlr/CharBuffer.hpp>
15#include <string>
16
17#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
18namespace antlr {
19#endif
20
21/** This object contains the data associated with an
22 *  input stream of characters.  Multiple lexers
23 *  share a single LexerSharedInputState to lex
24 *  the same input stream.
25 */
26class ANTLR_API LexerInputState {
27public:
28        /** Construct a new LexerInputState
29         * @param inbuf the InputBuffer to read from. The object is deleted together
30         * with the LexerInputState object.
31         */
32        LexerInputState(InputBuffer* inbuf)
33        : column(1)
34        , line(1)
35        , tokenStartColumn(1)
36        , tokenStartLine(1)
37        , guessing(0)
38        , filename("")
39        , input(inbuf)
40        , inputResponsible(true)
41        {
42        }
43
44        /** Construct a new LexerInputState
45         * @param inbuf the InputBuffer to read from.
46         */
47        LexerInputState(InputBuffer& inbuf)
48        : column(1)
49        , line(1)
50        , tokenStartColumn(1)
51        , tokenStartLine(1)
52        , guessing(0)
53        , filename("")
54        , input(&inbuf)
55        , inputResponsible(false)
56        {
57        }
58
59        /** Construct a new LexerInputState
60         * @param in an istream to read from.
61         * @see antlr.CharBuffer
62         */
63        LexerInputState(ANTLR_USE_NAMESPACE(std)istream& in)
64        : column(1)
65        , line(1)
66        , tokenStartColumn(1)
67        , tokenStartLine(1)
68        , guessing(0)
69        , filename("")
70        , input(new CharBuffer(in))
71        , inputResponsible(true)
72        {
73        }
74
75        /** Reset the LexerInputState with a specified stream and filename.
76         * This method is a hack, dunno what I was thinking when I added it.
77         * This should actually be done in a subclass.
78         * @deprecated
79         */
80        virtual void initialize( ANTLR_USE_NAMESPACE(std)istream& in, const char* file = "" )
81        {
82                column = 1;
83                line = 1;
84                tokenStartColumn = 1;
85                tokenStartLine = 1;
86                guessing = 0;
87                filename = file;
88
89                if( input && inputResponsible )
90                        delete input;
91
92                input = new CharBuffer(in);
93                inputResponsible = true;
94        }
95
96        /** Reset the LexerInputState to initial state.
97         * The underlying InputBuffer is also reset.
98         */
99        virtual void reset( void )
100        {
101                column = 1;
102                line = 1;
103                tokenStartColumn = 1;
104                tokenStartLine = 1;
105                guessing = 0;
106                input->reset();
107        }
108
109        /** Set the file position of the SharedLexerInputState.
110         * @param line_ line number to be set
111         * @param column_ column number to be set
112         */
113        void setPosition( int line_, int column_ )
114        {
115                line = line_;
116                column = column_;
117        }
118
119        virtual ~LexerInputState()
120        {
121                if (inputResponsible)
122                        delete input;
123        }
124
125        int column;
126        int line;
127        int tokenStartColumn;
128        int tokenStartLine;
129        int guessing;
130        /** What file (if known) caused the problem? */
131        ANTLR_USE_NAMESPACE(std)string filename;
132        InputBuffer& getInput();
133private:
134        /// Input buffer we use
135        InputBuffer* input;
136        /// Who is responsible for cleaning up the InputBuffer?
137        bool inputResponsible;
138
139        // we don't want these:
140        LexerInputState(const LexerInputState&);
141        LexerInputState& operator=(const LexerInputState&);
142};
143
144inline InputBuffer& LexerInputState::getInput()
145{
146        return *input;
147}
148
149/// A reference counted LexerInputState object
150typedef RefCount<LexerInputState> LexerSharedInputState;
151
152#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
153}
154#endif
155
156#endif //INC_LexerSharedInputState_hpp__
Note: See TracBrowser for help on using the repository browser.