mirror of
https://github.com/GothenburgBitFactory/timewarrior.git
synced 2025-07-07 20:06:39 +02:00
Grammar: Improved CppCoreGuidelines compliance
This commit is contained in:
parent
150cd18189
commit
b5df7fe384
2 changed files with 19 additions and 19 deletions
|
@ -152,7 +152,7 @@ std::string Grammar::start () const
|
||||||
std::vector <std::string> Grammar::rules () const
|
std::vector <std::string> Grammar::rules () const
|
||||||
{
|
{
|
||||||
std::vector <std::string> results;
|
std::vector <std::string> results;
|
||||||
for (auto& rule : _rules)
|
for (const auto& rule : _rules)
|
||||||
results.push_back (rule.first);
|
results.push_back (rule.first);
|
||||||
|
|
||||||
return results;
|
return results;
|
||||||
|
@ -162,9 +162,9 @@ std::vector <std::string> Grammar::rules () const
|
||||||
std::vector <std::string> Grammar::terminals () const
|
std::vector <std::string> Grammar::terminals () const
|
||||||
{
|
{
|
||||||
std::vector <std::string> results;
|
std::vector <std::string> results;
|
||||||
for (auto& rule : _rules)
|
for (const auto& rule : _rules)
|
||||||
for (auto& production : rule.second)
|
for (const auto& production : rule.second)
|
||||||
for (auto& token : production)
|
for (const auto& token : production)
|
||||||
if (_rules.find (token._token) == _rules.end ())
|
if (_rules.find (token._token) == _rules.end ())
|
||||||
results.push_back (token._token);
|
results.push_back (token._token);
|
||||||
|
|
||||||
|
@ -175,13 +175,13 @@ std::vector <std::string> Grammar::terminals () const
|
||||||
std::vector <std::vector <std::string>> Grammar::augmented () const
|
std::vector <std::vector <std::string>> Grammar::augmented () const
|
||||||
{
|
{
|
||||||
std::vector <std::vector <std::string>> results {{"S", "-->", _start}};
|
std::vector <std::vector <std::string>> results {{"S", "-->", _start}};
|
||||||
for (auto& rule : _rules)
|
for (const auto& rule : _rules)
|
||||||
for (auto& production : rule.second)
|
for (const auto& production : rule.second)
|
||||||
{
|
{
|
||||||
std::vector <std::string> terms;
|
std::vector <std::string> terms;
|
||||||
terms.push_back (rule.first);
|
terms.push_back (rule.first);
|
||||||
terms.push_back ("-->");
|
terms.push_back ("-->");
|
||||||
for (auto& token : production)
|
for (const auto& token : production)
|
||||||
terms.push_back (token._token);
|
terms.push_back (token._token);
|
||||||
|
|
||||||
results.push_back (terms);
|
results.push_back (terms);
|
||||||
|
@ -201,18 +201,18 @@ std::string Grammar::dump () const
|
||||||
{
|
{
|
||||||
std::stringstream out;
|
std::stringstream out;
|
||||||
out << "Grammar\n";
|
out << "Grammar\n";
|
||||||
for (auto& rule : _rules)
|
for (const auto& rule : _rules)
|
||||||
{
|
{
|
||||||
// Indicate the start Rule.
|
// Indicate the start Rule.
|
||||||
out << " " << (rule.first == _start ? "▶" : " ") << " " << rule.first << ": ";
|
out << " " << (rule.first == _start ? "▶" : " ") << " " << rule.first << ": ";
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (auto& production : rule.second)
|
for (const auto& production : rule.second)
|
||||||
{
|
{
|
||||||
if (count)
|
if (count)
|
||||||
out << "| ";
|
out << "| ";
|
||||||
|
|
||||||
for (auto& token : production)
|
for (const auto& token : production)
|
||||||
{
|
{
|
||||||
out << token._token;
|
out << token._token;
|
||||||
if (token._decoration != "")
|
if (token._decoration != "")
|
||||||
|
@ -239,13 +239,13 @@ void Grammar::validate () const
|
||||||
std::vector <std::string> allTokens;
|
std::vector <std::string> allTokens;
|
||||||
std::vector <std::string> allLeftRecursive;
|
std::vector <std::string> allLeftRecursive;
|
||||||
|
|
||||||
for (auto& rule : _rules)
|
for (const auto& rule : _rules)
|
||||||
{
|
{
|
||||||
allRules.push_back (rule.first);
|
allRules.push_back (rule.first);
|
||||||
|
|
||||||
for (auto& production : rule.second)
|
for (const auto& production : rule.second)
|
||||||
{
|
{
|
||||||
for (auto& token : production)
|
for (const auto& token : production)
|
||||||
{
|
{
|
||||||
if (token._token.front () != '"' and
|
if (token._token.front () != '"' and
|
||||||
token._token.front () != '/')
|
token._token.front () != '/')
|
||||||
|
@ -265,23 +265,23 @@ void Grammar::validate () const
|
||||||
|
|
||||||
// Undefined value - these are definitions that appear in token, but are
|
// Undefined value - these are definitions that appear in token, but are
|
||||||
// not in _rules.
|
// not in _rules.
|
||||||
for (auto& nd : notDefined)
|
for (const auto& nd : notDefined)
|
||||||
if (nd != "є")
|
if (nd != "є")
|
||||||
throw format ("Definition '{1}' referenced, but not defined.", nd);
|
throw format ("Definition '{1}' referenced, but not defined.", nd);
|
||||||
|
|
||||||
// Circular definitions - these are names in _rules that also appear as
|
// Circular definitions - these are names in _rules that also appear as
|
||||||
// the only token in any of the alternates for that definition.
|
// the only token in any of the alternates for that definition.
|
||||||
for (auto& lr : allLeftRecursive)
|
for (const auto& lr : allLeftRecursive)
|
||||||
throw format ("Definition '{1}' is left recursive.", lr);
|
throw format ("Definition '{1}' is left recursive.", lr);
|
||||||
|
|
||||||
for (auto& r : allRules)
|
for (const auto& r : allRules)
|
||||||
if (r[0] == '"' or
|
if (r[0] == '"' or
|
||||||
r[0] == '/')
|
r[0] == '/')
|
||||||
throw format ("Definition '{1}' must not be a literal.");
|
throw format ("Definition '{1}' must not be a literal.");
|
||||||
|
|
||||||
// Unused definitions - these are names in _rules that are never
|
// Unused definitions - these are names in _rules that are never
|
||||||
// referenced as token.
|
// referenced as token.
|
||||||
for (auto& nu : notUsed)
|
for (const auto& nu : notUsed)
|
||||||
if (nu != _start)
|
if (nu != _start)
|
||||||
throw format ("Definition '{1}' is defined, but not referenced.", nu);
|
throw format ("Definition '{1}' is defined, but not referenced.", nu);
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,11 +68,11 @@ private:
|
||||||
void validate () const;
|
void validate () const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string _start;
|
std::string _start {};
|
||||||
// rule name rule
|
// rule name rule
|
||||||
// | |
|
// | |
|
||||||
std::map <std::string, Grammar::Rule> _rules;
|
std::map <std::string, Grammar::Rule> _rules;
|
||||||
bool _debug;
|
bool _debug {false};
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue