Changes between Version 4 and Version 5 of 2010CaoTme3


Ignore:
Timestamp:
Mar 20, 2010, 8:00:39 PM (15 years ago)
Author:
jpc
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • 2010CaoTme3

    v4 v5  
    177177En conclusion, la fonction récursive aura la structure générale suivante:
    178178
     179{{{
     180LITTERALS(e)
     181  IF e IS_A variable:
     182    RETURN 1
     183  ELSE
     184    sum = 0
     185    FOR EACH operand OF e:
     186      sum += LITTERALS(operand)
     187    RETURN sum
     188}}}
     189
    179190[[Image(Ebm-1.png)]]
     191
     192La figure suivante représente l'ordre dans lequel les noeud de l'arbre de l'{{{EBM}}}
     193sont parcourus lors d'une récursion.
     194
    180195[[Image(Ebm-2.png)]]
     196
     197État de la pile d'appel des fonctions a un instant donné du parcours récursif.
     198Le chemin actullement parcouru est {{{(e4,e1,a)}}}
     199
    181200[[Image(Ebm-3.png)]]
     201
     202La pile d'appel des fonctions membres à un instant donné.
     203
     204''Attention'' : il est très important de bien distinguer le code la fonction,
     205qui est écrit une fois (dans {{{Ebm}}}) et l' ''objet'' auquel elle s'applique.
     206Nous avons ainsi la même fonction membre {{display()}} mais sur trois objets
     207différents : {{{e4}}}, {{{e1}}} et {{{a}}}.
     208
    182209[[Image(Ebm-4.png)]]
    183210
     
    186213
    187214
     215Dans la présentation de la récursion, nous avons vu qu'il était nécessaire,
     216pour choisir entre la récursion et l'arrêt, de savoir distinguer une variable
     217({{{EbmVar}}}) d'une expression ({{{EbmExpr}}}).
     218
     219Pour cela nous allons implanter la fonction {{{getType()}}}.
     220
     221La fonction {{{getType()}}} a les caractéristiques suivantes:
     222 * Elle est déclarée virtuelle pure dans la classe {{{Ebm}}}, c'est à dire
     223   qu'elle '''doit''' être sur-définie dans les classes dérivées '''et'''
     224   qu'elle n'a aucune implémentation au niveau de la classe {{{Ebm}}}.
     225 * Dans la classe {{{EbmVar}}} elle retourne '''Variable'''.
     226 * Dans la classe {{{EbmExpr}}} elle retourne '''Expression'''.
     227
     228De cette façon, lorsqu'elle est appelée dans les fonctions récursives définies
     229dans {{{Ebm}}}, elle retournera la valeur associée au ''type dynamique'' de
     230l'{{{Ebm}}} en cours de traitement. C'est à dire {{{EbmVar}}} ou {{{EbmExpr}}}.
     231
    188232[[Image(Ebm-5.png)]]
    189233
    190234
    191235== Les ''templates'' {{{map<>}}} et {{{set<>}}} ==
     236