mirror of
https://github.com/GothenburgBitFactory/timewarrior.git
synced 2025-07-07 20:06:39 +02:00
Grammar: Upgraded tokens from std::string to full object
This commit is contained in:
parent
29cb35123a
commit
6fac8a4a54
2 changed files with 19 additions and 6 deletions
|
@ -111,15 +111,16 @@ void Grammar::loadFromString (const std::string& input)
|
||||||
}
|
}
|
||||||
else if (token.front () == ':')
|
else if (token.front () == ':')
|
||||||
{
|
{
|
||||||
// TODO Handle decorated tokens here.
|
// Decorate the most recent token, of the most recent production,
|
||||||
_rules[rule_name].back ().decorate (token);
|
// of the current rule.
|
||||||
|
_rules[rule_name].back ().back ().decorate (token);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (token_count <= 1)
|
if (token_count <= 1)
|
||||||
_rules[rule_name].push_back (Grammar::Production ());
|
_rules[rule_name].push_back (Grammar::Production ());
|
||||||
|
|
||||||
_rules[rule_name].back ().push_back (token);
|
_rules[rule_name].back ().push_back (Grammar::Token (token));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -143,7 +144,11 @@ std::string Grammar::dump () const
|
||||||
{
|
{
|
||||||
out << " ";
|
out << " ";
|
||||||
for (auto& term : production)
|
for (auto& term : production)
|
||||||
out << term << " ";
|
{
|
||||||
|
out << term._token << " ";
|
||||||
|
if (term._decoration != "")
|
||||||
|
out << "(" << term._decoration << ") ";
|
||||||
|
}
|
||||||
|
|
||||||
out << "\n";
|
out << "\n";
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,10 +41,18 @@ public:
|
||||||
std::string dump () const;
|
std::string dump () const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
class Production : public std::vector <std::string>
|
class Token
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void decorate (const std::string& value) {}
|
Token (const std::string& value) { _token = value; }
|
||||||
|
void decorate (const std::string& value) { _decoration = value; }
|
||||||
|
|
||||||
|
std::string _token;
|
||||||
|
std::string _decoration;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Production : public std::vector <Token>
|
||||||
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
class Rule : public std::vector <Production>
|
class Rule : public std::vector <Production>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue