Differences

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

Link to this comparison view

alf:laboratoare:05_fr_java [2023/04/03 17:35]
alexandra.negoita02 [Visiteur de l'arbre]
alf:laboratoare:05_fr_java [2023/04/04 09:19] (current)
alexandra.negoita02 [Exercices]
Line 1: Line 1:
 ====== TP 5 - Parser du langage. Introduction à l'AST ====== ====== TP 5 - Parser du langage. Introduction à l'AST ======
 +<note warning>
 +Vous devez **accepter** l'​assignment d'ici est travailler avec ce **repository**:​ [[https://​classroom.github.com/​a/​g8KTvWH-|Lab 5]]
 +</​note>​
 +
  
 Le principal role du **parser** est de  reconnaître les ordres contextuels décrits par les jetons spécifiés par un ensemble de règles d'​analyse. ​ Le principal role du **parser** est de  reconnaître les ordres contextuels décrits par les jetons spécifiés par un ensemble de règles d'​analyse. ​
Line 226: Line 230:
  
 <note important>​ <note important>​
-Après chaque modification apportée à la grammaire (fichier ''​Alf.g4''​),​ vous devez exécuter la commande suivante pour enregistrer ​les changements:​ <code bash> +Après chaque modification apportée à la grammaire (fichier ''​alf.g4''​),​ vous devez generer de nouveau ​les fichiers de ANTLR, avec clic-droit sur le fichier de grammaire ​> ''​Generate ANTLR Recognizer''​
-npm run antlr4ts +
-</​code>​ +
- +
-Après chaque modification apportée au fichier ​''​index.ts''​, vous devez exécuter les commandes suivantes pour voir le résultat correct: <code bash> +
-npx tsc +
-node index.js +
-</​code>​+
 </​note>​ </​note>​
  
 ===== Exercices ===== ===== Exercices =====
  
-  - 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)** +  - Téléchargez la structure du TP depuis le github repository ​donnétéléchargez et importez l'​archive GSON comme dit dans le laboratoire,​ et inspectez la structure de la grammaire. **(1p)** 
-  - 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;+  - 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 être 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. 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;+   - 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 ​maintenant ​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érez ​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: **(3p)** <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)**+
  
  
  
alf/laboratoare/05_fr_java.1680532525.txt.gz · Last modified: 2023/04/03 17:35 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