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