diff --git a/src/language/ASTNodeAffectationExpressionBuilder.cpp b/src/language/ASTNodeAffectationExpressionBuilder.cpp
index 60e4a5964fdee4fd23f523ef7bc3714cbc4cecc8..89a86a2954bf09a85a9fc1496985769401c079b8 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 424ebed638a528a635c40f0443b7571083f7397f..412e3e048e05d1810ddf62e455797da09385ab7a 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 c6cd1e4af4a4be35823263a252967edb05f21440..8309bf1b49d1c8da76640b49712488c51ab40d45 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 3f38260f15055807598b2b148253db78500a5fff..f6709c2db06f780a86d5b4b7d2674668774c8ec0 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 703fd104ee892e3008822922cddcfc576c6e5f97..93068490c490abdb84f8e8dfe7b7e7ff13a712b9 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 861aac0731b95dcc98903dbc10eb003811049b49..bf6d5a79a16594d6e3adab17439310474655107c 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 ec11df799c63e25386e526e9ccc4697e2ecbc8c0..cae715aefe4e0f7020136888efd4aa306d653637 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 6816a087c1e0cda5a8d3d6a13ec6ecf5e07a1fb8..5ca8938d925949eed0c9819e1aff4bca21e86191 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 60160b95e697213388f8c06efb672d53f9f0f25e..9112ad5535611b1b406ddee7483fde3afc891f46 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 59ad3022ea285ad9144dfddfde756597a43c4a01..3e75ef2ef3f30c09f71741de50d8bd01c590937e 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 f37b16f8a1261382ad4ef893b508be5d7dc66c9f..3c5b8ec4c86774f2071dfd9dde552d1d14ec5cc2 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';