From 9f0aa0b06666dc99515a4250085b31f0efa81af8 Mon Sep 17 00:00:00 2001 From: crupest Date: Sat, 11 Sep 2021 17:16:51 +0800 Subject: ... --- include/cru/parse/Grammar.hpp | 4 ++++ src/parse/Grammar.cpp | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/cru/parse/Grammar.hpp b/include/cru/parse/Grammar.hpp index 42649c30..98bed1b1 100644 --- a/include/cru/parse/Grammar.hpp +++ b/include/cru/parse/Grammar.hpp @@ -1,6 +1,7 @@ #pragma once #include "Production.hpp" +#include #include namespace cru::parse { @@ -38,6 +39,9 @@ class Grammar : public Object { Grammar* Clone() const; public: // Algorithms + std::unordered_map> + GenerateLeftProductionMap() const; + void EliminateLeftRecursions(); private: diff --git a/src/parse/Grammar.cpp b/src/parse/Grammar.cpp index 5486542b..8253c3c3 100644 --- a/src/parse/Grammar.cpp +++ b/src/parse/Grammar.cpp @@ -112,4 +112,14 @@ Grammar* Grammar::Clone() const { return g; } +std::unordered_map> +Grammar::GenerateLeftProductionMap() const { + std::unordered_map> result; + for (auto p : productions_) { + result[p->GetLeft()].push_back(p); + } + return result; +} + +void Grammar::EliminateLeftRecursions() {} } // namespace cru::parse -- cgit v1.2.3