Skip to content
Snippets Groups Projects
Commit 5022c5d9 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add ASTNodeExpressionBuilder class

Also removed useless nesting to the `language` namespace
parent 6017b413
No related branches found
No related tags found
1 merge request!37Feature/language
Showing with 12 additions and 42 deletions
......@@ -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
......@@ -3,12 +3,9 @@
#include <ASTNode.hpp>
namespace language
{
struct ASTNodeAffectationExpressionBuilder
{
ASTNodeAffectationExpressionBuilder(ASTNode& node);
};
} // namespace language
#endif // AST_NODE_AFFECTATION_EXPRESSION_BUILDER_HPP
......@@ -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
......@@ -3,12 +3,9 @@
#include <ASTNode.hpp>
namespace language
{
struct ASTNodeBinaryOperatorExpressionBuilder
{
ASTNodeBinaryOperatorExpressionBuilder(ASTNode& node);
};
} // namespace language
#endif // AST_NODE_BINARY_OPERATOR_EXPRESSION_BUILDER_HPP
......@@ -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
......@@ -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
......@@ -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
......@@ -3,12 +3,9 @@
#include <ASTNode.hpp>
namespace language
{
struct ASTNodeIncDecExpressionBuilder
{
ASTNodeIncDecExpressionBuilder(ASTNode& node);
};
} // namespace language
#endif // AST_NODE_INC_DEC_EXPRESSION_BUILDER_HPP
......@@ -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
......@@ -3,12 +3,9 @@
#include <ASTNode.hpp>
namespace language
{
struct ASTNodeUnaryOperatorExpressionBuilder
{
ASTNodeUnaryOperatorExpressionBuilder(ASTNode& node);
};
} // namespace language
#endif // AST_NODE_UNARY_OPERATOR_EXPRESSION_BUILDER_HPP
......@@ -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';
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment