From 5022c5d9afb9b1a8de6d61dfc673cf17b1cf2930 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Mon, 29 Jul 2019 12:36:48 +0200 Subject: [PATCH] Add ASTNodeExpressionBuilder class Also removed useless nesting to the `language` namespace --- .../ASTNodeAffectationExpressionBuilder.cpp | 5 +---- .../ASTNodeAffectationExpressionBuilder.hpp | 3 --- .../ASTNodeBinaryOperatorExpressionBuilder.cpp | 4 ---- .../ASTNodeBinaryOperatorExpressionBuilder.hpp | 3 --- src/language/ASTNodeExpressionBuilder.cpp | 16 ++++------------ src/language/ASTNodeExpressionBuilder.hpp | 9 ++++++--- src/language/ASTNodeIncDecExpressionBuilder.cpp | 3 --- src/language/ASTNodeIncDecExpressionBuilder.hpp | 3 --- .../ASTNodeUnaryOperatorExpressionBuilder.cpp | 3 --- .../ASTNodeUnaryOperatorExpressionBuilder.hpp | 3 --- src/language/PugsParser.cpp | 2 +- 11 files changed, 12 insertions(+), 42 deletions(-) diff --git a/src/language/ASTNodeAffectationExpressionBuilder.cpp b/src/language/ASTNodeAffectationExpressionBuilder.cpp index 60e4a5964..89a86a295 100644 --- a/src/language/ASTNodeAffectationExpressionBuilder.cpp +++ b/src/language/ASTNodeAffectationExpressionBuilder.cpp @@ -2,8 +2,6 @@ #include <PEGGrammar.hpp> #include <SymbolTable.hpp> -namespace language -{ template <typename Op> struct AffOp; @@ -145,7 +143,7 @@ class AffectationToStringProcessor final : public INodeProcessor } } } -}; // namespace language +}; ASTNodeAffectationExpressionBuilder::ASTNodeAffectationExpressionBuilder(ASTNode& n) { @@ -256,4 +254,3 @@ ASTNodeAffectationExpressionBuilder::ASTNodeAffectationExpressionBuilder(ASTNode throw parse_error("unexpected error: undefined affectation operator", std::vector{n.begin()}); } } -} // namespace language diff --git a/src/language/ASTNodeAffectationExpressionBuilder.hpp b/src/language/ASTNodeAffectationExpressionBuilder.hpp index 424ebed63..412e3e048 100644 --- a/src/language/ASTNodeAffectationExpressionBuilder.hpp +++ b/src/language/ASTNodeAffectationExpressionBuilder.hpp @@ -3,12 +3,9 @@ #include <ASTNode.hpp> -namespace language -{ struct ASTNodeAffectationExpressionBuilder { ASTNodeAffectationExpressionBuilder(ASTNode& node); }; -} // namespace language #endif // AST_NODE_AFFECTATION_EXPRESSION_BUILDER_HPP diff --git a/src/language/ASTNodeBinaryOperatorExpressionBuilder.cpp b/src/language/ASTNodeBinaryOperatorExpressionBuilder.cpp index c6cd1e4af..8309bf1b4 100644 --- a/src/language/ASTNodeBinaryOperatorExpressionBuilder.cpp +++ b/src/language/ASTNodeBinaryOperatorExpressionBuilder.cpp @@ -4,8 +4,6 @@ #include <type_traits> -namespace language -{ template <typename Op> struct BinOp; @@ -370,5 +368,3 @@ ASTNodeBinaryOperatorExpressionBuilder::ASTNodeBinaryOperatorExpressionBuilder(A throw parse_error("unexpected error: undefined binary operator", std::vector{n.begin()}); } } - -} // namespace language diff --git a/src/language/ASTNodeBinaryOperatorExpressionBuilder.hpp b/src/language/ASTNodeBinaryOperatorExpressionBuilder.hpp index 3f38260f1..f6709c2db 100644 --- a/src/language/ASTNodeBinaryOperatorExpressionBuilder.hpp +++ b/src/language/ASTNodeBinaryOperatorExpressionBuilder.hpp @@ -3,12 +3,9 @@ #include <ASTNode.hpp> -namespace language -{ struct ASTNodeBinaryOperatorExpressionBuilder { ASTNodeBinaryOperatorExpressionBuilder(ASTNode& node); }; -} // namespace language #endif // AST_NODE_BINARY_OPERATOR_EXPRESSION_BUILDER_HPP diff --git a/src/language/ASTNodeExpressionBuilder.cpp b/src/language/ASTNodeExpressionBuilder.cpp index 703fd104e..93068490c 100644 --- a/src/language/ASTNodeExpressionBuilder.cpp +++ b/src/language/ASTNodeExpressionBuilder.cpp @@ -8,8 +8,6 @@ #include <PEGGrammar.hpp> #include <SymbolTable.hpp> -namespace language -{ class ASTNodeList final : public INodeProcessor { ASTNode& m_node; @@ -261,10 +259,8 @@ class OStreamObject final : public INodeProcessor } }; -namespace internal -{ void -build_node_type(ASTNode& n) +ASTNodeExpressionBuilder::_buildExpression(ASTNode& n) { if (n.is_root() or n.is<language::bloc>()) { n.m_node_processor = std::make_unique<ASTNodeList>(n); @@ -343,20 +339,16 @@ build_node_type(ASTNode& n) } for (auto& child : n.children) { - internal::build_node_type(*child); + this->_buildExpression(*child); } } -} // namespace internal -void -build_node_type(ASTNode& n) +ASTNodeExpressionBuilder::ASTNodeExpressionBuilder(ASTNode& n) { Assert(n.is_root()); - Assert(n.is<void>()); n.m_node_processor = std::make_unique<ASTNodeList>(n); for (auto& child : n.children) { - internal::build_node_type(*child); + this->_buildExpression(*child); } std::cout << " - build node types\n"; } -} // namespace language diff --git a/src/language/ASTNodeExpressionBuilder.hpp b/src/language/ASTNodeExpressionBuilder.hpp index 861aac073..bf6d5a79a 100644 --- a/src/language/ASTNodeExpressionBuilder.hpp +++ b/src/language/ASTNodeExpressionBuilder.hpp @@ -3,9 +3,12 @@ #include <ASTNode.hpp> -namespace language +class ASTNodeExpressionBuilder { -void build_node_type(ASTNode& n); -} + void _buildExpression(ASTNode& n); + + public: + ASTNodeExpressionBuilder(ASTNode& n); +}; #endif // AST_NODE_EXPRESSION_BUILDER_HPP diff --git a/src/language/ASTNodeIncDecExpressionBuilder.cpp b/src/language/ASTNodeIncDecExpressionBuilder.cpp index ec11df799..cae715aef 100644 --- a/src/language/ASTNodeIncDecExpressionBuilder.cpp +++ b/src/language/ASTNodeIncDecExpressionBuilder.cpp @@ -2,8 +2,6 @@ #include <PEGGrammar.hpp> #include <SymbolTable.hpp> -namespace language -{ template <typename Op> struct IncDecOp; @@ -163,4 +161,3 @@ ASTNodeIncDecExpressionBuilder::ASTNodeIncDecExpressionBuilder(ASTNode& n) throw parse_error("unexpected error: undefined increment/decrement operator", std::vector{n.begin()}); } } -} // namespace language diff --git a/src/language/ASTNodeIncDecExpressionBuilder.hpp b/src/language/ASTNodeIncDecExpressionBuilder.hpp index 6816a087c..5ca8938d9 100644 --- a/src/language/ASTNodeIncDecExpressionBuilder.hpp +++ b/src/language/ASTNodeIncDecExpressionBuilder.hpp @@ -3,12 +3,9 @@ #include <ASTNode.hpp> -namespace language -{ struct ASTNodeIncDecExpressionBuilder { ASTNodeIncDecExpressionBuilder(ASTNode& node); }; -} // namespace language #endif // AST_NODE_INC_DEC_EXPRESSION_BUILDER_HPP diff --git a/src/language/ASTNodeUnaryOperatorExpressionBuilder.cpp b/src/language/ASTNodeUnaryOperatorExpressionBuilder.cpp index 60160b95e..9112ad553 100644 --- a/src/language/ASTNodeUnaryOperatorExpressionBuilder.cpp +++ b/src/language/ASTNodeUnaryOperatorExpressionBuilder.cpp @@ -2,8 +2,6 @@ #include <PEGGrammar.hpp> #include <SymbolTable.hpp> -namespace language -{ template <typename Op> struct UnaryOp; @@ -117,4 +115,3 @@ ASTNodeUnaryOperatorExpressionBuilder::ASTNodeUnaryOperatorExpressionBuilder(AST throw parse_error("unexpected error: undefined unary operator", std::vector{n.begin()}); } } -} // namespace language diff --git a/src/language/ASTNodeUnaryOperatorExpressionBuilder.hpp b/src/language/ASTNodeUnaryOperatorExpressionBuilder.hpp index 59ad3022e..3e75ef2ef 100644 --- a/src/language/ASTNodeUnaryOperatorExpressionBuilder.hpp +++ b/src/language/ASTNodeUnaryOperatorExpressionBuilder.hpp @@ -3,12 +3,9 @@ #include <ASTNode.hpp> -namespace language -{ struct ASTNodeUnaryOperatorExpressionBuilder { ASTNodeUnaryOperatorExpressionBuilder(ASTNode& node); }; -} // namespace language #endif // AST_NODE_UNARY_OPERATOR_EXPRESSION_BUILDER_HPP diff --git a/src/language/PugsParser.cpp b/src/language/PugsParser.cpp index f37b16f8a..3c5b8ec4c 100644 --- a/src/language/PugsParser.cpp +++ b/src/language/PugsParser.cpp @@ -75,7 +75,7 @@ parser(const std::string& filename) ASTNodeDeclarationToAffectationConverter{*root_node}; ASTNodeDeclarationCleaner{*root_node}; - language::build_node_type(*root_node); + ASTNodeExpressionBuilder{*root_node}; std::cout << ASTPrinter{*root_node} << '\n'; -- GitLab