diff options
author | crupest <crupest@outlook.com> | 2021-09-14 22:10:02 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-09-14 22:10:02 +0800 |
commit | 46d4838ac8ff1bd8658b57cf4ebb4438e396fce8 (patch) | |
tree | f1e04c19630c7f42ad57618e9a2d7cf5ea4d31c1 /src/parse/Grammar.cpp | |
parent | 9bc202a2e1664df3e3c148abfe90a90501bc1650 (diff) | |
download | cru-46d4838ac8ff1bd8658b57cf4ebb4438e396fce8.tar.gz cru-46d4838ac8ff1bd8658b57cf4ebb4438e396fce8.tar.bz2 cru-46d4838ac8ff1bd8658b57cf4ebb4438e396fce8.zip |
...
Diffstat (limited to 'src/parse/Grammar.cpp')
-rw-r--r-- | src/parse/Grammar.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/parse/Grammar.cpp b/src/parse/Grammar.cpp index 95c65e99..34eb2dd4 100644 --- a/src/parse/Grammar.cpp +++ b/src/parse/Grammar.cpp @@ -122,8 +122,6 @@ Grammar::GenerateLeftProductionMap() const { } void Grammar::EliminateLeftRecursions() { - // TODO: Use a better name. - auto nonterminals = nonterminals_; for (int i = 0; i < nonterminals.size(); i++) { auto ni = nonterminals[i]; @@ -148,6 +146,7 @@ void Grammar::EliminateLeftRecursions() { auto new_right = right; new_right.insert(new_right.cbegin(), jp->GetRight().cbegin(), jp->GetRight().cend()); + // TODO: What should this name be. CreateProduction(u"", ni, std::move(new_right)); } } @@ -167,22 +166,29 @@ void Grammar::EliminateLeftRecursions() { } } - auto ni_h = CreateNonterminal(u""); + auto ni_h = CreateNonterminal(ni->GetName() + + u" (Eliminate Left Recursion Helper)"); for (auto p : i_nr_ps) { auto right = p->GetRight(); right.push_back(ni_h); - CreateProduction(u"", ni, std::move(right)); + CreateProduction(p->GetName() + u" (Eliminate Left Recursion Of " + + ni->GetName() + u")", + ni, std::move(right)); } for (auto p : i_r_ps) { auto right = p->GetRight(); right.erase(right.cbegin()); right.push_back(ni_h); - CreateProduction(u"", ni_h, std::move(right)); + CreateProduction(p->GetName() + u" (Eliminate Left Recursion Of " + + ni->GetName() + u")", + ni_h, std::move(right)); } - CreateProduction(u"", ni_h, std::vector<Symbol*>{}); + CreateProduction(u"Empty Production (Eliminate Left Recursion Of " + + ni->GetName() + u")", + ni_h, std::vector<Symbol*>{}); for (auto p : i_r_ps) { RemoveProduction(p); @@ -193,4 +199,6 @@ void Grammar::EliminateLeftRecursions() { } } } + +void Grammar::LeftFactor() {} } // namespace cru::parse |