diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/parse/Grammar.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/parse/Grammar.cpp b/src/parse/Grammar.cpp index 3cf43237..5486542b 100644 --- a/src/parse/Grammar.cpp +++ b/src/parse/Grammar.cpp @@ -8,7 +8,15 @@ namespace cru::parse { Grammar::Grammar() {} -Grammar::~Grammar() {} +Grammar::~Grammar() { + for (auto symbol : symbols_) { + delete symbol; + } + + for (auto production : productions_) { + delete production; + } +} Terminal* Grammar::CreateTerminal(String name) { auto terminal = new Terminal(this, std::move(name)); @@ -86,6 +94,8 @@ Grammar* Grammar::Clone() const { symbol_map.emplace(old_nonterminal, new_nonterminal); } + g->SetStartSymbol(static_cast<Nonterminal*>(symbol_map[start_symbol_])); + for (auto old_production : productions_) { std::vector<Symbol*> new_right; std::transform(old_production->GetRight().cbegin(), |