diff options
-rw-r--r-- | include/cru/parse/ParsingAlgorithm.hpp | 2 | ||||
-rw-r--r-- | include/cru/parse/ParsingAlgorithmContext.hpp | 11 | ||||
-rw-r--r-- | include/cru/parse/ParsingContext.hpp | 5 | ||||
-rw-r--r-- | include/cru/parse/RecursiveDescentAlgorithm.hpp | 19 | ||||
-rw-r--r-- | include/cru/parse/RecursiveDescentAlgorithmContext.hpp | 22 | ||||
-rw-r--r-- | src/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/parse/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/parse/ParsingAlgorithmContext.cpp | 2 | ||||
-rw-r--r-- | src/parse/ParsingContext.cpp | 2 | ||||
-rw-r--r-- | src/parse/RecursiveDescentAlgorithm.cpp | 14 | ||||
-rw-r--r-- | src/parse/RecursiveDescentAlgorithmContext.cpp | 16 | ||||
-rw-r--r-- | src/xml/CMakeLists.txt | 0 |
12 files changed, 88 insertions, 9 deletions
diff --git a/include/cru/parse/ParsingAlgorithm.hpp b/include/cru/parse/ParsingAlgorithm.hpp index 1ea30a80..acca159e 100644 --- a/include/cru/parse/ParsingAlgorithm.hpp +++ b/include/cru/parse/ParsingAlgorithm.hpp @@ -14,7 +14,7 @@ class ParsingAlgorithm { CRU_DELETE_COPY(ParsingAlgorithm) CRU_DELETE_MOVE(ParsingAlgorithm) - ~ParsingAlgorithm() = default; + virtual ~ParsingAlgorithm() = default; virtual bool CanHandle(Grammar* grammar) const = 0; virtual ParsingAlgorithmContext* CreateContext(Grammar* grammar) const = 0; diff --git a/include/cru/parse/ParsingAlgorithmContext.hpp b/include/cru/parse/ParsingAlgorithmContext.hpp index 072203ec..f67ccbbc 100644 --- a/include/cru/parse/ParsingAlgorithmContext.hpp +++ b/include/cru/parse/ParsingAlgorithmContext.hpp @@ -1,5 +1,8 @@ #pragma once +#include <vector> #include "Grammar.hpp" +#include "cru/parse/ParsingTreeNode.hpp" +#include "cru/parse/Terminal.hpp" namespace cru::parse { class ParsingAlgorithm; @@ -9,15 +12,17 @@ class ParsingAlgorithm; // contain any state machine. class ParsingAlgorithmContext { public: - ParsingAlgorithmContext(Grammar* grammar, ParsingAlgorithm* algorithm); + ParsingAlgorithmContext(Grammar* grammar, const ParsingAlgorithm* algorithm); CRU_DELETE_COPY(ParsingAlgorithmContext) CRU_DELETE_MOVE(ParsingAlgorithmContext) - ~ParsingAlgorithmContext(); + virtual ~ParsingAlgorithmContext(); + + virtual ParsingTreeNode* Parse(const std::vector<Terminal*>& input) = 0; private: Grammar* grammar_; - ParsingAlgorithm* algorithm_; + const ParsingAlgorithm* algorithm_; }; } // namespace cru::parse diff --git a/include/cru/parse/ParsingContext.hpp b/include/cru/parse/ParsingContext.hpp index 369acf41..ebb7115a 100644 --- a/include/cru/parse/ParsingContext.hpp +++ b/include/cru/parse/ParsingContext.hpp @@ -1,12 +1,13 @@ #pragma once #include "ParsingAlgorithmContext.hpp" +#include "cru/parse/ParsingTreeNode.hpp" namespace cru::parse { // A parsing context contains all info that a program needs to know when parsing // a input sequence of terminals. class ParsingContext { public: - ParsingContext(ParsingAlgorithmContext* parsing_algorithm_context, + ParsingContext(const ParsingAlgorithmContext* parsing_algorithm_context, std::vector<Terminal*> input); CRU_DELETE_COPY(ParsingContext) @@ -15,7 +16,7 @@ class ParsingContext { ~ParsingContext(); private: - ParsingAlgorithmContext* parsing_algorithm_context_; + const ParsingAlgorithmContext* parsing_algorithm_context_; std::vector<Terminal*> input_; }; } // namespace cru::parse diff --git a/include/cru/parse/RecursiveDescentAlgorithm.hpp b/include/cru/parse/RecursiveDescentAlgorithm.hpp new file mode 100644 index 00000000..c12a84f6 --- /dev/null +++ b/include/cru/parse/RecursiveDescentAlgorithm.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include "ParsingAlgorithm.hpp" + +namespace cru::parse { +class RecursiveDescentAlgorithm : public ParsingAlgorithm { + public: + RecursiveDescentAlgorithm() = default; + + CRU_DELETE_COPY(RecursiveDescentAlgorithm) + CRU_DELETE_MOVE(RecursiveDescentAlgorithm) + + ~RecursiveDescentAlgorithm() override = default; + + public: + bool CanHandle(Grammar* grammar) const override; + ParsingAlgorithmContext* CreateContext(Grammar* grammar) const override; +}; +} // namespace cru::parse diff --git a/include/cru/parse/RecursiveDescentAlgorithmContext.hpp b/include/cru/parse/RecursiveDescentAlgorithmContext.hpp new file mode 100644 index 00000000..1b888da9 --- /dev/null +++ b/include/cru/parse/RecursiveDescentAlgorithmContext.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include "ParsingAlgorithmContext.hpp" +#include "cru/parse/ParsingTreeNode.hpp" +#include "cru/parse/RecursiveDescentAlgorithm.hpp" +#include "cru/parse/Terminal.hpp" + +namespace cru::parse { +class RecursiveDescentAlgorithmContext : public ParsingAlgorithmContext { + public: + RecursiveDescentAlgorithmContext(Grammar* grammar, + const RecursiveDescentAlgorithm* algorithm); + + CRU_DELETE_COPY(RecursiveDescentAlgorithmContext) + CRU_DELETE_MOVE(RecursiveDescentAlgorithmContext) + + ~RecursiveDescentAlgorithmContext() override; + + public: + ParsingTreeNode* Parse(const std::vector<Terminal*>& input) override; +}; +} // namespace cru::parse diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5059cc82..d16c075e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,5 +9,5 @@ elseif (APPLE) endif() add_subdirectory(ui) - add_subdirectory(parse) +add_subdirectory(xml) diff --git a/src/parse/CMakeLists.txt b/src/parse/CMakeLists.txt index 631c9881..72bac707 100644 --- a/src/parse/CMakeLists.txt +++ b/src/parse/CMakeLists.txt @@ -6,6 +6,8 @@ add_library(cru_parse SHARED ParsingContext.cpp ParsingTreeNode.cpp Production.cpp + RecursiveDescentAlgorithm.cpp + RecursiveDescentAlgorithmContext.cpp Symbol.cpp Terminal.cpp Token.cpp diff --git a/src/parse/ParsingAlgorithmContext.cpp b/src/parse/ParsingAlgorithmContext.cpp index 98e2343b..686ba3e5 100644 --- a/src/parse/ParsingAlgorithmContext.cpp +++ b/src/parse/ParsingAlgorithmContext.cpp @@ -2,7 +2,7 @@ namespace cru::parse { ParsingAlgorithmContext::ParsingAlgorithmContext(Grammar* grammar, - ParsingAlgorithm* algorithm) + const ParsingAlgorithm* algorithm) : grammar_(grammar), algorithm_(algorithm) {} ParsingAlgorithmContext::~ParsingAlgorithmContext() {} diff --git a/src/parse/ParsingContext.cpp b/src/parse/ParsingContext.cpp index aafaa65b..25a7a133 100644 --- a/src/parse/ParsingContext.cpp +++ b/src/parse/ParsingContext.cpp @@ -3,7 +3,7 @@ namespace cru::parse { ParsingContext::ParsingContext( - ParsingAlgorithmContext* parsing_algorithm_context, + const ParsingAlgorithmContext* parsing_algorithm_context, std::vector<Terminal*> input) : parsing_algorithm_context_(parsing_algorithm_context), input_(std::move(input)) {} diff --git a/src/parse/RecursiveDescentAlgorithm.cpp b/src/parse/RecursiveDescentAlgorithm.cpp new file mode 100644 index 00000000..a6549f8a --- /dev/null +++ b/src/parse/RecursiveDescentAlgorithm.cpp @@ -0,0 +1,14 @@ +#include "cru/parse/RecursiveDescentAlgorithm.hpp" +#include "cru/parse/ParsingAlgorithmContext.hpp" +#include "cru/parse/RecursiveDescentAlgorithmContext.hpp" + +namespace cru::parse { +bool RecursiveDescentAlgorithm::CanHandle(Grammar *grammar) const { + return true; +} + +ParsingAlgorithmContext *RecursiveDescentAlgorithm::CreateContext( + Grammar *grammar) const { + return new RecursiveDescentAlgorithmContext(grammar, this); +} +} // namespace cru::parse diff --git a/src/parse/RecursiveDescentAlgorithmContext.cpp b/src/parse/RecursiveDescentAlgorithmContext.cpp new file mode 100644 index 00000000..8de0abc4 --- /dev/null +++ b/src/parse/RecursiveDescentAlgorithmContext.cpp @@ -0,0 +1,16 @@ +#include "cru/parse/RecursiveDescentAlgorithmContext.hpp" +#include "cru/parse/ParsingTreeNode.hpp" + +namespace cru::parse { +RecursiveDescentAlgorithmContext::RecursiveDescentAlgorithmContext( + Grammar* grammar, const RecursiveDescentAlgorithm* algorithm) + : ParsingAlgorithmContext(grammar, algorithm) {} + +RecursiveDescentAlgorithmContext::~RecursiveDescentAlgorithmContext() = default; + +ParsingTreeNode* RecursiveDescentAlgorithmContext::Parse( + const std::vector<Terminal*>& input) { + // TODO: Implement this. + return nullptr; +} +} // namespace cru::parse diff --git a/src/xml/CMakeLists.txt b/src/xml/CMakeLists.txt new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/src/xml/CMakeLists.txt |