Implemented enhanced CommonToken::toString method. Fixes #1483.
This commit is contained in:
parent
50df59fea8
commit
3b5c2a34d2
|
@ -3,10 +3,14 @@
|
||||||
* can be found in the LICENSE.txt file in the project root.
|
* can be found in the LICENSE.txt file in the project root.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "misc/Interval.h"
|
|
||||||
#include "TokenSource.h"
|
#include "TokenSource.h"
|
||||||
#include "support/StringUtils.h"
|
|
||||||
#include "CharStream.h"
|
#include "CharStream.h"
|
||||||
|
#include "Recognizer.h"
|
||||||
|
#include "Vocabulary.h"
|
||||||
|
|
||||||
|
#include "misc/Interval.h"
|
||||||
|
|
||||||
|
#include "support/StringUtils.h"
|
||||||
#include "support/CPPUtils.h"
|
#include "support/CPPUtils.h"
|
||||||
|
|
||||||
#include "CommonToken.h"
|
#include "CommonToken.h"
|
||||||
|
@ -149,6 +153,10 @@ antlr4::CharStream *CommonToken::getInputStream() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CommonToken::toString() const {
|
std::string CommonToken::toString() const {
|
||||||
|
return toString(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CommonToken::toString(Recognizer *r) const {
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
|
|
||||||
std::string channelStr;
|
std::string channelStr;
|
||||||
|
@ -164,8 +172,12 @@ std::string CommonToken::toString() const {
|
||||||
txt = "<no text>";
|
txt = "<no text>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string typeString = std::to_string(symbolToNumeric(_type));
|
||||||
|
if (r != nullptr)
|
||||||
|
typeString = r->getVocabulary().getDisplayName(_type);
|
||||||
|
|
||||||
ss << "[@" << symbolToNumeric(getTokenIndex()) << "," << symbolToNumeric(_start) << ":" << symbolToNumeric(_stop)
|
ss << "[@" << symbolToNumeric(getTokenIndex()) << "," << symbolToNumeric(_start) << ":" << symbolToNumeric(_stop)
|
||||||
<< "='" << txt << "',<" << symbolToNumeric(_type) << ">" << channelStr << "," << _line << ":"
|
<< "='" << txt << "',<" << typeString << ">" << channelStr << "," << _line << ":"
|
||||||
<< getCharPositionInLine() << "]";
|
<< getCharPositionInLine() << "]";
|
||||||
|
|
||||||
return ss.str();
|
return ss.str();
|
||||||
|
|
|
@ -150,6 +150,7 @@ namespace antlr4 {
|
||||||
|
|
||||||
virtual std::string toString() const override;
|
virtual std::string toString() const override;
|
||||||
|
|
||||||
|
virtual std::string toString(Recognizer *r) const;
|
||||||
private:
|
private:
|
||||||
void InitializeInstanceFields();
|
void InitializeInstanceFields();
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "antlr4-common.h"
|
||||||
|
|
||||||
namespace antlr4 {
|
namespace antlr4 {
|
||||||
|
|
||||||
/// The default mechanism for creating tokens. It's used by default in Lexer and
|
/// The default mechanism for creating tokens. It's used by default in Lexer and
|
||||||
|
|
|
@ -11,7 +11,7 @@ namespace antlr4 {
|
||||||
namespace misc {
|
namespace misc {
|
||||||
|
|
||||||
// Helpers to convert certain unsigned symbols (e.g. Token::EOF) to their original numeric value (e.g. -1)
|
// Helpers to convert certain unsigned symbols (e.g. Token::EOF) to their original numeric value (e.g. -1)
|
||||||
// and vice version. This is needed mostly for intervals to keep their original order and for toString()
|
// and vice versa. This is needed mostly for intervals to keep their original order and for toString()
|
||||||
// methods to print the original numeric value (e.g. for tests).
|
// methods to print the original numeric value (e.g. for tests).
|
||||||
size_t numericToSymbol(ssize_t v);
|
size_t numericToSymbol(ssize_t v);
|
||||||
ssize_t symbolToNumeric(size_t v);
|
ssize_t symbolToNumeric(size_t v);
|
||||||
|
|
Loading…
Reference in New Issue