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 >> |