def visit_FunctionCall(self, node):
        """Visitor for `FunctionCall` AST node."""
        function_name = node.identifier.name
        call = self.table[function_name]
        if call is None:
            raise SementicError(f"Function `{function_name}` not declared.")
        else:
            call = call._node

        if isinstance(call, AST):
            if len(call.parameters) != len(node.parameters):
                raise SementicError(
                    "Mismatch between call and function parameters number."
                )

            current_table = self.table.stack.current
            functions_in_table = {
                key: current_table[key]
                for key in current_table
                if isinstance(current_table[key], FunctionSymbol)
            }

            if self.table.name == function_name:
                # End the visit in case of recursion
                return

            self.table.append_table(function_name, **functions_in_table)
            self.visit(call)
            self.table.pop_table()
Visitor for `FunctionCall` AST node.