You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
323 lines
7.3 KiB
323 lines
7.3 KiB
ANTLR_BEGIN_NAMESPACE()
|
|
|
|
template<class ImplTraits>
|
|
CommonToken<ImplTraits>::CommonToken()
|
|
{
|
|
m_type = 0;
|
|
m_channel = 0;
|
|
m_lineStart = NULL;
|
|
m_line = 0;
|
|
m_charPositionInLine = 0;
|
|
m_input = NULL;
|
|
m_index = 0;
|
|
m_startIndex = 0;
|
|
m_stopIndex = 0;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
CommonToken<ImplTraits>::CommonToken(ANTLR_UINT32 type)
|
|
{
|
|
m_type = type;
|
|
m_channel = 0;
|
|
m_lineStart = NULL;
|
|
m_line = 0;
|
|
m_charPositionInLine = 0;
|
|
m_input = NULL;
|
|
m_index = 0;
|
|
m_startIndex = 0;
|
|
m_stopIndex = 0;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
CommonToken<ImplTraits>::CommonToken(TOKEN_TYPE type)
|
|
{
|
|
m_type = type;
|
|
m_channel = 0;
|
|
m_lineStart = NULL;
|
|
m_line = 0;
|
|
m_charPositionInLine = 0;
|
|
m_input = NULL;
|
|
m_index = 0;
|
|
m_startIndex = 0;
|
|
m_stopIndex = 0;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
CommonToken<ImplTraits>::CommonToken( const CommonToken& ctoken )
|
|
:m_tokText( ctoken.m_tokText )
|
|
{
|
|
m_type = ctoken.m_type;
|
|
m_channel = ctoken.m_channel;
|
|
m_lineStart = ctoken.m_lineStart;
|
|
m_line = ctoken.m_line;
|
|
m_charPositionInLine = ctoken.m_charPositionInLine;
|
|
m_input = ctoken.m_input;
|
|
m_index = ctoken.m_index;
|
|
m_startIndex = ctoken.m_startIndex;
|
|
m_stopIndex = ctoken.m_stopIndex;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
CommonToken<ImplTraits>& CommonToken<ImplTraits>::operator=( const CommonToken& ctoken )
|
|
{
|
|
m_type = ctoken.m_type;
|
|
m_channel = ctoken.m_channel;
|
|
m_lineStart = ctoken.m_lineStart;
|
|
m_line = ctoken.m_line;
|
|
m_charPositionInLine = ctoken.m_charPositionInLine;
|
|
m_input = ctoken.m_input;
|
|
m_index = ctoken.m_index;
|
|
m_startIndex = ctoken.m_startIndex;
|
|
m_stopIndex = ctoken.m_stopIndex;
|
|
|
|
m_tokText = ctoken.m_tokText;
|
|
return *this;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE bool CommonToken<ImplTraits>::operator<( const CommonToken& ctoken ) const
|
|
{
|
|
return (m_index < ctoken.m_index);
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
bool CommonToken<ImplTraits>::operator==( const CommonToken& ctoken ) const
|
|
{
|
|
return ( (m_type == ctoken.m_type) &&
|
|
(m_channel == ctoken.m_channel) &&
|
|
(m_lineStart == ctoken.m_lineStart) &&
|
|
(m_line == ctoken.m_line) &&
|
|
(m_charPositionInLine == ctoken.m_charPositionInLine) &&
|
|
(m_input == ctoken.m_input) &&
|
|
(m_index == ctoken.m_index) &&
|
|
(m_startIndex == ctoken.m_startIndex) &&
|
|
(m_stopIndex == ctoken.m_stopIndex) );
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE typename CommonToken<ImplTraits>::InputStreamType* CommonToken<ImplTraits>::get_input() const
|
|
{
|
|
return m_input;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE ANTLR_MARKER CommonToken<ImplTraits>::get_index() const
|
|
{
|
|
return m_index;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE void CommonToken<ImplTraits>::set_index( ANTLR_MARKER index )
|
|
{
|
|
m_index = index;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
void CommonToken<ImplTraits>::set_input( InputStreamType* input )
|
|
{
|
|
m_input = input;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
typename CommonToken<ImplTraits>::StringType CommonToken<ImplTraits>::getText() const
|
|
{
|
|
if ( !m_tokText.empty() )
|
|
return m_tokText;
|
|
|
|
// EOF is a special case
|
|
//
|
|
if ( m_type == TOKEN_EOF)
|
|
{
|
|
m_tokText = "<EOF>";
|
|
return m_tokText;
|
|
}
|
|
|
|
// We had nothing installed in the token, create a new string
|
|
// from the input stream
|
|
//
|
|
if (m_input != NULL)
|
|
return m_input->substr( this->get_startIndex(), this->get_stopIndex() );
|
|
|
|
// Nothing to return, there is no input stream
|
|
//
|
|
return "";
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE void CommonToken<ImplTraits>::set_tokText( const StringType& text )
|
|
{
|
|
m_tokText = text;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE void CommonToken<ImplTraits>::setText(ANTLR_UINT8* text)
|
|
{
|
|
if( text == NULL )
|
|
m_tokText.clear();
|
|
else
|
|
m_tokText = (const char*) text;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE void CommonToken<ImplTraits>::setText(const char* text)
|
|
{
|
|
if( text == NULL )
|
|
m_tokText.clear();
|
|
else
|
|
m_tokText = (const char*) text;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE ANTLR_UINT32 CommonToken<ImplTraits>::get_type() const
|
|
{
|
|
return m_type;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE ANTLR_UINT32 CommonToken<ImplTraits>::getType() const
|
|
{
|
|
return m_type;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE void CommonToken<ImplTraits>::set_type(ANTLR_UINT32 ttype)
|
|
{
|
|
m_type = ttype;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE ANTLR_UINT32 CommonToken<ImplTraits>::get_line() const
|
|
{
|
|
return m_line;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE void CommonToken<ImplTraits>::set_line(ANTLR_UINT32 line)
|
|
{
|
|
m_line = line;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE ANTLR_INT32 CommonToken<ImplTraits>::get_charPositionInLine() const
|
|
{
|
|
return m_charPositionInLine;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE ANTLR_INT32 CommonToken<ImplTraits>::getCharPositionInLine() const
|
|
{
|
|
return this->get_charPositionInLine();
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE void CommonToken<ImplTraits>::set_charPositionInLine(ANTLR_INT32 pos)
|
|
{
|
|
m_charPositionInLine = pos;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE ANTLR_UINT32 CommonToken<ImplTraits>::get_channel() const
|
|
{
|
|
return m_channel;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE void CommonToken<ImplTraits>::set_channel(ANTLR_UINT32 channel)
|
|
{
|
|
m_channel = channel;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE ANTLR_MARKER CommonToken<ImplTraits>::get_tokenIndex() const
|
|
{
|
|
return m_index;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE void CommonToken<ImplTraits>::set_tokenIndex(ANTLR_MARKER tokenIndex)
|
|
{
|
|
m_index = tokenIndex;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE ANTLR_MARKER CommonToken<ImplTraits>::get_startIndex() const
|
|
{
|
|
return (m_startIndex == -1) ? (ANTLR_MARKER)(m_input->get_data()) : m_startIndex;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE void CommonToken<ImplTraits>::set_startIndex(ANTLR_MARKER index)
|
|
{
|
|
m_startIndex = index;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE ANTLR_MARKER CommonToken<ImplTraits>::get_stopIndex() const
|
|
{
|
|
return m_stopIndex;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE void CommonToken<ImplTraits>::set_stopIndex(ANTLR_MARKER index)
|
|
{
|
|
m_stopIndex = index;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE const typename CommonToken<ImplTraits>::StreamDataType* CommonToken<ImplTraits>::get_lineStart() const
|
|
{
|
|
return m_lineStart;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
ANTLR_INLINE void CommonToken<ImplTraits>::set_lineStart( const StreamDataType* lineStart )
|
|
{
|
|
m_lineStart = lineStart;
|
|
}
|
|
|
|
template<class ImplTraits>
|
|
typename CommonToken<ImplTraits>::StringType CommonToken<ImplTraits>::toString() const
|
|
{
|
|
StringType text;
|
|
typedef typename ImplTraits::StringStreamType StringStreamType;
|
|
StringStreamType outtext;
|
|
|
|
text = this->getText();
|
|
|
|
if (text.empty())
|
|
return "";
|
|
|
|
/* Now we use our handy dandy string utility to assemble the
|
|
* the reporting string
|
|
* return "[@"+getTokenIndex()+","+start+":"+stop+"='"+txt+"',<"+type+">"+channelStr+","+line+":"+getCharPositionInLine()+"]";
|
|
*/
|
|
outtext << "[Index: ";
|
|
outtext << (int)this->get_tokenIndex();
|
|
outtext << " (Start: ";
|
|
outtext << (int)this->get_startIndex();
|
|
outtext << "-Stop: ";
|
|
outtext << (int)this->get_stopIndex();
|
|
outtext << ") ='";
|
|
outtext << text;
|
|
outtext << "', type<";
|
|
outtext << (int)m_type;
|
|
outtext << "> ";
|
|
|
|
if (this->get_channel() > TOKEN_DEFAULT_CHANNEL)
|
|
{
|
|
outtext << "(channel = ";
|
|
outtext << (int)this->get_channel();
|
|
outtext << ") ";
|
|
}
|
|
|
|
outtext << "Line: ";
|
|
outtext << (int)this->get_line();
|
|
outtext << " LinePos:";
|
|
outtext << (int)this->get_charPositionInLine();
|
|
outtext << "]";
|
|
|
|
return outtext.str();
|
|
}
|
|
|
|
ANTLR_END_NAMESPACE()
|