Merge branch 'master' into master

This commit is contained in:
Terence Parr 2020-09-10 12:56:08 -07:00 committed by GitHub
commit 168882d942
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 62 additions and 33 deletions

View File

@ -251,4 +251,7 @@ YYYY/MM/DD, github id, Full name, email
2020/05/25, graknol, Sindre van der Linden, graknol@gmail.com 2020/05/25, graknol, Sindre van der Linden, graknol@gmail.com
2020/05/31, d-markey, David Markey, dmarkey@free.fr 2020/05/31, d-markey, David Markey, dmarkey@free.fr
2020/06/02, cohomology, Kilian Kilger, kkilger AT gmail.com 2020/06/02, cohomology, Kilian Kilger, kkilger AT gmail.com
2020/07/01, sha-N, Shan M Mathews, admin@bluestarqatar.com 2020/06/04, IohannRabeson, Iohann Rabeson, iotaka6@gmail.com
2020/07/01, sha-N, Shan M Mathews, admin@bluestarqatar.com
2020/08/22, stevenjohnstone, Steven Johnstone, steven.james.johnstone@gmail.com
2020/09/06, ArthurSonzogni, Sonzogni Arthur, arthursonzogni@gmail.com

View File

@ -65,7 +65,7 @@ int main(int argc, const char* argv[]) {
tree::ParseTree *tree = parser.key(); tree::ParseTree *tree = parser.key();
TreeShapeListener listener; TreeShapeListener listener;
tree::ParseTreeWalker::DEFAULT->walk(&listener, tree); tree::ParseTreeWalker::DEFAULT.walk(&listener, tree);
return 0; return 0;
} }

View File

@ -19,7 +19,7 @@ if(NOT WITH_DEMO)
FORCE) FORCE)
endif(NOT WITH_DEMO) endif(NOT WITH_DEMO)
option(WITH_LIBCXX "Building with clang++ and libc++(in Linux). To enable with: -DWITH_LIBCXX=On" On) option(WITH_LIBCXX "Building with clang++ and libc++(in Linux). To enable with: -DWITH_LIBCXX=On" Off)
option(WITH_STATIC_CRT "(Visual C++) Enable to statically link CRT, which avoids requiring users to install the redistribution package. option(WITH_STATIC_CRT "(Visual C++) Enable to statically link CRT, which avoids requiring users to install the redistribution package.
To disable with: -DWITH_STATIC_CRT=Off" On) To disable with: -DWITH_STATIC_CRT=Off" On)

View File

@ -182,6 +182,7 @@
<DisableSpecificWarnings>4251</DisableSpecificWarnings> <DisableSpecificWarnings>4251</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild> <MinimalRebuild>false</MinimalRebuild>
<AdditionalOptions>/Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
@ -201,6 +202,7 @@
<DisableSpecificWarnings>4251</DisableSpecificWarnings> <DisableSpecificWarnings>4251</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild> <MinimalRebuild>false</MinimalRebuild>
<AdditionalOptions>/Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
@ -220,6 +222,7 @@
<DisableSpecificWarnings>4251</DisableSpecificWarnings> <DisableSpecificWarnings>4251</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild> <MinimalRebuild>false</MinimalRebuild>
<AdditionalOptions>/Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
@ -239,6 +242,7 @@
<DisableSpecificWarnings>4251</DisableSpecificWarnings> <DisableSpecificWarnings>4251</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild> <MinimalRebuild>false</MinimalRebuild>
<AdditionalOptions>/Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
@ -259,6 +263,7 @@
</ForcedIncludeFiles> </ForcedIncludeFiles>
<DisableSpecificWarnings>4251</DisableSpecificWarnings> <DisableSpecificWarnings>4251</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
<AdditionalOptions>/Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
@ -281,6 +286,7 @@
</ForcedIncludeFiles> </ForcedIncludeFiles>
<DisableSpecificWarnings>4251</DisableSpecificWarnings> <DisableSpecificWarnings>4251</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
<AdditionalOptions>/Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
@ -303,6 +309,7 @@
</ForcedIncludeFiles> </ForcedIncludeFiles>
<DisableSpecificWarnings>4251</DisableSpecificWarnings> <DisableSpecificWarnings>4251</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
<AdditionalOptions>/Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
@ -325,6 +332,7 @@
</ForcedIncludeFiles> </ForcedIncludeFiles>
<DisableSpecificWarnings>4251</DisableSpecificWarnings> <DisableSpecificWarnings>4251</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
<AdditionalOptions>/Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>

View File

@ -17,7 +17,11 @@ using namespace antlrcpp;
using misc::Interval; using misc::Interval;
#if __cplusplus >= 201703L
ANTLRInputStream::ANTLRInputStream(std::string_view input) {
#else
ANTLRInputStream::ANTLRInputStream(const std::string &input) { ANTLRInputStream::ANTLRInputStream(const std::string &input) {
#endif
InitializeInstanceFields(); InitializeInstanceFields();
load(input); load(input);
} }
@ -31,6 +35,16 @@ ANTLRInputStream::ANTLRInputStream(std::istream &stream) {
load(stream); load(stream);
} }
#if __cplusplus >= 201703L
void ANTLRInputStream::load(std::string_view input) {
// Remove the UTF-8 BOM if present.
constexpr std::string_view bom = "\xef\xbb\xbf";
if (input.compare(0, 3, bom) == 0)
input.remove_prefix(3);
_data = antlrcpp::utf8_to_utf32(input.data(), input.data() + input.size());
p = 0;
}
#else
void ANTLRInputStream::load(const std::string &input) { void ANTLRInputStream::load(const std::string &input) {
// Remove the UTF-8 BOM if present. // Remove the UTF-8 BOM if present.
const char bom[4] = "\xef\xbb\xbf"; const char bom[4] = "\xef\xbb\xbf";
@ -40,6 +54,7 @@ void ANTLRInputStream::load(const std::string &input) {
_data = antlrcpp::utf8_to_utf32(input.data(), input.data() + input.size()); _data = antlrcpp::utf8_to_utf32(input.data(), input.data() + input.size());
p = 0; p = 0;
} }
#endif
void ANTLRInputStream::load(std::istream &stream) { void ANTLRInputStream::load(std::istream &stream) {
if (!stream.good() || stream.eof()) // No fail, bad or EOF. if (!stream.good() || stream.eof()) // No fail, bad or EOF.

View File

@ -25,11 +25,19 @@ namespace antlr4 {
/// What is name or source of this char stream? /// What is name or source of this char stream?
std::string name; std::string name;
#if __cplusplus >= 201703L
ANTLRInputStream(std::string_view input = "");
#else
ANTLRInputStream(const std::string &input = ""); ANTLRInputStream(const std::string &input = "");
#endif
ANTLRInputStream(const char data_[], size_t numberOfActualCharsInArray); ANTLRInputStream(const char data_[], size_t numberOfActualCharsInArray);
ANTLRInputStream(std::istream &stream); ANTLRInputStream(std::istream &stream);
#if __cplusplus >= 201703L
virtual void load(std::string_view input);
#else
virtual void load(const std::string &input); virtual void load(const std::string &input);
#endif
virtual void load(std::istream &stream); virtual void load(std::istream &stream);
/// Reset the stream so that it's in the same state it was /// Reset the stream so that it's in the same state it was

View File

@ -22,8 +22,7 @@ Vocabulary::Vocabulary(const std::vector<std::string> &literalNames,
// See note here on -1 part: https://github.com/antlr/antlr4/pull/1146 // See note here on -1 part: https://github.com/antlr/antlr4/pull/1146
} }
Vocabulary::~Vocabulary() { Vocabulary::~Vocabulary() = default;
}
Vocabulary Vocabulary::fromTokenNames(const std::vector<std::string> &tokenNames) { Vocabulary Vocabulary::fromTokenNames(const std::vector<std::string> &tokenNames) {
if (tokenNames.empty()) { if (tokenNames.empty()) {
@ -34,25 +33,18 @@ Vocabulary Vocabulary::fromTokenNames(const std::vector<std::string> &tokenNames
std::vector<std::string> symbolicNames = tokenNames; std::vector<std::string> symbolicNames = tokenNames;
std::locale locale; std::locale locale;
for (size_t i = 0; i < tokenNames.size(); i++) { for (size_t i = 0; i < tokenNames.size(); i++) {
std::string tokenName = tokenNames[i]; const std::string& tokenName = tokenNames[i];
if (tokenName == "") { if (tokenName.empty()) {
continue; continue;
} else if (tokenName.front() == '\'') {
symbolicNames[i].clear();
} else if (std::isupper(tokenName.front(), locale)) {
literalNames[i].clear();
} else {
// wasn't a literal or symbolic name
literalNames[i].clear();
symbolicNames[i].clear();
} }
if (!tokenName.empty()) {
char firstChar = tokenName[0];
if (firstChar == '\'') {
symbolicNames[i] = "";
continue;
} else if (std::isupper(firstChar, locale)) {
literalNames[i] = "";
continue;
}
}
// wasn't a literal or symbolic name
literalNames[i] = "";
symbolicNames[i] = "";
} }
return Vocabulary(literalNames, symbolicNames, tokenNames); return Vocabulary(literalNames, symbolicNames, tokenNames);

View File

@ -14,9 +14,6 @@ namespace dfa {
/// interface. /// interface.
class ANTLR4CPP_PUBLIC Vocabulary { class ANTLR4CPP_PUBLIC Vocabulary {
public: public:
Vocabulary(Vocabulary const&) = default;
virtual ~Vocabulary();
/// Gets an empty <seealso cref="Vocabulary"/> instance. /// Gets an empty <seealso cref="Vocabulary"/> instance.
/// ///
/// <para> /// <para>
@ -25,7 +22,9 @@ namespace dfa {
/// except <seealso cref="Token#EOF"/>.</para> /// except <seealso cref="Token#EOF"/>.</para>
static const Vocabulary EMPTY_VOCABULARY; static const Vocabulary EMPTY_VOCABULARY;
Vocabulary() {} Vocabulary() = default;
Vocabulary(Vocabulary const&) = default;
virtual ~Vocabulary();
/// <summary> /// <summary>
/// Constructs a new instance of <seealso cref="Vocabulary"/> from the specified /// Constructs a new instance of <seealso cref="Vocabulary"/> from the specified

View File

@ -63,7 +63,7 @@ public:
}; };
<endif> <endif>
<lexer.name>(antlr4::CharStream *input); explicit <lexer.name>(antlr4::CharStream *input);
~<lexer.name>(); ~<lexer.name>();
<namedActions.members> <namedActions.members>
@ -192,23 +192,23 @@ atn::ATN <lexer.name>::_atn;
std::vector\<uint16_t> <lexer.name>::_serializedATN; std::vector\<uint16_t> <lexer.name>::_serializedATN;
std::vector\<std::string> <lexer.name>::_ruleNames = { std::vector\<std::string> <lexer.name>::_ruleNames = {
<lexer.ruleNames: {r | u8"<r>"}; separator = ", ", wrap, anchor> <lexer.ruleNames: {r | "<r>"}; separator = ", ", wrap, anchor>
}; };
std::vector\<std::string> <lexer.name>::_channelNames = { std::vector\<std::string> <lexer.name>::_channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"<if (lexer.channels)>, <lexer.channels: {c | u8"<c>"}; separator = ", ", wrap, anchor><endif> "DEFAULT_TOKEN_CHANNEL", "HIDDEN"<if (lexer.channels)>, <lexer.channels: {c | "<c>"}; separator = ", ", wrap, anchor><endif>
}; };
std::vector\<std::string> <lexer.name>::_modeNames = { std::vector\<std::string> <lexer.name>::_modeNames = {
<lexer.modes: {m | u8"<m>"}; separator = ", ", wrap, anchor> <lexer.modes: {m | "<m>"}; separator = ", ", wrap, anchor>
}; };
std::vector\<std::string> <lexer.name>::_literalNames = { std::vector\<std::string> <lexer.name>::_literalNames = {
<lexer.literalNames: {t | u8<t>}; null = "\"\"", separator = ", ", wrap, anchor> <lexer.literalNames: {t | <t>}; null = "\"\"", separator = ", ", wrap, anchor>
}; };
std::vector\<std::string> <lexer.name>::_symbolicNames = { std::vector\<std::string> <lexer.name>::_symbolicNames = {
<lexer.symbolicNames: {t | u8<t>}; null = "\"\"", separator = ", ", wrap, anchor> <lexer.symbolicNames: {t | <t>}; null = "\"\"", separator = ", ", wrap, anchor>
}; };
dfa::Vocabulary <lexer.name>::_vocabulary(_literalNames, _symbolicNames); dfa::Vocabulary <lexer.name>::_vocabulary(_literalNames, _symbolicNames);
@ -290,7 +290,7 @@ public:
}; };
<endif> <endif>
<parser.name>(antlr4::TokenStream *input); explicit <parser.name>(antlr4::TokenStream *input);
~<parser.name>(); ~<parser.name>();
virtual std::string getGrammarFileName() const override; virtual std::string getGrammarFileName() const override;
@ -710,6 +710,8 @@ switch (getInterpreter\<atn::ParserATNSimulator>()->adaptivePredict(_input, <cho
break; break;
\} \}
}; separator="\n"> }; separator="\n">
default:
break;
} }
>> >>
@ -724,6 +726,8 @@ switch (getInterpreter\<atn::ParserATNSimulator>()->adaptivePredict(_input, <cho
break; break;
\} \}
}; separator = "\n"> }; separator = "\n">
default:
break;
} }
>> >>