Differences

This shows you the differences between two versions of the page.

Link to this comparison view

alf:laboratoare:08_fr_java [2023/05/02 01:36]
alexandra.negoita02 [Exercises]
alf:laboratoare:08_fr_java [2023/05/02 10:24] (current)
alexandra.negoita02 [Exercises]
Line 1: Line 1:
 ====== TP 8 - Génération de code ====== ====== TP 8 - Génération de code ======
 +<note warning>
 +Vous devez **accepter** l'​assignment d'ici est travailler avec ce **repository**:​ [[https://​classroom.github.com/​a/​77p5JNmk|Lab 8]]
 +</​note>​
  
 ===== Three Address Code ===== ===== Three Address Code =====
Line 117: Line 120:
 ; ;
 </​code>​ </​code>​
- 
-<code javascript index.js>​ 
-import { ASTNode } from "​./​index";​ 
-import symbol_tree from '​./​index';​ 
-import { Expression, ValueNode, AttributionNode,​ FunctionCallNode } from '​./​index';​ 
- 
-var variable_id = 0; 
- 
-let results: string[] = []; 
-function nextVar () 
-{ 
-    return '​var'​ + variable_id++;​ 
-} 
-  
-  
-function writeThreeAddressCode (node) 
-{ 
-    if (node.id === '​StatementsNode'​) 
-    { 
-        for (var statement of node.statements) 
-        { 
-            writeThreeAddressCode(statement);​ 
-        } 
-    } 
-    else 
-    if (node instanceof FunctionCallNode) 
-    { 
-        /**TODO: 
-         * generate the three address code for each parameter of the node.parameters array 
-         * write on the screen the three address code for each parameter 
-         * node.result will be nextVar() 
-         * write on the screen the three address code for function call 
-         */ 
-    } 
-    else 
-    if (node instanceof ValueNode) 
-    { 
-        // the result for a number is the number itself 
-        node.result = node.value; 
-    } 
-    else 
-    if (node instanceof AttributionNode) 
-    { 
-        /** TODO:  
-         * generate the three address code for node.value 
-         * write on the screen the three address code for an attribution*/​ 
-    } 
-    else 
-    if (node instanceof Expression) 
-    { 
-        if (node.left !== undefined && node.right !== undefined) 
-        { 
-            writeThreeAddressCode (node.left);​ 
-            writeThreeAddressCode (node.right);​ 
- 
-            // node.left.result is the result of node.left 
-            // node.right.result is the result of node.right 
-            ​ 
-            /** TODO:  
-             * node.result will be nextVar() 
-             * write on the screen the three address code based on result, left result, right result and operator*/ 
-        } 
-    } 
-} 
-  
-var ast = parser.parse (str); 
-console.log (JSON.stringify(ast,​ null, 4)); 
- 
-writeThreeAddressCode(ast);​ 
-  
- 
-</​code>​ 
- 
  
 ===== Exercises ===== ===== Exercises =====
  
   - Dans le fichier **ex1.txt** écrivez le //three address code// pour les expressions suivantes (**1p**)   - Dans le fichier **ex1.txt** écrivez le //three address code// pour les expressions suivantes (**1p**)
-    * (4+2)/5-3 
     * (4+2)/5-3     * (4+2)/5-3
     * e = (a-2)+(a-5)     * e = (a-2)+(a-5)
Line 218: Line 147:
   - Écrivez un programme qui écrit le Three Address Code pour le noeud //​AttributionNode//​ et vérifiez la corectitude avec le fichier //​ex5.txt//​(**2p**)   - Écrivez un programme qui écrit le Three Address Code pour le noeud //​AttributionNode//​ et vérifiez la corectitude avec le fichier //​ex5.txt//​(**2p**)
   - É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**)
-  - **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**)+  - **BONUS: **Pour résoudre cet exercice, on vous recommande de créer un nouveau fichier, ''​ThreeAddressCodeBonus.java'',​ 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 ​Main.java 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>​
 { {
alf/laboratoare/08_fr_java.1682980562.txt.gz · Last modified: 2023/05/02 01:36 by alexandra.negoita02
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0