diff --git a/src/language/ASTNodeDataTypeBuilder.cpp b/src/language/ASTNodeDataTypeBuilder.cpp
index 1857b73ab506fccaf748c21943c2566cd0fc0776..05cbe470300b4f98b092c1193f90ce63a0e719c0 100644
--- a/src/language/ASTNodeDataTypeBuilder.cpp
+++ b/src/language/ASTNodeDataTypeBuilder.cpp
@@ -44,6 +44,8 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n)
           data_type = ASTNodeDataType::double_t;
         } else if (type_node.is_type<language::string_type>()) {
           data_type = ASTNodeDataType::string_t;
+        } else if (type_node.is_type<language::type_expression>()) {
+          data_type = ASTNodeDataType::typename_t;
         }
 
         Assert(data_type != ASTNodeDataType::undefined_t);   // LCOV_EXCL_LINE
diff --git a/src/language/PEGGrammar.hpp b/src/language/PEGGrammar.hpp
index bc2556cdc011eb169e7ba11b2f3b67ede9db87b4..f3d245ecd131b11806b0c14748415892c8a68297 100644
--- a/src/language/PEGGrammar.hpp
+++ b/src/language/PEGGrammar.hpp
@@ -71,6 +71,8 @@ struct basic_type : sor < B_set, R_set, Z_set, N_set, string_type > {};
 
 struct TYPESPECIFIER : seq< basic_type, ignored> {};
 
+struct type_expression : list_must< TYPESPECIFIER, one< '*' > >{};
+
 struct and_kw :  TAO_PEGTL_KEYWORD("and") {};
 struct or_kw :  TAO_PEGTL_KEYWORD("or") {};
 
@@ -205,18 +207,17 @@ struct logical_or : list_must< logical_and, or_op >{};
 
 struct expression : logical_or {};
 
-struct affect_op : sor< eq_op, multiplyeq_op, divideeq_op, pluseq_op, minuseq_op > {};
+struct expression_list : seq< open_parent, expression, plus< if_must< COMMA, expression > >, close_parent >{};
 
-struct affectation : seq< NAME , if_must< affect_op, expression > >{};
+struct affect_op : sor< eq_op, multiplyeq_op, divideeq_op, pluseq_op, minuseq_op > {};
 
-struct declaration : if_must< TYPESPECIFIER, NAME, opt< if_must< seq< one< '=' >, ignored >, expression > > >{};
+struct affectation : seq< NAME , if_must< affect_op,  sor< expression_list, expression > > >{};
 
-struct type_expression : list_must< TYPESPECIFIER, one< '*' > >{};
+struct declaration : if_must< type_expression, NAME, opt< if_must< seq< one< '=' >, ignored >, sor< expression_list, expression > > > >{};
 
 struct type_mapping : seq< type_expression, RIGHT_ARROW, type_expression >{};
 
 struct name_list : seq< open_parent, list_must< NAME, COMMA >, close_parent >{};
-struct expression_list : seq< open_parent, expression, plus< if_must< COMMA, expression > >, close_parent >{};
 
 struct function_definition : seq< sor< name_list, NAME >, RIGHT_ARROW, sor< expression_list, expression > >{};