aboutsummaryrefslogtreecommitdiff
path: root/include/cru/parse
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-01-12 22:36:09 +0800
committercrupest <crupest@outlook.com>2022-01-12 22:36:09 +0800
commitc409caa8873e25699fc10ae435e8d123685f28f3 (patch)
tree16a0c0696f0e6d4c6856db0b7864652e2779b2b8 /include/cru/parse
parent7a42d92c10a4bc686244668dd0e3f903f30f2fae (diff)
downloadcru-c409caa8873e25699fc10ae435e8d123685f28f3.tar.gz
cru-c409caa8873e25699fc10ae435e8d123685f28f3.tar.bz2
cru-c409caa8873e25699fc10ae435e8d123685f28f3.zip
...
Diffstat (limited to 'include/cru/parse')
-rw-r--r--include/cru/parse/Base.hpp11
-rw-r--r--include/cru/parse/Grammar.hpp2
-rw-r--r--include/cru/parse/Nonterminal.hpp2
-rw-r--r--include/cru/parse/ParsingAlgorithm.hpp2
-rw-r--r--include/cru/parse/ParsingAlgorithmContext.hpp2
-rw-r--r--include/cru/parse/ParsingContext.hpp2
-rw-r--r--include/cru/parse/ParsingTreeNode.hpp2
-rw-r--r--include/cru/parse/Production.hpp2
-rw-r--r--include/cru/parse/RecursiveDescentAlgorithm.hpp2
-rw-r--r--include/cru/parse/RecursiveDescentAlgorithmContext.hpp2
-rw-r--r--include/cru/parse/Symbol.hpp4
-rw-r--r--include/cru/parse/Terminal.hpp2
-rw-r--r--include/cru/parse/TokenType.hpp4
13 files changed, 27 insertions, 12 deletions
diff --git a/include/cru/parse/Base.hpp b/include/cru/parse/Base.hpp
new file mode 100644
index 00000000..8f3a05e9
--- /dev/null
+++ b/include/cru/parse/Base.hpp
@@ -0,0 +1,11 @@
+#pragma once
+
+#ifdef CRU_PLATFORM_WINDOWS
+#ifdef CRU_PARSE_EXPORT_API
+#define CRU_PARSE_API __declspec(dllexport)
+#else
+#define CRU_PARSE_API __declspec(dllimport)
+#endif
+#else
+#define CRU_PARSE_API
+#endif
diff --git a/include/cru/parse/Grammar.hpp b/include/cru/parse/Grammar.hpp
index 606fcc33..8dc1833f 100644
--- a/include/cru/parse/Grammar.hpp
+++ b/include/cru/parse/Grammar.hpp
@@ -5,7 +5,7 @@
#include <vector>
namespace cru::parse {
-class Grammar : public Object {
+class CRU_PARSE_API Grammar : public Object {
public:
Grammar();
diff --git a/include/cru/parse/Nonterminal.hpp b/include/cru/parse/Nonterminal.hpp
index 1bc6f9ff..b01c7c8a 100644
--- a/include/cru/parse/Nonterminal.hpp
+++ b/include/cru/parse/Nonterminal.hpp
@@ -2,7 +2,7 @@
#include "Symbol.hpp"
namespace cru::parse {
-class Nonterminal : public Symbol {
+class CRU_PARSE_API Nonterminal : public Symbol {
public:
Nonterminal(Grammar* grammar, String name);
diff --git a/include/cru/parse/ParsingAlgorithm.hpp b/include/cru/parse/ParsingAlgorithm.hpp
index acca159e..8f38c0ab 100644
--- a/include/cru/parse/ParsingAlgorithm.hpp
+++ b/include/cru/parse/ParsingAlgorithm.hpp
@@ -7,7 +7,7 @@ class ParsingAlgorithmContext;
// Represents a parsing algorithm.
// It does not relate to any specific grammar.
// It is used to validate a grammar and create a parsing algorithm context.
-class ParsingAlgorithm {
+class CRU_PARSE_API ParsingAlgorithm {
public:
ParsingAlgorithm() = default;
diff --git a/include/cru/parse/ParsingAlgorithmContext.hpp b/include/cru/parse/ParsingAlgorithmContext.hpp
index f67ccbbc..b959462c 100644
--- a/include/cru/parse/ParsingAlgorithmContext.hpp
+++ b/include/cru/parse/ParsingAlgorithmContext.hpp
@@ -10,7 +10,7 @@ class ParsingAlgorithm;
// A parsing algorithm context contains all data a parsing algorithm needs to
// parse for a grammar. It does not relate to any input. For example, it can
// contain any state machine.
-class ParsingAlgorithmContext {
+class CRU_PARSE_API ParsingAlgorithmContext {
public:
ParsingAlgorithmContext(Grammar* grammar, const ParsingAlgorithm* algorithm);
diff --git a/include/cru/parse/ParsingContext.hpp b/include/cru/parse/ParsingContext.hpp
index ebb7115a..cfb850b9 100644
--- a/include/cru/parse/ParsingContext.hpp
+++ b/include/cru/parse/ParsingContext.hpp
@@ -5,7 +5,7 @@
namespace cru::parse {
// A parsing context contains all info that a program needs to know when parsing
// a input sequence of terminals.
-class ParsingContext {
+class CRU_PARSE_API ParsingContext {
public:
ParsingContext(const ParsingAlgorithmContext* parsing_algorithm_context,
std::vector<Terminal*> input);
diff --git a/include/cru/parse/ParsingTreeNode.hpp b/include/cru/parse/ParsingTreeNode.hpp
index d1c3d058..7119ca0b 100644
--- a/include/cru/parse/ParsingTreeNode.hpp
+++ b/include/cru/parse/ParsingTreeNode.hpp
@@ -4,7 +4,7 @@
#include <vector>
namespace cru::parse {
-class ParsingTreeNode {
+class CRU_PARSE_API ParsingTreeNode {
public:
ParsingTreeNode(Symbol* symbol, Production* production);
diff --git a/include/cru/parse/Production.hpp b/include/cru/parse/Production.hpp
index 8a1331b9..cb3c79c0 100644
--- a/include/cru/parse/Production.hpp
+++ b/include/cru/parse/Production.hpp
@@ -7,7 +7,7 @@
#include <vector>
namespace cru::parse {
-class Production : public Object {
+class CRU_PARSE_API Production : public Object {
public:
Production(Grammar* grammar, String name, Nonterminal* left,
std::vector<Symbol*> right);
diff --git a/include/cru/parse/RecursiveDescentAlgorithm.hpp b/include/cru/parse/RecursiveDescentAlgorithm.hpp
index c12a84f6..373724ea 100644
--- a/include/cru/parse/RecursiveDescentAlgorithm.hpp
+++ b/include/cru/parse/RecursiveDescentAlgorithm.hpp
@@ -3,7 +3,7 @@
#include "ParsingAlgorithm.hpp"
namespace cru::parse {
-class RecursiveDescentAlgorithm : public ParsingAlgorithm {
+class CRU_PARSE_API RecursiveDescentAlgorithm : public ParsingAlgorithm {
public:
RecursiveDescentAlgorithm() = default;
diff --git a/include/cru/parse/RecursiveDescentAlgorithmContext.hpp b/include/cru/parse/RecursiveDescentAlgorithmContext.hpp
index 1b888da9..b29ee1a1 100644
--- a/include/cru/parse/RecursiveDescentAlgorithmContext.hpp
+++ b/include/cru/parse/RecursiveDescentAlgorithmContext.hpp
@@ -6,7 +6,7 @@
#include "cru/parse/Terminal.hpp"
namespace cru::parse {
-class RecursiveDescentAlgorithmContext : public ParsingAlgorithmContext {
+class CRU_PARSE_API RecursiveDescentAlgorithmContext : public ParsingAlgorithmContext {
public:
RecursiveDescentAlgorithmContext(Grammar* grammar,
const RecursiveDescentAlgorithm* algorithm);
diff --git a/include/cru/parse/Symbol.hpp b/include/cru/parse/Symbol.hpp
index e22fb9bc..7404a5e7 100644
--- a/include/cru/parse/Symbol.hpp
+++ b/include/cru/parse/Symbol.hpp
@@ -1,11 +1,13 @@
#pragma once
+#include "Base.hpp"
+
#include "cru/common/String.hpp"
namespace cru::parse {
class Grammar;
// Base class of Terminal and Nonterminal.
-class Symbol : public Object {
+class CRU_PARSE_API Symbol : public Object {
public:
explicit Symbol(Grammar* grammar, String name);
diff --git a/include/cru/parse/Terminal.hpp b/include/cru/parse/Terminal.hpp
index 8d4a31b6..4ff8f898 100644
--- a/include/cru/parse/Terminal.hpp
+++ b/include/cru/parse/Terminal.hpp
@@ -2,7 +2,7 @@
#include "Symbol.hpp"
namespace cru::parse {
-class Terminal : public Symbol {
+class CRU_PARSE_API Terminal : public Symbol {
public:
Terminal(Grammar* grammar, String name);
diff --git a/include/cru/parse/TokenType.hpp b/include/cru/parse/TokenType.hpp
index 54bdf712..49415d3b 100644
--- a/include/cru/parse/TokenType.hpp
+++ b/include/cru/parse/TokenType.hpp
@@ -1,9 +1,11 @@
#pragma once
+#include "Base.hpp"
+
#include "cru/common/Base.hpp"
#include "cru/common/String.hpp"
namespace cru::parse {
-class TokenType : public Object {
+class CRU_PARSE_API TokenType : public Object {
public:
explicit TokenType(String name);