diff options
author | crupest <crupest@outlook.com> | 2021-09-10 17:08:37 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-09-10 17:08:37 +0800 |
commit | 819b582849e8f5c40d1dbcac6c0cf26b265d36b0 (patch) | |
tree | e50cd13d09a619ce22222db82864219c831df6c0 | |
parent | b1ae774594b46419879362735d4e25c4937c0a6c (diff) | |
download | cru-819b582849e8f5c40d1dbcac6c0cf26b265d36b0.tar.gz cru-819b582849e8f5c40d1dbcac6c0cf26b265d36b0.tar.bz2 cru-819b582849e8f5c40d1dbcac6c0cf26b265d36b0.zip |
...
-rw-r--r-- | include/cru/parse/Nonterminal.hpp | 14 | ||||
-rw-r--r-- | include/cru/parse/Symbol.hpp | 28 | ||||
-rw-r--r-- | include/cru/parse/Terminal.hpp | 14 | ||||
-rw-r--r-- | src/parse/Nonterminal.cpp | 8 | ||||
-rw-r--r-- | src/parse/Symbol.cpp | 8 | ||||
-rw-r--r-- | src/parse/Terminal.cpp | 7 | ||||
-rw-r--r-- | src/parse/TokenType.cpp | 3 |
7 files changed, 82 insertions, 0 deletions
diff --git a/include/cru/parse/Nonterminal.hpp b/include/cru/parse/Nonterminal.hpp index e69de29b..1bc6f9ff 100644 --- a/include/cru/parse/Nonterminal.hpp +++ b/include/cru/parse/Nonterminal.hpp @@ -0,0 +1,14 @@ +#pragma once +#include "Symbol.hpp" + +namespace cru::parse { +class Nonterminal : public Symbol { + public: + Nonterminal(Grammar* grammar, String name); + + CRU_DELETE_COPY(Nonterminal) + CRU_DELETE_MOVE(Nonterminal) + + ~Nonterminal() override; +}; +} // namespace cru::parse diff --git a/include/cru/parse/Symbol.hpp b/include/cru/parse/Symbol.hpp index e69de29b..5c862c25 100644 --- a/include/cru/parse/Symbol.hpp +++ b/include/cru/parse/Symbol.hpp @@ -0,0 +1,28 @@ +#pragma once +#include "cru/common/String.hpp" + +namespace cru::parse { +class Grammar; + +// Base class of Terminal and Nonterminal. +class Symbol : public Object { + public: + Symbol(Grammar* grammar, String name); + + CRU_DELETE_COPY(Symbol) + CRU_DELETE_MOVE(Symbol) + + ~Symbol() override; + + public: + Grammar* GetGrammar() { return grammar_; } + + String GetName() const { return name_; } + void SetName(String name) { name_ = std::move(name); } + + private: + Grammar* grammar_; + + String name_; +}; +} // namespace cru::parse diff --git a/include/cru/parse/Terminal.hpp b/include/cru/parse/Terminal.hpp index e69de29b..b42ba1f9 100644 --- a/include/cru/parse/Terminal.hpp +++ b/include/cru/parse/Terminal.hpp @@ -0,0 +1,14 @@ +#pragma once +#include "Symbol.hpp" + +namespace cru::parse { +class Terminal : public Symbol { + public: + explicit Terminal(Grammar* grammar, String name); + + CRU_DELETE_COPY(Terminal) + CRU_DELETE_MOVE(Terminal) + + ~Terminal() override; +}; +} // namespace cru::parse diff --git a/src/parse/Nonterminal.cpp b/src/parse/Nonterminal.cpp index e69de29b..4d60d3d3 100644 --- a/src/parse/Nonterminal.cpp +++ b/src/parse/Nonterminal.cpp @@ -0,0 +1,8 @@ +#include "cru/parse/Nonterminal.hpp" + +namespace cru::parse { +Nonterminal::Nonterminal(Grammar* grammar, String name) + : Symbol(grammar, std::move(name)) {} + +Nonterminal::~Nonterminal() {} +} // namespace cru::parse diff --git a/src/parse/Symbol.cpp b/src/parse/Symbol.cpp index e69de29b..bcedc490 100644 --- a/src/parse/Symbol.cpp +++ b/src/parse/Symbol.cpp @@ -0,0 +1,8 @@ +#include "cru/parse/Symbol.hpp" + +namespace cru::parse { +Symbol::Symbol(Grammar* grammar, String name) + : grammar_(grammar), name_(std::move(name)) {} + +Symbol::~Symbol() {} +} // namespace cru::parse diff --git a/src/parse/Terminal.cpp b/src/parse/Terminal.cpp index e69de29b..acd9576e 100644 --- a/src/parse/Terminal.cpp +++ b/src/parse/Terminal.cpp @@ -0,0 +1,7 @@ +#include "cru/parse/Terminal.hpp" + +namespace cru::parse { +Terminal::Terminal(Grammar* grammar, String name) : Symbol(grammar, name) {} + +Terminal::~Terminal() {} +} // namespace cru::parse diff --git a/src/parse/TokenType.cpp b/src/parse/TokenType.cpp index 2819a4de..9b06d56f 100644 --- a/src/parse/TokenType.cpp +++ b/src/parse/TokenType.cpp @@ -2,4 +2,7 @@ namespace cru::parse { TokenType::TokenType(String name) : name_(std::move(name)) {} + +TokenType::~TokenType() {} + } // namespace cru::parse |