sci_files — Comment écrire des fonctions de conversion
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 :
nom de la fonction Matlab
nombre de paramètres de sortie de la fonction Matlab
liste des paramètres de sortie de la fonction Matlab
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 :
créé un arbre qui représente l'appel à une fonction
créé un arbre qui représente une opération
créé un arbre qui représente une variable
créé un arbre qui représente une constante
créé un arbre qui représente les données d'inférence
créé un arbre qui représente le type pour l'inférence
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 :
est équivalente à firstnonsingleton pour une tlist M2SCI. Séquence d'appel : dim = first_non_singleton(A)
génére une variable temporaire portant une nom qui n'existe pas. Séquence d'appel : v = gettempvar()
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.
peut être utilisée pour extraire chaque opérande comme une variable. Séquence d'appel : [A,B] = getoperands(operation_tlist)
peut être utilisée pour extraire chaque paramètre comme une variable. Séquence d'appel : [A,...] = getrhs(funcall_tlist)
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).