let rec _Modification_Expr expr our_Hash_table nomModule =
match expr with
Binaire (exprL, binOp, exprR) ->
let gauche,modif1 = (_Modification_Expr exprL our_Hash_table nomModule)
in
let droite,modif2 = (_Modification_Expr exprR our_Hash_table nomModule)
in
(Binaire(gauche, binOp, droite), modif1 || modif2)
| Varia (id, sonT) ->
if sonT = Inconnu
then
(_Recherche_Type_Expr nomModule id our_Hash_table)
else
(Varia( id, sonT),false)
| Construct(_) ->
raise Cas_impossible
| Unaire (unOp, exprR) ->
let droite, modif = _Modification_Expr exprR our_Hash_table nomModule
in
(Unaire(unOp, droite),modif)
| Case([]) -> (Case([]),false)
| Case ((condition, exprR)::liste_case) ->
(match (_Modification_Expr (Case(liste_case)) our_Hash_table nomModule) with
Case(reste), modif1 ->
let gauche,modif2 = (_Modification_Expr condition our_Hash_table nomModule)
in
let droite,modif3 = (_Modification_Expr exprR our_Hash_table nomModule)
in
(Case((gauche, droite)::reste), (modif1 || modif2 || modif3))
| _ -> raise Cas_impossible)
| Num (i) -> (Num (i), false)
| Chaine(s) -> (Chaine(s), false)
| NotDet(liste) -> (NotDet(liste), false)
| Ensemble(_) -> raise Cas_impossible