diff --git a/runtime/CSharp/runtime/CSharp/Antlr4.Runtime/Lexer.cs b/runtime/CSharp/runtime/CSharp/Antlr4.Runtime/Lexer.cs
index 1db58e612..f9b2d2125 100644
--- a/runtime/CSharp/runtime/CSharp/Antlr4.Runtime/Lexer.cs
+++ b/runtime/CSharp/runtime/CSharp/Antlr4.Runtime/Lexer.cs
@@ -502,7 +502,7 @@ outer_continue: ;
}
}
- public virtual string[] ModeNames
+ public virtual string[] ChannelNames
{
get
{
@@ -510,6 +510,13 @@ outer_continue: ;
}
}
+ public virtual string[] ModeNames
+ {
+ get
+ {
+ return null;
+ }
+ }
/// Return a list of all Token objects in input char stream.
///
diff --git a/runtime/Cpp/runtime/src/Lexer.h b/runtime/Cpp/runtime/src/Lexer.h
index 077ca1968..b25afe7f9 100755
--- a/runtime/Cpp/runtime/src/Lexer.h
+++ b/runtime/Cpp/runtime/src/Lexer.h
@@ -156,6 +156,8 @@ namespace antlr4 {
virtual size_t getChannel();
+ virtual const std::vector& getChannelNames() const = 0;
+
virtual const std::vector& getModeNames() const = 0;
/// Return a list of all Token objects in input char stream.
diff --git a/runtime/Java/src/org/antlr/v4/runtime/Lexer.java b/runtime/Java/src/org/antlr/v4/runtime/Lexer.java
index bb082aa20..01d4c86a7 100644
--- a/runtime/Java/src/org/antlr/v4/runtime/Lexer.java
+++ b/runtime/Java/src/org/antlr/v4/runtime/Lexer.java
@@ -320,6 +320,8 @@ public abstract class Lexer extends Recognizer
return _channel;
}
+ public String[] getChannelNames() { return null; }
+
public String[] getModeNames() {
return null;
}
diff --git a/runtime/Swift/Sources/Antlr4/Lexer.swift b/runtime/Swift/Sources/Antlr4/Lexer.swift
index c23fde56f..0c5da9110 100644
--- a/runtime/Swift/Sources/Antlr4/Lexer.swift
+++ b/runtime/Swift/Sources/Antlr4/Lexer.swift
@@ -331,6 +331,10 @@ open class Lexer: Recognizer
return _channel
}
+ open func getChannelNames() -> [String]? {
+ return nil
+ }
+
open func getModeNames() -> [String]? {
return nil
}
diff --git a/tool/resources/org/antlr/v4/tool/templates/codegen/CSharp/CSharp.stg b/tool/resources/org/antlr/v4/tool/templates/codegen/CSharp/CSharp.stg
index 2dff6ba02..022d5a065 100644
--- a/tool/resources/org/antlr/v4/tool/templates/codegen/CSharp/CSharp.stg
+++ b/tool/resources/org/antlr/v4/tool/templates/codegen/CSharp/CSharp.stg
@@ -983,6 +983,11 @@ public partial class : {
=}; separator=", ", wrap, anchor>;
= ;}; separator="\n">
+
+ public static string[] channelNames = {
+ "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "}; separator=", ", wrap, anchor>
+ };
+
public static string[] modeNames = {
"}; separator=", ", wrap, anchor>
};
@@ -1005,6 +1010,8 @@ public partial class : {
public override string[] RuleNames { get { return ruleNames; } }
+ public override string[] ChannelNames { get { return channelNames; } }
+
public override string[] ModeNames { get { return modeNames; } }
public override string SerializedAtn { get { return _serializedATN; } }
diff --git a/tool/resources/org/antlr/v4/tool/templates/codegen/Cpp/Cpp.stg b/tool/resources/org/antlr/v4/tool/templates/codegen/Cpp/Cpp.stg
index 84c571cba..970251466 100644
--- a/tool/resources/org/antlr/v4/tool/templates/codegen/Cpp/Cpp.stg
+++ b/tool/resources/org/antlr/v4/tool/templates/codegen/Cpp/Cpp.stg
@@ -70,6 +70,7 @@ public:
virtual std::string getGrammarFileName() const override;
virtual const std::vector\& getRuleNames() const override;
+ virtual const std::vector\& getChannelNames() const override;
virtual const std::vector\& getModeNames() const override;
virtual const std::vector\& getTokenNames() const override; // deprecated, use vocabulary instead
virtual antlr4::dfa::Vocabulary& getVocabulary() const override;
@@ -89,6 +90,7 @@ private:
static antlr4::atn::PredictionContextCache _sharedContextCache;
static std::vector\ _ruleNames;
static std::vector\ _tokenNames;
+ static std::vector\ _channelNames;
static std::vector\ _modeNames;
static std::vector\ _literalNames;
@@ -128,6 +130,10 @@ const std::vector\& ::getRuleNames() const {
return _ruleNames;
}
+const std::vector\& ::getChannelNames() const {
+ return _channelNames;
+}
+
const std::vector\& ::getModeNames() const {
return _modeNames;
}
@@ -189,6 +195,10 @@ std::vector\ ::_ruleNames = {
"}; separator = ", ", wrap, anchor>
};
+std::vector\ ::_channelNames = {
+ "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "}; separator = ", ", wrap, anchor>
+};
+
std::vector\ ::_modeNames = {
"}; separator = ", ", wrap, anchor>
};
diff --git a/tool/resources/org/antlr/v4/tool/templates/codegen/Go/Go.stg b/tool/resources/org/antlr/v4/tool/templates/codegen/Go/Go.stg
index 1fb7cb71b..8d1b3a23c 100644
--- a/tool/resources/org/antlr/v4/tool/templates/codegen/Go/Go.stg
+++ b/tool/resources/org/antlr/v4/tool/templates/codegen/Go/Go.stg
@@ -1379,6 +1379,14 @@ var serializedLexerAtn []uint16
var lexerDeserializer = antlr.NewATNDeserializer(nil)
var lexerAtn = lexerDeserializer.DeserializeFromUInt16(serializedLexerAtn)
+
+var lexerChannelNames = []string{
+ "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "}; separator=", ", wrap>,
+}
+
+var lexerChannelNames []string
+
+
var lexerModeNames = []string{
"}; separator=", ", wrap>,
@@ -1387,7 +1395,6 @@ var lexerModeNames = []string{
var lexerModeNames []string
-
var lexerLiteralNames = []string{
,
@@ -1417,6 +1424,7 @@ var lexerRuleNames []string
type struct {
*antlr.BaseLexer
+ channelNames []string
modeNames []string
// TODO: EOF string
}
@@ -1433,6 +1441,7 @@ func New(input antlr.CharStream) * {
l.BaseLexer = antlr.NewBaseLexer(input)
l.Interpreter = antlr.NewLexerATNSimulator(l, lexerAtn, lexerDecisionToDFA, antlr.NewPredictionContextCache())
+ l.channelNames = lexerChannelNames
l.modeNames = lexerModeNames
l.RuleNames = lexerRuleNames
l.LiteralNames = lexerLiteralNames
diff --git a/tool/resources/org/antlr/v4/tool/templates/codegen/Java/Java.stg b/tool/resources/org/antlr/v4/tool/templates/codegen/Java/Java.stg
index d971e65e1..e7337af02 100644
--- a/tool/resources/org/antlr/v4/tool/templates/codegen/Java/Java.stg
+++ b/tool/resources/org/antlr/v4/tool/templates/codegen/Java/Java.stg
@@ -901,6 +901,11 @@ public class extends {
=}; separator=", ", wrap, anchor>;
= ;}; separator="\n">
+
+ public static String[] channelNames = {
+ "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "}; separator=", ", wrap, anchor>
+ };
+
public static String[] modeNames = {
"}; separator=", ", wrap, anchor>
};
@@ -927,6 +932,9 @@ public class extends {
@Override
public String getSerializedATN() { return _serializedATN; }
+ @Override
+ public String[] getChannelNames() { return channelNames; }
+
@Override
public String[] getModeNames() { return modeNames; }
diff --git a/tool/resources/org/antlr/v4/tool/templates/codegen/JavaScript/JavaScript.stg b/tool/resources/org/antlr/v4/tool/templates/codegen/JavaScript/JavaScript.stg
index 3f368bf92..669e7d19c 100644
--- a/tool/resources/org/antlr/v4/tool/templates/codegen/JavaScript/JavaScript.stg
+++ b/tool/resources/org/antlr/v4/tool/templates/codegen/JavaScript/JavaScript.stg
@@ -823,6 +823,8 @@ function (input) {
. = ;}; separator="\n">
+.prototype.channelNames = [ "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "}; separator=", ", wrap, anchor> ];
+
.prototype.modeNames = [ "}; separator=", ", wrap, anchor> ];
.prototype.literalNames = [ }; null="null", separator=", ", wrap, anchor> ];
diff --git a/tool/resources/org/antlr/v4/tool/templates/codegen/Python2/Python2.stg b/tool/resources/org/antlr/v4/tool/templates/codegen/Python2/Python2.stg
index 0d341601e..56dda5b7c 100644
--- a/tool/resources/org/antlr/v4/tool/templates/codegen/Python2/Python2.stg
+++ b/tool/resources/org/antlr/v4/tool/templates/codegen/Python2/Python2.stg
@@ -760,6 +760,8 @@ class (Lexer):
= }; separator="\n", wrap, anchor>
+ channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN", "}; separator=", ", wrap, anchor> ]
+
modeNames = [ "}; separator=", ", wrap, anchor> ]
literalNames = [ u"\",
diff --git a/tool/resources/org/antlr/v4/tool/templates/codegen/Python3/Python3.stg b/tool/resources/org/antlr/v4/tool/templates/codegen/Python3/Python3.stg
index 65a5b390e..87ce648cd 100644
--- a/tool/resources/org/antlr/v4/tool/templates/codegen/Python3/Python3.stg
+++ b/tool/resources/org/antlr/v4/tool/templates/codegen/Python3/Python3.stg
@@ -765,6 +765,8 @@ class (Lexer):
= }; separator="\n", wrap, anchor>
+ channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN", "}; separator=", ", wrap, anchor> ]
+
modeNames = [ "}; separator=", ", wrap, anchor> ]
literalNames = [ "\",
diff --git a/tool/resources/org/antlr/v4/tool/templates/codegen/Swift/Swift.stg b/tool/resources/org/antlr/v4/tool/templates/codegen/Swift/Swift.stg
index 64aa3e9c1..2cc1fbfe9 100755
--- a/tool/resources/org/antlr/v4/tool/templates/codegen/Swift/Swift.stg
+++ b/tool/resources/org/antlr/v4/tool/templates/codegen/Swift/Swift.stg
@@ -962,9 +962,14 @@ open class : {
internal static let _sharedContextCache:PredictionContextCache = PredictionContextCache()
public static let =}; separator=", ", wrap, anchor>
- public let =}; separator=", ", wrap, anchor>
+ public static let =}; separator=", ", wrap, anchor>
: Int = ;}; separator="\n">
+
+ public static let channelNames: [String] = [
+ "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "}; separator=", ", wrap, anchor>
+ ]
+
public static let modeNames: [String] = [
"}; separator=", ", wrap, anchor>
]
@@ -995,6 +1000,9 @@ open class : {
override
open func getSerializedATN() -> String { return ._serializedATN }
+ override
+ open func getChannelNames() -> [String] { return .channelNames }
+
override
open func getModeNames() -> [String] { return .modeNames }