diff --git a/src/language/ASTNodeBuiltinFunctionExpressionBuilder.cpp b/src/language/ASTNodeBuiltinFunctionExpressionBuilder.cpp
index 4bb46ce18210f0d4458dd611c98c7fd3cebac026..532644d681473da893d5b7275d1081e367da1385 100644
--- a/src/language/ASTNodeBuiltinFunctionExpressionBuilder.cpp
+++ b/src/language/ASTNodeBuiltinFunctionExpressionBuilder.cpp
@@ -147,12 +147,8 @@ ASTNodeBuiltinFunctionExpressionBuilder::_buildArgumentProcessors(
     throw parse_error(error_message.str(), argument_nodes.begin());
   }
 
-  if (arguments_number > 1) {
-    for (size_t i = 0; i < arguments_number; ++i) {
-      this->_storeArgumentProcessor(parameter_type_list, flattened_datatype_list, i, _processor);
-    }
-  } else {
-    this->_storeArgumentProcessor(parameter_type_list, flattened_datatype_list, 0, _processor);
+  for (size_t i = 0; i < arguments_number; ++i) {
+    this->_storeArgumentProcessor(parameter_type_list, flattened_datatype_list, i, _processor);
   }
 }
 
diff --git a/src/language/BuiltinFunctionEmbedder.hpp b/src/language/BuiltinFunctionEmbedder.hpp
index c0de8848941c18c3f792f3739fd5751aa1c7944b..643bfc7e068972948dca6158cbb4c3fbd997fd72 100644
--- a/src/language/BuiltinFunctionEmbedder.hpp
+++ b/src/language/BuiltinFunctionEmbedder.hpp
@@ -167,4 +167,47 @@ class BuiltinFunctionEmbedder : public IBuiltinFunctionEmbedder
   }
 };
 
+template <typename FX>
+class BuiltinFunctionEmbedder<FX, void> : public IBuiltinFunctionEmbedder
+{
+ private:
+  std::function<FX(void)> m_f;
+
+ public:
+  PUGS_INLINE ASTNodeDataType
+  getReturnDataType() const final
+  {
+    return ast_node_data_type_from<FX>;
+  }
+
+  PUGS_INLINE std::vector<ASTNodeDataType>
+  getParameterDataTypes() const final
+  {
+    return {};
+  }
+
+  PUGS_INLINE size_t
+  numberOfParameters() const final
+  {
+    return 0;
+  }
+
+ public:
+  PUGS_INLINE
+  DataVariant
+  apply(const std::vector<DataVariant>&) const final
+  {
+    if constexpr (std::is_arithmetic_v<FX>) {
+      return {m_f()};
+    } else if constexpr (std::is_same_v<FX, void>) {
+      m_f();
+      return {};
+    } else {
+      return EmbeddedData(_createHandler(m_f()));
+    }
+  }
+
+  BuiltinFunctionEmbedder(std::function<void(void)> f) : m_f(f) {}
+};
+
 #endif   //  BUILTIN_FUNCTION_EMBEDDER_HPP
diff --git a/src/language/PEGGrammar.hpp b/src/language/PEGGrammar.hpp
index 12f3bcd498d55a9804d72fd30526b0d676befc87..b68a1dd76592987a57990e6dfbf3cac602592b3f 100644
--- a/src/language/PEGGrammar.hpp
+++ b/src/language/PEGGrammar.hpp
@@ -149,7 +149,7 @@ struct expression;
 struct parented_expression : if_must< open_parent, expression, close_parent >{};
 
 struct tuple_expression;
-struct function_argument_list : if_must< open_parent, list_must< sor< tuple_expression, expression >, COMMA >, close_parent >{};
+struct function_argument_list : if_must< open_parent, opt< list_must< sor< tuple_expression, expression >, COMMA > >, close_parent >{};
 struct function_evaluation : seq< NAME, function_argument_list > {};
 
 struct primary_expression : sor< BOOL, REAL, INTEGER, LITERAL, function_evaluation, NAME, parented_expression > {};