Differences

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

Link to this comparison view

alf:laboratoare:09_fr_java [2023/05/08 23:37]
alexandra.negoita02 created
alf:laboratoare:09_fr_java [2023/05/09 08:42] (current)
alexandra.negoita02
Line 1: Line 1:
 ====== TP 9 - Génération de code 2 ====== ====== TP 9 - Génération de code 2 ======
 +<note warning>
 +Vous devez **accepter** l'​assignment d'ici est travailler avec ce **repository**:​ [[https://​classroom.github.com/​a/​jipKda9e|Lab 9]]
 +</​note>​
  
 Dans le domaine informatique,​ le code de trois adresses (three address code) représente un code intermédiaire utilisé pour les compilateurs en tant que moyen d'​écrire des instructions. Chaque instruction consiste en: Dans le domaine informatique,​ le code de trois adresses (three address code) représente un code intermédiaire utilisé pour les compilateurs en tant que moyen d'​écrire des instructions. Chaque instruction consiste en:
Line 15: Line 18:
 <​code>​ <​code>​
 /* Expression */ /* Expression */
-(5-3)*7;+x = (5-3)/7;
  
 /* Three Address Code */ /* Three Address Code */
Line 22: Line 25:
 sub sub
 push 7 push 7
-mul+div 
 +pop x
 </​code>​ </​code>​
 +
 +
 +
  
  
Line 119: Line 126:
    
 ; ;
-</​code>​ 
- 
-<code javascript index.ts>​ 
-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) 
-    { 
-        ​ 
-    } 
-    else 
-    if (node instanceof ValueNode) 
-    { 
-        ​ 
-    } 
-    else 
-    if (node instanceof VariableNode) 
-    { 
-        ​ 
-    } 
-    else 
-    if (node instanceof AttributionNode) 
-    { 
-        ​ 
-    } 
-    else 
-    if (node instanceof Expression) 
-    { 
-        if (node.left !== undefined && node.right !== undefined) 
-        { 
-            ​ 
-        } 
-    } 
-} 
-  
-var ast = parser.parse (str); 
-console.log (JSON.stringify(ast,​ null, 4)); 
-  
-writeThreeAddressCode(ast);​ 
 </​code>​ </​code>​
  
Line 185: Line 133:
  
   - Dans un fichier **ex1.txt** écrivez le //three address code// avec une **pile** pour les expressions suivantes (**1p**)   - Dans un fichier **ex1.txt** écrivez le //three address code// avec une **pile** pour les expressions suivantes (**1p**)
-    * (5-3)*7+2+4 
     * a = (5-3)*7+2+4     * a = (5-3)*7+2+4
     * e = (a+5)/(a-2)     * e = (a+5)/(a-2)
-  - Dans un fichier **ex2.txt** écrivez le //three address code// avec une **pile** pour le programme suivant (**1p**) <​code ​javascript>+  - Dans un fichier **ex2.txt** écrivez le //three address code// avec une **pile** pour le programme suivant (**1p**) <​code ​java>
 if (a > 0) if (a > 0)
 { {
-  result = 'positive';+  result = "positive";
 } }
 else else
 { {
-  result = 'negative';+  result = "negative";
 } }
 </​code>​ </​code>​
-  - Dans un fichier **ex3.txt** écrivez le //three address code// avec une **pile** pour le programme suivant (**1p**) <​code ​javascript+  - Dans un fichier **ex3.txt** écrivez le //three address code// avec une **pile** pour le programme suivant (**1p**) <​code ​java
-function double ​(nr)+float doubleNr ​(float nr)
 { {
     return nr*2;     return nr*2;
 } }
    
-double ​(7/2);+doubleNr(7/2);
 </​code>​ </​code>​
-  - Téléchargez [[https://​github.com/​UPB-FILS-ALF/​TP/​tree/​main/​TP9|la structure]] du TP. Exécutez le parser du laboratoire et écrivez un programme qui écrit le three address code pour les noeuds //​Expression//​ avec une pile (**2p**)+  - Exécutez le parser du laboratoire et écrivez un programme qui écrit le three address code pour les noeuds //​Expression//​ avec une pile (**2p**)
   - Modifiez la grammaire et le //Visitor// pour que les appels de fonction puissent être à l'​intérieur des expressions. (Exemple: ''​2 + 3 / _double(a)''​). Testez la validité de la grammaire avec le fichier **ex5.txt**. (**1p**)   - Modifiez la grammaire et le //Visitor// pour que les appels de fonction puissent être à l'​intérieur des expressions. (Exemple: ''​2 + 3 / _double(a)''​). Testez la validité de la grammaire avec le fichier **ex5.txt**. (**1p**)
   - Ecrivez un programme qui écrit le three address code avec une pile pour le noeud //​AttributionNode//​. Testez avec le fichier **ex6.txt**. (**1p**)   - Ecrivez un programme qui écrit le three address code avec une pile pour le noeud //​AttributionNode//​. Testez avec le fichier **ex6.txt**. (**1p**)
alf/laboratoare/09_fr_java.1683578265.txt.gz · Last modified: 2023/05/08 23:37 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