This shows you the differences between two versions of the page.
alf:laboratoare:08 [2021/04/25 23:56] diana.ghindaoanu |
alf:laboratoare:08 [2022/05/02 19:26] (current) diana.ghindaoanu [Exercises] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== TP 9 - Génération de code ====== | + | ====== TP 8 - Génération de code ====== |
===== Three Address Code ===== | ===== Three Address Code ===== | ||
Line 194: | Line 194: | ||
- Dans un fichier **ex1.txt** écrivez le //three address code// pour les expressions suivantes (**1p**) | - Dans un fichier **ex1.txt** écrivez le //three address code// pour les expressions suivantes (**1p**) | ||
- | * 3-5/(4+8) | + | * (4+2)/5-3 |
- | * a = 2*7/(2-3) | + | * (4+2)/5-3 |
- | * e = (b+5)/(7-a) | + | * e = (a-2)+(a-5) |
- Dans un fichier **ex2.txt** écrivez le //three address code// pour le programme suivant (**1p**) <code javascript> | - Dans un fichier **ex2.txt** écrivez le //three address code// pour le programme suivant (**1p**) <code javascript> | ||
- | if (a == 0) | + | if (a > 0) |
{ | { | ||
- | result = 'null'; | + | result = 'positive'; |
} | } | ||
else | else | ||
{ | { | ||
- | result = 'not null'; | + | result = 'negative'; |
} | } | ||
</code> | </code> | ||
- Dans un fichier **ex3.txt** écrivez le //three address code// pour le programme suivant (**1p**) <code javascript> | - Dans un fichier **ex3.txt** écrivez le //three address code// pour le programme suivant (**1p**) <code javascript> | ||
- | function power (base, exp) | + | function double (nr) |
{ | { | ||
- | return base ^ exp; | + | return nr*2; |
} | } | ||
- | + | ||
- | power (4/2, 5); | + | double (7/2); |
</code> | </code> | ||
- Téléchargez [[https://github.com/UPB-FILS-ALF/TP/tree/main/TP8 | la structure]] du tp. Pour les exercices suivants vous devez modifier seulement le contenu du fichier et **three_address_code.ts**. Exécutez le parser du laboratoire et écrivez un programme qui génere le three address code pour le noeud //expression// et vérifiez avec le fichier //ex4.txt// (**Indice**: Pour nommer les variables temporaires, vous pouvez prendre un compteur global que vous incrémentez chaque fois que vous avez besoin d'une autre variable). (**2p**) | - Téléchargez [[https://github.com/UPB-FILS-ALF/TP/tree/main/TP8 | la structure]] du tp. Pour les exercices suivants vous devez modifier seulement le contenu du fichier et **three_address_code.ts**. Exécutez le parser du laboratoire et écrivez un programme qui génere le three address code pour le noeud //expression// et vérifiez avec le fichier //ex4.txt// (**Indice**: Pour nommer les variables temporaires, vous pouvez prendre un compteur global que vous incrémentez chaque fois que vous avez besoin d'une autre variable). (**2p**) | ||
Line 219: | Line 219: | ||
- Écrivez un programme qui écrit le three address code pour le noeud //FunctionCall// et testez avec le fichier //ex6.txt//(**2p**) | - Écrivez un programme qui écrit le three address code pour le noeud //FunctionCall// et testez avec le fichier //ex6.txt//(**2p**) | ||
- Au lieu d'écrire sur l'écran, ajoutez le three address code dans un tableau. A la fin, affichez le tableau sur l'écran. (**1p**) | - Au lieu d'écrire sur l'écran, ajoutez le three address code dans un tableau. A la fin, affichez le tableau sur l'écran. (**1p**) | ||
- | - **BONUS: **Pour résoudre cet exercice, on vous recommande de créer un nouveau fichier index_bonus.js, pour pouvoir modifier la structure sans supprimer les exercices précedents. Ajoutez le type à chaque argument dans le tableau. Les types sont: nombre, identifier, string, temp (une valeur temporaire). Pour chaque valeur temporaire, ajoutez la ligne où elle est assignée dans le three address code. Modifiez la structure du fichier index.js de facon que, si vous testez avec le fichier **ex8.txt**, vous obteniez le resultat suivant.(**2p**) | + | - **BONUS: **Pour résoudre cet exercice, on vous recommande de créer un nouveau fichier, ''tac_bonus.ts'', pour pouvoir modifier la structure sans supprimer les exercices précedents. Ajoutez le type à chaque argument dans le tableau. Les types sont: nombre, identifier, string, temp (une valeur temporaire). Pour chaque valeur temporaire, ajoutez la ligne où elle est assignée dans le three address code. Modifiez la structure du fichier index.js de facon que, si vous testez avec le fichier **ex8.txt**, vous obteniez le resultat suivant.(**2p**) |
<spoiler AST><code javascript> | <spoiler AST><code javascript> | ||
{ | { |