declare class Constante attr val meth init(C) val:=C end meth derive(V E) E={New Constante init(0)} end meth evalue(X) X=@val end end class Variable attr var meth init(X) var:=X end meth set(X) var:=X end meth derive(V E) if V==self then E={New Constante init(1)} else E={New Constante init(0)} end end meth evalue(X) X=@var end end class Somme attr expr1 expr2 meth init(E1 E2) expr1:=@E1 expr2:=@E2 end meth derive(V E) E1 E2 in {@expr1 derive(V E1)} {@expr2 derive(V E2)} E={New Somme init(E1 E2)} end meth evalue(?X) local X1 X2 in {@expr1 evalue(X1)} {@expr2 evalue(X2)} X=X1+X2 end end end