protected void createSymbolTableFromAST(
      ASTHost ast,
      String modelName,
      MutableScope enclosingScope,
      ResolverConfiguration resolverConfiguration) {
    final CompositeSymbolTableCreator symbolTableCreator =
        getModelingLanguage()
            .getSymbolTableCreator(resolverConfiguration, enclosingScope)
            .orElse(null);

    if (symbolTableCreator != null) {
      Log.debug(
          "Start creation of symbol table for model \"" + modelName + "\".",
          CompositeModelLoader.class.getSimpleName());
      final Scope scope = symbolTableCreator.createFromAST(ast);

      if (!(scope instanceof ArtifactScope)) {
        Log.warn(
            "Top scope of model "
                + modelName
                + " is expected to be an artifact scope, but"
                + " is scope \""
                + scope.getName()
                + "\"");
      }

      Log.debug(
          "Created symbol table for model \"" + modelName + "\".",
          CompositeModelLoader.class.getSimpleName());
    } else {
      Log.warn(
          "No symbol created, because '"
              + getModelingLanguage().getName()
              + "' does not define a symbol table creator.");
    }
  }