´echoue.
Exercice 4
Nous souhaitons maintenant faire la g´en´eration de code C pour les op´erations bool´eennes binaires. En
reprenant les fichiers Cgenerator.java et CgenEnvironment.java expliquez pourquoi le programme de
l’exercice 3 ne se compile pas. Faites en sorte de pouvoir produire un programme C.
Exercice 5
Nous devons maintenant ajouter dans le runtime C d’ILP les implantations n´ecessaires pour pouvoir ex´ecuter
l’appel que nous venons de g´en´erer. Modifier les fihciers ilp.h et ilp.c de fa¸con `a ajouter les op´erations
manquantes.
Exercice 6
Nous pouvons maintenant interpr´eter et compiler des programmes contenant des «et »logiques. Pour
implanter le «ou »nous pouvons nous aider des lois Morgan et implanter a«ou »b`a l’aide de
«non »(«non »a«et » « non »b)
Exercice 7
il y a 16 op´erations bool´eennnes `a deux arguments, il nous reste deux op´erations usuelles `a implanter qui
sont le «xor »et le «nand ». Le ou exclusif se note souvent +ou != et nous pouvons utiliser la syntaxe ^
pour le «nand ». On rappelle que a«nand »bvaut !(a&b). Comment impl´ementer ces notations ?
Exercice 8
Nous avons jusqu’`a maintenant impl´ement´e une strat´egie d’´evaluation et de compilation pour les op´erations
logiques dans laquelle les arguments sont compl`etements ´evalu´es, elle se nomme la full evaluation. Toutefois
chacun sait que les valeurs «vrai »et «faux »poss`edent des propri´et´es remarquables pour les op´erations
«et »et «ou ». Ainsi dans a«et »b, si aest «faux »il n’est pas n´ecessaire d’´evaluer bpour retourner
«faux ». De mˆeme dans a«ou »b, si aest «vrai », il n’est pas n´ecessaire d’´evaluer bpour retourner «vrai ».
La valeur «faux »est dite absorbante pour l’op´eration «et », et la valeur «vrai »est dite absorbante pour
l’op´eration «ou ».
Ainsi certains langages de programmation impl´ementent une strat´egie de lazy evaluation qui consiste `a
ne pas ´evaluer le deuxi`eme argument lorsque le r´esultat de l’´evaluation du premier argument est l’absorbant
de l’op´eration. Ainsi, dans une syntaxe `a la ML, un code
a&b
est ´equivalent `a
if athen belse a
Question 8.1
Voyons d’abord l’´evaluateur. Pourquoi ne pouvons nous pas modifier CommonPlus.java pour impl´ementer
cette strat´egie ? Faire les modifications n´ecessaires pour l’impl´ementer.
Question 8.2
Voyons maintenant la g´en´eration de code C. Pourquoi ne peut-on pas se contenter de modifier le runtime
d’ILP ? Faire les modifications n´ecessaires pour implanter la strat´egie d’´evaluation paresseuse.
Question 8.3
Donner des exemples de programmes qui s’´evaluent,se compilent et s’ex´ecutent correctement avec la s´emantique
d’´evaluation paresseuse du «et »logique alors que ce ne serait pas le cas avec sa s´emantique d’´evaluation
compl`ette.
Question 8.4
Comment se comporte la d´efinition du «ou »logique de l’exercice 6 vis `a vis de l ´evaluation paresseuse ?
Pouvez vous y rem´edier ?
2