• Aucun résultat trouvé

Annexe : tableau des instructions mini-JS-machine

N/A
N/A
Protected

Academic year: 2022

Partager "Annexe : tableau des instructions mini-JS-machine"

Copied!
2
0
0

Texte intégral

(1)

Exercice 1 (Arithmetique).

1. Écrivez un code assembleur mini-JS-machine correcte pour l’expression arithmétique suivante :

25 + 2 * 3

On rappel qu’un code est correcte si le résultat de la machine correspond au résultat de javascipte sur toutes les entrées.

2. Écrivez un autre code correcte sur la même expression.

3. Simulez les deux codes et comparez leur efficacités. Discuter de l’intérêt de l’un et l’autre.

4. Écrivez la séquence de token de l’expression arithmétique suivante : z = Not (5e-2 + 7 * x + y >= 11. / .2 + - x * 7) $$

5. Écrivez son AST.

6. Écrivez un code assembleur.

7. Exécutez le sur une machine en supposant que x et y valent 2 au départ.

Exercice 2 (Conditionelles).

1. Écrivez un code assembleur mini-JS-machine correcte pour le code sui- vant en supposant que x est un Booléen :

If (x) y = False; Else y = x;

2. Écrivez un autre code correcte sur la même expression.

3. Simulez les deux codes avec les deux valeurs possibles de x à chaque fois et comparez leur efficacités. Discuter de l’intérêt de l’un et l’autre.

4. Écrivez la séquence de token du code suivant : Si (x >= 3 + - 1.5 && x < 200) {

y = 30 ; TantQue (y > x - 3) y = y-x ; } y = x;

5. Écrivez son AST.

6. Écrivez un code assembleur.

7. Exécutez le sur une machine en supposant quexvaut10.5 en entrée.

Exercice 3 (Classe inversée : typage dynamique).

1. Quel est le résultat de la ligne suivante en JS ? 2 + True >= (2 && False) ;

2. Écrivez un code assembleur mini-JS-machine correcte.

3. Écrivez un code pour la ligne suivante qui soit correcte que x soit un entier ou un Booléen :

If (x) y = False; Else y = x+1;

On a le droit aux instructionsTypeOfet Case.

4. Quel est le résultat de la ligne suivante en JS ? (Attention : les strings ne sont pas dans le projet cette année)

2 + " pièges" >= 1e3 + " test" ;

1

(2)

5. et en remplaçant6e10 par6e1000?

6. Écrivez un code pour la ligne suivante qui soit correcte que y et z soient des entiers, Booléen ou String :

x = y + z;

On a le droit à l’instruction Swap.

Annexe : tableau des instructions mini-JS-machine

Instruction sémantique pile avant pile après AddiNb Push(Pop+fPop); #n:#n:pile #n:pile SubsNb Push(Pop−fPop); #n:#n:pile #n:pile MultNb Push(Pop∗fPop); #n:#n:pile #n:pile DiviNb Push(Pop/fPop); #n:#n:pile #n:pile NegaNb Push(Pop∗f(−1)); #n:pile #n:pile NbToBe DoubleToBool(Pop); #n:pile #b:pile Equal Push(Pop==Pop); #v:#v:pile #b:pile LowEqR Push(Pop≤fPop); #n:#n:pile #b:pile GreStR Push(Pop>Pop); #n:#n:pile #b:pile

Instruction sémentique pile avant pile après

Jump offset PC:=PC+off+1; pile pile

ConJmp offset ifPop #b:pile pile

thenPC:=PC+1;

else PC:=PC+off+1;

Case p PC:=PC+p∗Floor(Pop) +1; #n:pile pile

CstNb x Push(x); pile #f:pile

CstBo x Push(x); pile #b:pile

Copy Push(Pull); X:pile X:X:pile

Swap #vx:=Pop; X:Y:pile Y:X:pile

#vy:=Pop;

Push(x);

Push(y);

Drop Pop; X:pile pile

TypeOf Pull une valeur, rend 0 sur un booleen, X:pile #n:X:pile 1 sur un flottant, 2 sur une string,

3 sur undefined, 4 sur une cloture, 5 sur un objet,

SetVar n Set(n,Pull); #v:pile pile

GetVar n Push(Get(n)) pile #v:pile

Concat Push(Pop+sPop); #s:#s:pile #s:pile

CstStr x Push(x); pile #s:pile

StToNb StringToDouble(Pop); #s:pile #n:pile

NbToSt DoubleToString(Pop); #n:pile #s:pile

2

Références

Documents relatifs

Si on ne connait pas la formule générale, mais on se souvient que le cercueil de Gauss a été bâti sur une base heptadécagonale comme hommage à sa belle découverte, il reste

Combien de chaussettes prendre pour être sûr d'avoir au moins une paire assortie?. Si je prends 18 chaussettes ou moins, je cours le risque qu’elles soient

84 1 La Section des écoles moyennes de l’Office de l’enseigne- ment secondaire du 2 e degré et de la formation professionnelle peut sur demande, pour des élèves ayant achevé

[r]

C’est pourquoi madame Bonheur a organisé une fête pour monsieur Tatillon et monsieur Sale qui ont en commun_________date de naissance!. Mes chaleureuses félicitations pour

Les cartes ont été marquées de...__________________ : verte pour moi et fuschia pour monsieur Sale.. Je pourrais surveiller les cadeaux si vous voulez pour être sûr qu’ils ne

Par exemple, lorsque l’on entre ces deux mots dans SUDOC, la base de données universitaire française rassemblant plus de 13 millions de notices biblio- graphiques, aucun résultat

Forme les deux réponses brèves possibles pour chaque question. -Do you