Études-translate/Généraliser la reconnaissance des varexp

From Lazi wiki
Jump to: navigation, search

Question

L'implémentation actuelle pose des problèmes :

  • On veut créer des varexp quand il y a des accès à la structure qui se font sans variable intermédiaire. En plus de compliquer le code cela peut gêner le programmeur car il n'a pas forcément envie de passer par des varexp.
  • Il y a une certaine redondance dans le code, comme on pourra étendre le système, il serrait bon de factoriser le code.
  • Pour le cas des varexp de dictionnaires, la transformation en SourceFm est faite trop tôt et il faut alors travailler sur des expressions plus riches. On loupe actuellement les expressions "Let".

Est-il bon de réduire les cas de reconnaissance ? De factoriser le code ?

Étude

Réduction des cas

Ca me semble mieux de réduire aux cas simples. Cela reconnaît les varexps provenant de leur traduction en ComputeFm. Et si le programmeur ne veut pas les utiliser alors il n'y aura pas d'introduction.

La traduction des varexps engendre des accès à des structures en argument de fonctions. Si on se trouve dans ce cas on peut remplacer les autres accès aux structures car ça ne fait que simplifier le code puisque la variable correspondante existe déjà.

Factorisation du code

Pas de factorisation totale

factorisation totale = Il n'y a plus qu'une fonction et une liste de structure pour les paramètres des différentes notations.

Il y a des cas particuliers, comme par exemple la notation liste, donc la factorisation totale ne marcherait pas bien en plus de contraindre à un modèle de fonctionnement prédéfini.

Les fonctions à définir

Reconnaissance des arguments

Il est possible de faire une fonction ayant pour paramètre une fonction de reconnaissance des bons arguments qui retourne un objet (servant à identifier ce qui est reconnu, son type doit dérivé de Ord). La fonction retourne la liste des objets trouvés ou liste vide en cas d'erreur. Une erreur peut provenir un doublon dans les identifiants. La fonction retourne aussi le reste de l'expression privée des arguments.

Association argument / variable

D'après les valeurs retournés par l'expression précédente cette fonction fait l'association entre les variables de la fonction et les arguments. On doit d'abord transformer l'expression en SourceFm pour pouvoir faire l'association avec des varexps. Elle retourne aussi ce qui reste de l'expression.

Calcul de la nouvelle expression

Cette fonction prend en argument :

  • Le nom de la variable représentant la structure.
  • Les deux arguments retournés par la fonction précédente.
  • Une fonction qui calcul le varexp à partir de la liste liste retournée par la fonction précédente.

Réponse

  • On se limite aux accès avec variable associée.
  • On factorise le code mais pas totalement.