Differences

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

Link to this comparison view

alf:laboratoare:05 [2021/04/02 21:32]
diana.ghindaoanu [Exercices]
alf:laboratoare:05 [2022/04/04 23:19] (current)
diana.ghindaoanu [Exercices]
Line 75: Line 75:
 abstract class ASTNode { abstract class ASTNode {
     constructor(){};​     constructor(){};​
-    public toJSON(): any { 
-        return { 
-            ...this, id: this.constructor.name 
-        }; 
-    } 
 } }
 class StatementNode extends ASTNode { class StatementNode extends ASTNode {
     constructor(public readonly statement: ASTNode) {     constructor(public readonly statement: ASTNode) {
         super();         super();
 +    }
 +    toJSON() {
 +        /* TODO: Return here an object having the id "​statement"​ and the statement a list of instructions */
     }     }
 } }
Line 89: Line 87:
     constructor(public readonly variable_type:​ string, public readonly variable: string, public readonly op: string, public readonly value: string|number) {     constructor(public readonly variable_type:​ string, public readonly variable: string, public readonly op: string, public readonly value: string|number) {
         super();         super();
 +    }
 +    toJSON() {
 +
 +        /* TODO: Return here an object having the id "​declaration"​ and the following properties: variable_type,​ variable and value */
 +        ​
 +    }
 +}
 +
 +class ValueNode extends ASTNode {
 +    constructor(public readonly value: number|string) {
 +        super();
 +    }
 +    toJSON() {
 +        /*TODO: Return here an object having the id "​value"​ and the following properties: value */
 +        ​
 +
 +    }
 +}
 +class TypeNode extends ASTNode {
 +    constructor(public readonly type_name: string) {
 +        super();
 +    }
 +    toJSON() {
 +        /* TODO: Return here an object having the id "​type"​ and the following properties: type */
     }     }
 } }
Line 144: Line 166:
 ===== Exercices ===== ===== Exercices =====
  
-  - Créez un nouveau projet ANLTR4. Téléchargez la structure du TP depuis le github repository, inspectez la structure de la grammaire et exécutez le fichier principal ​**index.ts** pour voir l'​arbre résulté. **(2p)** +  - Créez un nouveau projet ANLTR4. Téléchargez la structure du TP depuis le [[https://​github.com/​UPB-FILS-ALF/​TP/​tree/​main/​TP5|github repository]], inspectez la structure de la grammaire et complétez les fonctions ​**toJSON()** selon les indications marquées par TODO. **(2p)** 
-  - Ajoutez au fichier de grammaire les règles pour accepter plusieurs instructions. Les instructions peuvent etre séparées par '';''​ et une ou plusieurs lignes vides. Ajoutez les classes et les méthodes nécessaires pour pouvoir visiter les noeuds. Testez le programme pour les instructions suivantes: **(3p)** <code bash>​float _var1 = 7.5;+  - Ajoutez au fichier de grammaire les règles pour accepter plusieurs instructions. Les instructions peuvent etre séparées par '';''​ et une ou plusieurs lignes vides. Ajoutez les classes et les méthodes nécessaires pour pouvoir visiter les noeuds. Dans l'AST, chaque instruction doit etre ajoutée dans la liste //​statements//​ du noeud principal. Testez le programme pour les instructions suivantes: **(3p)** <code bash>​float _var1 = 7.5;
 string _var2 = '​alf';</​code>​ string _var2 = '​alf';</​code>​
-   - Ajoutez à la grammaire décrite dans l'​exemple les règles nécessaires pour l'​utilisation des expressions (plusieurs expressions) du laboratoire précédent. Votre grammaire doit accepter maintenent aussi les déclarations des variables, que les expressions. Ajoutez les classes et les méthodes nécessaires pour visiter les nouveaux noeuds et générer l'​arbre. Testez la correctitude de votre grammaire en lisant les instructions suivantes depuis un fichier texte: **(3p)** <code bash> int _var1 = 1;+   - Ajoutez à la grammaire décrite dans l'​exemple les règles nécessaires pour l'​utilisation des expressions (plusieurs expressions) du laboratoire précédent. Votre grammaire doit accepter maintenent aussi les déclarations des variables, que les expressions. Ajoutez les classes et les méthodes nécessaires pour visiter les nouveaux noeuds et générer l'​arbre. ​Le noued correspondant aux expressions doit avoir les propriétés suivantes:, //id: "​expression"//,​ //left// (le neoud correspondant a l'​opérande de gauche), //right// (le neoud correspondant a l'​opérande de droite), //op// (la valeur de l'​opérateur) ​Testez la correctitude de votre grammaire en lisant les instructions suivantes depuis un fichier texte: **(3p)** <code bash> int _var1 = 1;
 5*(2+4)/​7;</​code>​ 5*(2+4)/​7;</​code>​
    - Ajoutez des règles et modifiez les méthodes du **Visitor** pour que les variables puissent prendre des valeurs qui sont des expressions. Testez pour l'​instruction suivante: **2p** <code bash>​float _var1 = 5*(2+4)/​7;</​code>​    - Ajoutez des règles et modifiez les méthodes du **Visitor** pour que les variables puissent prendre des valeurs qui sont des expressions. Testez pour l'​instruction suivante: **2p** <code bash>​float _var1 = 5*(2+4)/​7;</​code>​
    - **BONUS**: Affichez le contenu de l'​arbre d'​analyse dans un fichier ayant le format ''​JSON''​. **(1p)**    - **BONUS**: Affichez le contenu de l'​arbre d'​analyse dans un fichier ayant le format ''​JSON''​. **(1p)**
 +
 +
 +
alf/laboratoare/05.1617388372.txt.gz · Last modified: 2021/04/02 21:32 by diana.ghindaoanu
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