Nom

sci_files — Comment écrire des fonctions de conversion

Description

Pour convertir les appels à des fonctions Matlab, mfile2sci utilise une fonctions appelée sci_<nom_de_la_fonction_Matlab>. Toutes ces fonctions sont définies dans des sci_files dans le répertoire SCI/modules/m2sci/macros/sci_files/. La palette de sci_files fournie dans Scilab ne permet pas encore de convertir les appels à toutes les fonctions Matlab. Cependant, un utilisateur Scilab peut ajouter des sci_files (pour des fonctions Matlab ou pour ses propres fonctions) en utilisant les conseils suivants.

Dans M2SCI, un appel à une fonction est considéré comme un "arbre" (c'est aussi le cas des instructions du fichier à convertir), représenté dans Scilab par une tlist avec les champs suivants :

  • name

    nom de la fonction Matlab

    lhsnb

    nombre de paramètres de sortie de la fonction Matlab

    lhs

    liste des paramètres de sortie de la fonction Matlab

    rhs

    liste des paramètres d'entrée de la fonction Matlab

Une sci_function a un paramètre d'entrée tree qui est aussi la sortie de cette fonction. Une sci_function doit convertir cet arbre pour qu'il soit compatible avec Scilab en changeant name, lhsnb, lhs et/ou rhs. L'autre rôle de cette fonction est de gérer l'inférence. L'arbre d'entrée contient des données d'inférence dans ses rhs qui devront être mises à jour avec ce que l'on peut inférer pour les lhs de cette fonction.

Plusieurs fonctions ont été écrites pour aider à la rédaction de fonctions de conversion :

  • Funcall

    créé un arbre qui représente l'appel à une fonction

    Operation

    créé un arbre qui représente une opération

    Variable

    créé un arbre qui représente une variable

    Cste

    créé un arbre qui représente une constante

    Infer

    créé un arbre qui représente les données d'inférence

    Type

    créé un arbre qui représente le type pour l'inférence

    Equal

    créé un arbre qui représente une instruction

Quelques fonctions ont été écrites pour récupèrer les propriétés des opérandes/entrées. En considérant A comme une tlist utilisée dans l'arbre, vous pouvez utiliser les fonctions suivantes :

La fonction renvoie %T si...
is_empty(A) toutes les dimensions de A sont égales à 0
not_empty(A) toutes les dimensions de A sont connues et au moins une dimension de A est différente de 0
is_a_scalar(A) toutes les dimensions de A sont égales 1
not_a_scalar(A) toutes les dimensions de A sont connues et au moins une dimension de A est différente de 1
is_a_vector(A) toutes les dimensions de A sotn connues et toutes les dimensions de A sauf une sont égales à 1
not_a_vector(A) toutes les dimensions de A sotn connues et au moins deux dimensions de A sont supérieures à 1
is_real(A) A est réel
is_complex(A) A est complexe
isdefinedvar(A) A est une variable déjà définie dans le M-file en cours de conversion
allunknown(A) Toutes les dimensions de A sont inconnues

D'autres fonctions ont été écrites pour des besoins spécifiques lors de l'écriture de fonctions de conversion :

  • first_non_singleton

    est équivalente à firstnonsingleton pour une tlist M2SCI. Séquence d'appel : dim = first_non_singleton(A)

    gettempvar

    génére une variable temporaire portant une nom qui n'existe pas. Séquence d'appel : v = gettempvar()

    insert

    permet d'insérer des instruction. Séquence d'appel : insert(Equal(...),opt) avec opt~=1 pour insérer avan tl'instruction courante et opt=1 pour insérer après celle-ci.

    getoperands

    peut être utilisée pour extraire chaque opérande comme une variable. Séquence d'appel : [A,B] = getoperands(operation_tlist)

    getrhs

    peut être utilisée pour extraire chaque paramètre comme une variable. Séquence d'appel : [A,...] = getrhs(funcall_tlist)

    convert2double

    change le type de l'entrée quand ce type n'est pas implémenté pour une fonction particulière de Scilab. Séquence d'appel : A = convert2double(A)

Pour plus d'informations sur la façon d'écrire ces fichiers, consulter le répertoire SCI/modules/m2sci/macros/sci_files/ qui donne de nombreux exemples, des plus simples (e.g. sci_abs.sci) aux plus compliqués (e.g. sci_zeros.sci).

Voir Aussi

m2scideclare , Funcall , Operation , Variable , Cste , Infer , Type , Equal

Auteurs

V.C.