xref: /aosp_15_r20/external/antlr/runtime/Cpp/include/antlr3commontoken.inl (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger RobotANTLR_BEGIN_NAMESPACE()
2*16467b97STreehugger Robot
3*16467b97STreehugger Robottemplate<class ImplTraits>
4*16467b97STreehugger RobotCommonToken<ImplTraits>::CommonToken()
5*16467b97STreehugger Robot{
6*16467b97STreehugger Robot	m_type = 0;
7*16467b97STreehugger Robot    m_channel = 0;
8*16467b97STreehugger Robot	m_lineStart = NULL;
9*16467b97STreehugger Robot	m_line = 0;
10*16467b97STreehugger Robot	m_charPositionInLine = 0;
11*16467b97STreehugger Robot	m_input = NULL;
12*16467b97STreehugger Robot	m_index = 0;
13*16467b97STreehugger Robot	m_startIndex = 0;
14*16467b97STreehugger Robot	m_stopIndex = 0;
15*16467b97STreehugger Robot}
16*16467b97STreehugger Robot
17*16467b97STreehugger Robottemplate<class ImplTraits>
18*16467b97STreehugger RobotCommonToken<ImplTraits>::CommonToken(ANTLR_UINT32 type)
19*16467b97STreehugger Robot{
20*16467b97STreehugger Robot	m_type = type;
21*16467b97STreehugger Robot	m_channel = 0;
22*16467b97STreehugger Robot	m_lineStart = NULL;
23*16467b97STreehugger Robot	m_line = 0;
24*16467b97STreehugger Robot	m_charPositionInLine = 0;
25*16467b97STreehugger Robot	m_input = NULL;
26*16467b97STreehugger Robot	m_index = 0;
27*16467b97STreehugger Robot	m_startIndex = 0;
28*16467b97STreehugger Robot	m_stopIndex = 0;
29*16467b97STreehugger Robot}
30*16467b97STreehugger Robot
31*16467b97STreehugger Robottemplate<class ImplTraits>
32*16467b97STreehugger RobotCommonToken<ImplTraits>::CommonToken(TOKEN_TYPE type)
33*16467b97STreehugger Robot{
34*16467b97STreehugger Robot	m_type = type;
35*16467b97STreehugger Robot	m_channel = 0;
36*16467b97STreehugger Robot	m_lineStart = NULL;
37*16467b97STreehugger Robot	m_line = 0;
38*16467b97STreehugger Robot	m_charPositionInLine = 0;
39*16467b97STreehugger Robot	m_input = NULL;
40*16467b97STreehugger Robot	m_index = 0;
41*16467b97STreehugger Robot	m_startIndex = 0;
42*16467b97STreehugger Robot	m_stopIndex = 0;
43*16467b97STreehugger Robot}
44*16467b97STreehugger Robot
45*16467b97STreehugger Robottemplate<class ImplTraits>
46*16467b97STreehugger RobotCommonToken<ImplTraits>::CommonToken( const CommonToken& ctoken )
47*16467b97STreehugger Robot	:m_tokText( ctoken.m_tokText )
48*16467b97STreehugger Robot{
49*16467b97STreehugger Robot	m_type = ctoken.m_type;
50*16467b97STreehugger Robot	m_channel = ctoken.m_channel;
51*16467b97STreehugger Robot	m_lineStart = ctoken.m_lineStart;
52*16467b97STreehugger Robot	m_line = ctoken.m_line;
53*16467b97STreehugger Robot	m_charPositionInLine = ctoken.m_charPositionInLine;
54*16467b97STreehugger Robot	m_input = ctoken.m_input;
55*16467b97STreehugger Robot	m_index = ctoken.m_index;
56*16467b97STreehugger Robot	m_startIndex = ctoken.m_startIndex;
57*16467b97STreehugger Robot	m_stopIndex = ctoken.m_stopIndex;
58*16467b97STreehugger Robot}
59*16467b97STreehugger Robot
60*16467b97STreehugger Robottemplate<class ImplTraits>
61*16467b97STreehugger RobotCommonToken<ImplTraits>& CommonToken<ImplTraits>::operator=( const CommonToken& ctoken )
62*16467b97STreehugger Robot{
63*16467b97STreehugger Robot	m_type = ctoken.m_type;
64*16467b97STreehugger Robot	m_channel = ctoken.m_channel;
65*16467b97STreehugger Robot	m_lineStart = ctoken.m_lineStart;
66*16467b97STreehugger Robot	m_line = ctoken.m_line;
67*16467b97STreehugger Robot	m_charPositionInLine = ctoken.m_charPositionInLine;
68*16467b97STreehugger Robot	m_input = ctoken.m_input;
69*16467b97STreehugger Robot	m_index = ctoken.m_index;
70*16467b97STreehugger Robot	m_startIndex = ctoken.m_startIndex;
71*16467b97STreehugger Robot	m_stopIndex = ctoken.m_stopIndex;
72*16467b97STreehugger Robot
73*16467b97STreehugger Robot	m_tokText = ctoken.m_tokText;
74*16467b97STreehugger Robot	return *this;
75*16467b97STreehugger Robot}
76*16467b97STreehugger Robot
77*16467b97STreehugger Robottemplate<class ImplTraits>
78*16467b97STreehugger RobotANTLR_INLINE bool CommonToken<ImplTraits>::operator<( const CommonToken& ctoken ) const
79*16467b97STreehugger Robot{
80*16467b97STreehugger Robot	return (m_index < ctoken.m_index);
81*16467b97STreehugger Robot}
82*16467b97STreehugger Robot
83*16467b97STreehugger Robottemplate<class ImplTraits>
84*16467b97STreehugger Robotbool CommonToken<ImplTraits>::operator==( const CommonToken& ctoken ) const
85*16467b97STreehugger Robot{
86*16467b97STreehugger Robot	return ( (m_type == ctoken.m_type) &&
87*16467b97STreehugger Robot		     (m_channel == ctoken.m_channel) &&
88*16467b97STreehugger Robot			 (m_lineStart == ctoken.m_lineStart) &&
89*16467b97STreehugger Robot			 (m_line == ctoken.m_line) &&
90*16467b97STreehugger Robot			 (m_charPositionInLine == ctoken.m_charPositionInLine) &&
91*16467b97STreehugger Robot			 (m_input == ctoken.m_input) &&
92*16467b97STreehugger Robot			 (m_index == ctoken.m_index) &&
93*16467b97STreehugger Robot			 (m_startIndex == ctoken.m_startIndex) &&
94*16467b97STreehugger Robot			 (m_stopIndex == ctoken.m_stopIndex) );
95*16467b97STreehugger Robot}
96*16467b97STreehugger Robot
97*16467b97STreehugger Robottemplate<class ImplTraits>
98*16467b97STreehugger RobotANTLR_INLINE typename CommonToken<ImplTraits>::InputStreamType* CommonToken<ImplTraits>::get_input() const
99*16467b97STreehugger Robot{
100*16467b97STreehugger Robot	return m_input;
101*16467b97STreehugger Robot}
102*16467b97STreehugger Robot
103*16467b97STreehugger Robottemplate<class ImplTraits>
104*16467b97STreehugger RobotANTLR_INLINE ANTLR_MARKER CommonToken<ImplTraits>::get_index() const
105*16467b97STreehugger Robot{
106*16467b97STreehugger Robot	return m_index;
107*16467b97STreehugger Robot}
108*16467b97STreehugger Robot
109*16467b97STreehugger Robottemplate<class ImplTraits>
110*16467b97STreehugger RobotANTLR_INLINE void CommonToken<ImplTraits>::set_index( ANTLR_MARKER index )
111*16467b97STreehugger Robot{
112*16467b97STreehugger Robot	m_index = index;
113*16467b97STreehugger Robot}
114*16467b97STreehugger Robot
115*16467b97STreehugger Robottemplate<class ImplTraits>
116*16467b97STreehugger Robotvoid CommonToken<ImplTraits>::set_input( InputStreamType* input )
117*16467b97STreehugger Robot{
118*16467b97STreehugger Robot	m_input = input;
119*16467b97STreehugger Robot}
120*16467b97STreehugger Robot
121*16467b97STreehugger Robottemplate<class ImplTraits>
122*16467b97STreehugger Robottypename CommonToken<ImplTraits>::StringType  CommonToken<ImplTraits>::getText() const
123*16467b97STreehugger Robot{
124*16467b97STreehugger Robot	if ( !m_tokText.empty() )
125*16467b97STreehugger Robot		return m_tokText;
126*16467b97STreehugger Robot
127*16467b97STreehugger Robot	// EOF is a special case
128*16467b97STreehugger Robot	//
129*16467b97STreehugger Robot	if ( m_type == TOKEN_EOF)
130*16467b97STreehugger Robot	{
131*16467b97STreehugger Robot		m_tokText	= "<EOF>";
132*16467b97STreehugger Robot		return m_tokText;
133*16467b97STreehugger Robot	}
134*16467b97STreehugger Robot
135*16467b97STreehugger Robot	// We had nothing installed in the token, create a new string
136*16467b97STreehugger Robot	// from the input stream
137*16467b97STreehugger Robot	//
138*16467b97STreehugger Robot	if	(m_input != NULL)
139*16467b97STreehugger Robot		return	m_input->substr(	this->get_startIndex(), this->get_stopIndex() );
140*16467b97STreehugger Robot
141*16467b97STreehugger Robot	// Nothing to return, there is no input stream
142*16467b97STreehugger Robot	//
143*16467b97STreehugger Robot	return "";
144*16467b97STreehugger Robot}
145*16467b97STreehugger Robot
146*16467b97STreehugger Robottemplate<class ImplTraits>
147*16467b97STreehugger RobotANTLR_INLINE void CommonToken<ImplTraits>::set_tokText( const StringType& text )
148*16467b97STreehugger Robot{
149*16467b97STreehugger Robot	m_tokText = text;
150*16467b97STreehugger Robot}
151*16467b97STreehugger Robot
152*16467b97STreehugger Robottemplate<class ImplTraits>
153*16467b97STreehugger RobotANTLR_INLINE void CommonToken<ImplTraits>::setText(ANTLR_UINT8* text)
154*16467b97STreehugger Robot{
155*16467b97STreehugger Robot	if( text == NULL )
156*16467b97STreehugger Robot		m_tokText.clear();
157*16467b97STreehugger Robot	else
158*16467b97STreehugger Robot		m_tokText = (const char*) text;
159*16467b97STreehugger Robot}
160*16467b97STreehugger Robot
161*16467b97STreehugger Robottemplate<class ImplTraits>
162*16467b97STreehugger RobotANTLR_INLINE void	CommonToken<ImplTraits>::setText(const char* text)
163*16467b97STreehugger Robot{
164*16467b97STreehugger Robot	if( text == NULL )
165*16467b97STreehugger Robot		m_tokText.clear();
166*16467b97STreehugger Robot	else
167*16467b97STreehugger Robot		m_tokText = (const char*) text;
168*16467b97STreehugger Robot}
169*16467b97STreehugger Robot
170*16467b97STreehugger Robottemplate<class ImplTraits>
171*16467b97STreehugger RobotANTLR_INLINE ANTLR_UINT32  CommonToken<ImplTraits>::get_type() const
172*16467b97STreehugger Robot{
173*16467b97STreehugger Robot	return m_type;
174*16467b97STreehugger Robot}
175*16467b97STreehugger Robot
176*16467b97STreehugger Robottemplate<class ImplTraits>
177*16467b97STreehugger RobotANTLR_INLINE ANTLR_UINT32  CommonToken<ImplTraits>::getType() const
178*16467b97STreehugger Robot{
179*16467b97STreehugger Robot	return m_type;
180*16467b97STreehugger Robot}
181*16467b97STreehugger Robot
182*16467b97STreehugger Robottemplate<class ImplTraits>
183*16467b97STreehugger RobotANTLR_INLINE void	CommonToken<ImplTraits>::set_type(ANTLR_UINT32 ttype)
184*16467b97STreehugger Robot{
185*16467b97STreehugger Robot	m_type = ttype;
186*16467b97STreehugger Robot}
187*16467b97STreehugger Robot
188*16467b97STreehugger Robottemplate<class ImplTraits>
189*16467b97STreehugger RobotANTLR_INLINE ANTLR_UINT32   CommonToken<ImplTraits>::get_line() const
190*16467b97STreehugger Robot{
191*16467b97STreehugger Robot	return m_line;
192*16467b97STreehugger Robot}
193*16467b97STreehugger Robot
194*16467b97STreehugger Robottemplate<class ImplTraits>
195*16467b97STreehugger RobotANTLR_INLINE void CommonToken<ImplTraits>::set_line(ANTLR_UINT32 line)
196*16467b97STreehugger Robot{
197*16467b97STreehugger Robot	m_line = line;
198*16467b97STreehugger Robot}
199*16467b97STreehugger Robot
200*16467b97STreehugger Robottemplate<class ImplTraits>
201*16467b97STreehugger RobotANTLR_INLINE ANTLR_INT32  CommonToken<ImplTraits>::get_charPositionInLine() const
202*16467b97STreehugger Robot{
203*16467b97STreehugger Robot	return m_charPositionInLine;
204*16467b97STreehugger Robot}
205*16467b97STreehugger Robot
206*16467b97STreehugger Robottemplate<class ImplTraits>
207*16467b97STreehugger RobotANTLR_INLINE ANTLR_INT32  CommonToken<ImplTraits>::getCharPositionInLine() const
208*16467b97STreehugger Robot{
209*16467b97STreehugger Robot	return this->get_charPositionInLine();
210*16467b97STreehugger Robot}
211*16467b97STreehugger Robot
212*16467b97STreehugger Robottemplate<class ImplTraits>
213*16467b97STreehugger RobotANTLR_INLINE void	CommonToken<ImplTraits>::set_charPositionInLine(ANTLR_INT32 pos)
214*16467b97STreehugger Robot{
215*16467b97STreehugger Robot	m_charPositionInLine = pos;
216*16467b97STreehugger Robot}
217*16467b97STreehugger Robot
218*16467b97STreehugger Robottemplate<class ImplTraits>
219*16467b97STreehugger RobotANTLR_INLINE ANTLR_UINT32   CommonToken<ImplTraits>::get_channel() const
220*16467b97STreehugger Robot{
221*16467b97STreehugger Robot	return m_channel;
222*16467b97STreehugger Robot}
223*16467b97STreehugger Robot
224*16467b97STreehugger Robottemplate<class ImplTraits>
225*16467b97STreehugger RobotANTLR_INLINE void CommonToken<ImplTraits>::set_channel(ANTLR_UINT32 channel)
226*16467b97STreehugger Robot{
227*16467b97STreehugger Robot	m_channel = channel;
228*16467b97STreehugger Robot}
229*16467b97STreehugger Robot
230*16467b97STreehugger Robottemplate<class ImplTraits>
231*16467b97STreehugger RobotANTLR_INLINE ANTLR_MARKER  CommonToken<ImplTraits>::get_tokenIndex() const
232*16467b97STreehugger Robot{
233*16467b97STreehugger Robot	return m_index;
234*16467b97STreehugger Robot}
235*16467b97STreehugger Robot
236*16467b97STreehugger Robottemplate<class ImplTraits>
237*16467b97STreehugger RobotANTLR_INLINE void	CommonToken<ImplTraits>::set_tokenIndex(ANTLR_MARKER tokenIndex)
238*16467b97STreehugger Robot{
239*16467b97STreehugger Robot	m_index = tokenIndex;
240*16467b97STreehugger Robot}
241*16467b97STreehugger Robot
242*16467b97STreehugger Robottemplate<class ImplTraits>
243*16467b97STreehugger RobotANTLR_INLINE ANTLR_MARKER   CommonToken<ImplTraits>::get_startIndex() const
244*16467b97STreehugger Robot{
245*16467b97STreehugger Robot	return (m_startIndex == -1) ? (ANTLR_MARKER)(m_input->get_data()) : m_startIndex;
246*16467b97STreehugger Robot}
247*16467b97STreehugger Robot
248*16467b97STreehugger Robottemplate<class ImplTraits>
249*16467b97STreehugger RobotANTLR_INLINE void	CommonToken<ImplTraits>::set_startIndex(ANTLR_MARKER index)
250*16467b97STreehugger Robot{
251*16467b97STreehugger Robot	m_startIndex = index;
252*16467b97STreehugger Robot}
253*16467b97STreehugger Robot
254*16467b97STreehugger Robottemplate<class ImplTraits>
255*16467b97STreehugger RobotANTLR_INLINE ANTLR_MARKER  CommonToken<ImplTraits>::get_stopIndex() const
256*16467b97STreehugger Robot{
257*16467b97STreehugger Robot	return m_stopIndex;
258*16467b97STreehugger Robot}
259*16467b97STreehugger Robot
260*16467b97STreehugger Robottemplate<class ImplTraits>
261*16467b97STreehugger RobotANTLR_INLINE void	CommonToken<ImplTraits>::set_stopIndex(ANTLR_MARKER index)
262*16467b97STreehugger Robot{
263*16467b97STreehugger Robot	m_stopIndex = index;
264*16467b97STreehugger Robot}
265*16467b97STreehugger Robot
266*16467b97STreehugger Robottemplate<class ImplTraits>
267*16467b97STreehugger RobotANTLR_INLINE const typename CommonToken<ImplTraits>::StreamDataType* CommonToken<ImplTraits>::get_lineStart() const
268*16467b97STreehugger Robot{
269*16467b97STreehugger Robot	return m_lineStart;
270*16467b97STreehugger Robot}
271*16467b97STreehugger Robot
272*16467b97STreehugger Robottemplate<class ImplTraits>
273*16467b97STreehugger RobotANTLR_INLINE void	CommonToken<ImplTraits>::set_lineStart( const StreamDataType* lineStart )
274*16467b97STreehugger Robot{
275*16467b97STreehugger Robot	m_lineStart = lineStart;
276*16467b97STreehugger Robot}
277*16467b97STreehugger Robot
278*16467b97STreehugger Robottemplate<class ImplTraits>
279*16467b97STreehugger Robottypename CommonToken<ImplTraits>::StringType  CommonToken<ImplTraits>::toString() const
280*16467b97STreehugger Robot{
281*16467b97STreehugger Robot    StringType  text;
282*16467b97STreehugger Robot    typedef typename ImplTraits::StringStreamType StringStreamType;
283*16467b97STreehugger Robot    StringStreamType  outtext;
284*16467b97STreehugger Robot
285*16467b97STreehugger Robot    text    =	this->getText();
286*16467b97STreehugger Robot
287*16467b97STreehugger Robot    if	(text.empty())
288*16467b97STreehugger Robot		return "";
289*16467b97STreehugger Robot
290*16467b97STreehugger Robot    /* Now we use our handy dandy string utility to assemble the
291*16467b97STreehugger Robot     * the reporting string
292*16467b97STreehugger Robot     * return "[@"+getTokenIndex()+","+start+":"+stop+"='"+txt+"',<"+type+">"+channelStr+","+line+":"+getCharPositionInLine()+"]";
293*16467b97STreehugger Robot     */
294*16467b97STreehugger Robot    outtext << "[Index: ";
295*16467b97STreehugger Robot    outtext << (int)this->get_tokenIndex();
296*16467b97STreehugger Robot    outtext << " (Start: ";
297*16467b97STreehugger Robot    outtext << (int)this->get_startIndex();
298*16467b97STreehugger Robot    outtext << "-Stop: ";
299*16467b97STreehugger Robot    outtext << (int)this->get_stopIndex();
300*16467b97STreehugger Robot    outtext << ") ='";
301*16467b97STreehugger Robot    outtext << text;
302*16467b97STreehugger Robot    outtext << "', type<";
303*16467b97STreehugger Robot    outtext << (int)m_type;
304*16467b97STreehugger Robot    outtext << "> ";
305*16467b97STreehugger Robot
306*16467b97STreehugger Robot    if	(this->get_channel() > TOKEN_DEFAULT_CHANNEL)
307*16467b97STreehugger Robot    {
308*16467b97STreehugger Robot		outtext << "(channel = ";
309*16467b97STreehugger Robot		outtext << (int)this->get_channel();
310*16467b97STreehugger Robot		outtext << ") ";
311*16467b97STreehugger Robot    }
312*16467b97STreehugger Robot
313*16467b97STreehugger Robot    outtext << "Line: ";
314*16467b97STreehugger Robot    outtext << (int)this->get_line();
315*16467b97STreehugger Robot    outtext << " LinePos:";
316*16467b97STreehugger Robot    outtext << (int)this->get_charPositionInLine();
317*16467b97STreehugger Robot    outtext << "]";
318*16467b97STreehugger Robot
319*16467b97STreehugger Robot    return  outtext.str();
320*16467b97STreehugger Robot}
321*16467b97STreehugger Robot
322*16467b97STreehugger RobotANTLR_END_NAMESPACE()
323