Differences

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

Link to this comparison view

alf:laboratoare:08_fr_java [2023/05/01 16:05]
alexandra.negoita02 created
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 un 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)
-  - Dans un fichier **ex2.txt** écrivez le //three address code// pour le programme suivant (**1p**) <code javascript>​+  - Dans le fichier **ex2.txt** écrivez le //three address code// pour le programme suivant (**1p**) <code javascript>​
 if (a > 0) if (a > 0)
 { {
Line 215: Line 144:
 double (7/2); 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**) +  - Pour les exercices suivants vous devez modifier seulement le contenu du fichier et **ThreeAddressCode.java**. 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 ​- nextVarName()). (**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 //​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**) 
-  - 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, ''​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**)
-  - **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>​
 { {
-    ​"​ast":​ { +  ​"​ast":​ { 
-        "​statements":​ [ +    "​statements":​ [ 
-            +      
-                "​variable":​ "​_s",​ +        "​variable":​ "​_s",​ 
-                "​value":​ { +        "​value":​ { 
-                    "​op":​ "​-",​ +          "​left":​ { 
-                    ​"​left":​ { +            "​left":​ { 
-                        "​op":​ "​*",​ +              "​value":​ 1, 
-                        ​"​left":​ { +              "​id":​ "​value",​ 
-                            "​value":​ 1, +              "​type":​ "​int",​ 
-                            "​line":​ 1, +              "​line":​ 1
-                            "​type":​ "​int",​ +
-                            ​"​id": ​"​ValueNode"​ +
-                        }, +
-                        "​right":​ { +
-                            ​"​value"​: 4, +
-                            "​line":​ 1+
-                            "​type":​ "​int",​ +
-                            "​id":​ "​ValueNode"​ +
-                        }, +
-                        ​"​line":​ 1+
-                        "​type":​ "​int",​ +
-                        "​id":​ "​Expression"​ +
-                    }, +
-                    "​right":​ { +
-                        "​value":​ 2, +
-                        "​line":​ 1, +
-                        "​type":​ "​int",​ +
-                        "​id":​ "​ValueNode"​ +
-                    }, +
-                    "​line":​ 1, +
-                    "​type":​ "​int",​ +
-                    "​id":​ "​Expression"​ +
-                }, +
-                "​line":​ 1, +
-                "​id":​ "​AttributionNode"​+
             },             },
-            { +            ​"​right": ​
-                "function_name": "_sum", +              "value": ​4, 
-                "parameters": ​[ +              ​"id": "value", 
-                    { +              "type": ​"​int",​ 
-                        ​"value": 1, +              "line": 1 
-                        "line": ​2+            }
-                        "type": "int", +            "op": ​"​*"​
-                        "id": "ValueNode+            "id": "expression", 
-                    }, +            "type": "int", 
-                    +            "​line":​ 1 
-                        "​value":​ "_s", +          ​}, 
-                        "​line": ​2+          "​right": ​
-                        "​type":​ "​int",​ +            "​value": ​2, 
-                        "​id":​ "ValueNode+            ​"id": "value", 
-                    +            "​type":​ "​int",​ 
-                ]+            ​"​line": ​
-                "​line":​ 2, +          }, 
-                "​id":​ "FunctionCallNode+          "​op":​ "​-",​ 
-            }+          "​id":​ "​expression"​
 +          "​type":​ "​int",​ 
 +          "​line":​ 1 
 +        }, 
 +        ​"​id":​ "attribution"
 +        "​line":​ 1 
 +      }, 
 +      { 
 +        "​functionName":​ "​_sum"​
 +        "​parameters":​ [ 
 +          { 
 +            "​value":​ 1, 
 +            "​id":​ "​value",​ 
 +            "​type":​ "​int",​ 
 +            ​"​line":​ 2 
 +          }
 +          { 
 +            "​value":​ "​_s",​ 
 +            ​"​id":​ "value", 
 +            ​"​type":​ "​int",​ 
 +            "​line":​ 2 
 +          ​}
         ],         ],
-        "line": ​1+        "id": ​"​functionCall"​
-        "​id":​ "StatementsNode+        ​"​line":​ 2 
-    }, +      } 
-    "symbol_table": { +    ], 
-        "​_s":​ { +    ​"​id":​ "statements", 
-            "​type":​ "​int"​ +    ​"​line":​ 1 
-        }+  ​}, 
 +  "​symbolTable":​ { 
 +    "symbolTable": { 
 +      "​_s":​ { 
 +        "​type":​ "​int"​ 
 +      }
     }     }
 +  }
 } }
 </​code>​ </​code>​
Line 331: Line 261:
 </​code>​ </​code>​
 </​spoiler>​ </​spoiler>​
- 
-<​hidden>​ 
-===== Solutions ===== 
- 
-[[https://​github.com/​upb-fils/​alf/​tree/​master/​TP/​TP9|Solutions]] 
-</​hidden>​ 
  
  
alf/laboratoare/08_fr_java.1682946317.txt.gz · Last modified: 2023/05/01 16:05 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