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 : m2sci_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 — Donner des indices pour aider M2SCI...
- Funcall — Crée le pseudo-code converti représentant l'appel à une fonction
- Operation — Génère le code interne Scilab représentant une opération
- Variable — Génère le code interne Scilab représentant une variable (sans sa valeur)
- Cste — Créé un arbre représentant une constante
- Infer — Créé un arbre contenant les données d'inférence
- Type — Crée un arbre contenant les données d'inférence de type
- Equal — Génère le code interne Scilab représentant une instruction "LHS = RHS"
Report an issue | ||
<< Operation | internals | Type >> |