This shows you the differences between two versions of the page.
alf:teme:tema3 [2021/04/15 17:59] diana.ghindaoanu [Déclaration de variables] |
alf:teme:tema3 [2022/04/08 12:28] (current) diana.ghindaoanu [Erreurs] |
||
---|---|---|---|
Line 6: | Line 6: | ||
Date limite: ** 25 avril, 23:55 ** \\ | Date limite: ** 25 avril, 23:55 ** \\ | ||
Points: ** 2 points ** de la note finale \\ | Points: ** 2 points ** de la note finale \\ | ||
- | Téléchargez le devoir: [[https://classroom.github.com/a/4lETpoEI | GitHub Devoir 3]] \\ | + | Téléchargez le devoir: [[https://classroom.github.com/a/UyBDhRP9 | GitHub Devoir 3]] \\ |
Téléchargement tardif: ** 1 point / jour ** (maximum 2 jours) \\ | Téléchargement tardif: ** 1 point / jour ** (maximum 2 jours) \\ | ||
</note> | </note> | ||
Line 266: | Line 266: | ||
</code> | </code> | ||
- | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/6_struct|Exemple]] | + | [[https://github.com/UPB-FILS-ALF/devoir-3-tests/tree/master/tests/6_struct|Exemple]] |
=== Accès des propriétés === | === Accès des propriétés === | ||
Line 290: | Line 290: | ||
</code> | </code> | ||
- | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/6_struct|Exemple]] | + | [[https://github.com/UPB-FILS-ALF/devoir-3-tests/tree/master/tests/6_struct|Exemple]] |
==== Liste ==== | ==== Liste ==== | ||
Line 332: | Line 332: | ||
</code> | </code> | ||
- | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/7_array|Exemple]] | + | [[https://github.com/UPB-FILS-ALF/devoir-3-tests/tree/master/tests/7_array|Exemple]] |
==== Expressions ==== | ==== Expressions ==== | ||
Line 397: | Line 397: | ||
</code> | </code> | ||
- | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/2_variable_definition|Exemple]] | + | [[https://github.com/UPB-FILS-ALF/devoir-3-tests/tree/master/tests/2_variable_definition|Exemple]] |
==== Définition des fonctions ==== | ==== Définition des fonctions ==== | ||
Line 465: | Line 465: | ||
</code> | </code> | ||
- | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/4_function|Exemple]] | + | [[https://github.com/UPB-FILS-ALF/devoir-3-tests/tree/master/tests/4_function|Exemple]] |
Line 503: | Line 503: | ||
<code> | <code> | ||
- | exec $write (text="Text"); | + | exec write (text="Text"); |
- | s = exec $sum (3, 5); | + | s = exec sum (3, 5); |
- | exec $getdir (); | + | exec _getdir (); |
</code> | </code> | ||
Line 521: | Line 521: | ||
} | } | ||
], | ], | ||
- | "line": fonction_call_line_no | + | "line": function_call_line_no |
} | } | ||
</code> | </code> | ||
- | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/4_function|Exemple]] | + | [[https://github.com/UPB-FILS-ALF/devoir-3-tests/tree/master/tests/4_function|Exemple]] |
==== Branches ==== | ==== Branches ==== | ||
Line 563: | Line 563: | ||
</code> | </code> | ||
- | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/5_branch|Exemple]] | + | [[https://github.com/UPB-FILS-ALF/devoir-3-tests/tree/master/tests/5_branch|Exemple]] |
==== Boucles ==== | ==== Boucles ==== | ||
Line 643: | Line 643: | ||
</code> | </code> | ||
- | [[https://github.com/upb-fils/alf/tree/master/Devoir/alf/verify/alf/3_loop|Exemple]] | + | [[https://github.com/UPB-FILS-ALF/devoir-3-tests/tree/master/tests/3_loop|Exemple]] |
===== BONUS ===== | ===== BONUS ===== | ||
+ | |||
+ | Pour **0.5** points supplémentaires, implémentez une fonctionnalité pour le traitement des //**erreurs**//. | ||
==== Erreurs ==== | ==== Erreurs ==== | ||
Line 665: | Line 667: | ||
} | } | ||
</code> | </code> | ||
- | |||
- | <note>Les lignes sont numérotées à partir de 1</note> | ||
=== Syntax === | === Syntax === | ||
Line 681: | Line 681: | ||
</code> | </code> | ||
- | <note important> | + | <note> |
La liste des erreurs doit être inclue dans un noeud de l'AST ayant la structure suivante: | La liste des erreurs doit être inclue dans un noeud de l'AST ayant la structure suivante: | ||
Line 692: | Line 692: | ||
</note> | </note> | ||
- | <note warning> | + | |
- | Les noms de jetons seront différents pour chacun d'entre vous, donc ils seront ignorés par le checker. Il vérifiera seulement que vous avez un jeton dans la liste. | + | ==== CONDITIONS ==== |
- | </note> | + | |
<note>Les lignes sont numérotées à partir de 1</note> | <note>Les lignes sont numérotées à partir de 1</note> | ||
- | <hidden> | + | <note important> |
- | ===== Bonus ===== | + | Sur GitHub, vous devez télécharger les fichiers suivants: |
- | + | * index.ts | |
- | Pour ** 0.5p ** supplémentaires, implémentez: | + | * Alf.g4 |
- | + | * AlfLexer.ts | |
- | Ajoutez un prétraitement à la source. On a: | + | * AlfListener.ts |
- | * register | + | * AlfParser.ts |
- | * if then / else / endif | + | * AlfVisitor.ts |
- | * unregister | + | * tout autre fichier supplémentaire que vous avez créé pour traiter votre code |
- | + | ||
- | === register === | + | |
- | Enregistre une valeur dans un identifiant. | + | |
- | + | ||
- | <code> | + | |
- | ®ister identifier value | + | |
- | </code> | + | |
- | + | ||
- | L'identifiant sera remplacé dans le programme par la valeur (textuellement). | + | |
- | + | ||
- | === if === | + | |
- | Vérifie si un identifiant est enregistré et a une valeur et l'ajoute dans le code source jusqu'à else ou endif. Else est facultatif. | + | |
- | + | ||
- | <code> | + | |
- | ®ister platform ... | + | |
- | + | ||
- | ... | + | |
- | + | ||
- | &if platform = windows | + | |
- | p <- "Windows" {this source is ignored if platform is not windows} | + | |
- | &else | + | |
- | p <- "Linux" {this source code is ignored if platform is not linux} | + | |
- | &end | + | |
- | </code> | + | |
- | + | ||
- | === unregister === | + | |
- | Annule la valeur d'un identifiant. | + | |
- | + | ||
- | <code> | + | |
- | ®ister N value | + | |
- | + | ||
- | ... | + | |
- | + | ||
- | &unregister N | + | |
- | + | ||
- | #N is undefined# | + | |
- | </code> | + | |
- | + | ||
- | <note> | + | |
- | Toutes les étiquettes de prétraitement sont sur une ligne distincte. | + | |
</note> | </note> | ||
- | <note> | + | <note warning> |
- | Le bonus ne sera attribué que si tous les autres tests réussissent. | + | Les noms de jetons seront différents pour chacun d'entre vous, donc ils seront ignorés par le checker. Il vérifiera seulement que vous avez un jeton dans la liste. |
</note> | </note> | ||
- | ===== Testing ===== | ||
- | Les devoir seront testés automatiquement en utilisant un ensemble de tests publics et privés. | ||
- | |||
- | ==== Tests publics ==== | ||
- | |||
- | Vous pouvez télécharger les tests publics du GitHub [[https://github.com/upb-fils/alf/tree/master/Devoir/alf|repository]]. | ||
- | |||
- | Pour exécuter les tests, téléchargez le contenu du repository dans le dossier avec les devoir. Entrez dans dossier //verify// et exécutez ./run_all.sh. | ||
- | |||
- | <code bash> | ||
- | cd verify | ||
- | ./run_all.sh | ||
- | </code> | ||
- | |||
- | Vous aurez besoin de bash pour ça. Vous pouvez utiliser Linux ou [[https://msdn.microsoft.com/fr-fr/commandline/wsl/install_guide|Windows Linux Subsystem]]. | ||
- | |||
- | <note> | ||
- | Pour installer nodejs sous Linux ou Windows Linux Subsystem, procédez comme suit: | ||
- | |||
- | <code bash> | ||
- | wget https://nodejs.org/dist/v6.10.0/node-v6.10.0-linux-x64.tar.xz | ||
- | tar xvfJ node-v6.10.0-linux-x64.tar.xz | ||
- | cd node-v6.10.0-linux-x64 | ||
- | sudo cp -R * /usr | ||
- | </code> | ||
- | | ||
- | </note> | ||
- | |||
- | ==== Tests privés ==== | ||
- | Lors du téléchargement des devoir, il se peut que nous ayons des tests privés à faire passer. //vmchecker// les exécutera. | ||
- | |||
- | <note> | ||
- | Vous pouvez toujours télécharger les devoir autant de fois que vous le souhaitez jusqu'à la date limite. Cela va exécuter tous les tests pour vous et afficher le résultat. | ||
- | </note> | ||
- | |||
- | ===== Télécharger les devoir ===== | ||
- | Le devoir doit être téléchargé sur [[https://vmchecker.cs.pub.ro|vmchecker]]. Connectez-vous avec votre nom d'utilisateur moodle, sélectionnez le cours //Automates et Langages Formelles (FILS)// et téléchargez [[#homework-archive|homework archive]]. | ||
- | |||
- | ==== Readme ==== | ||
- | Le fichier readme a le format suivant: | ||
- | |||
- | <code> | ||
- | Nom complet | ||
- | Groupe | ||
- | |||
- | Une explication comment vous avez écrit vos devoir, qu'utilisiez-vous, quelles sont les idées principales. | ||
- | </code> | ||
- | |||
- | |||
- | ==== Archive des devoir ==== | ||
- | Pour télécharger vos devoir, vous avez les instructions suivantes: | ||
- | |||
- | - Créez une archive zip (pas rar, ace, 7zip ou autre) contenant: | ||
- | * votre fichier principal (défini dans package.json) | ||
- | * vos fichiers javascript (*.js) | ||
- | * votre fichiers l et y (grammar.l et grammar.y) | ||
- | * le fichier package.json | ||
- | * le fichier Readme | ||
- | - Connectez-vous avec [[https://vmchecker.cs.pub.ro|vmchecker]] | ||
- | - Sélectionnez le cours //Automates et Langages Formelles (FILS)// | ||
- | - Sélectionnez //3. Langage Alf// | ||
- | - Téléchargez l'archive | ||
- | |||
- | |||
- | <note> | ||
- | L'archive doit contenir les fichiers dans sa racine, pas dans un dossier. NE PAS archiver un dossier avec les fichiers, archiver DIRECTEMENT les fichiers. | ||
- | |||
- | NE PAS inclure //node_modules//. | ||
- | </note> | ||
- | |||
- | Lorsque l'archive est téléchargée, vmchecker exécutera: | ||
- | |||
- | <code bash> | ||
- | unzip archive.zip homework | ||
- | cd homework | ||
- | npm install | ||
- | echo '{ "node":true, "loopfunc": true, "esnext":true }' > .jshintrc | ||
- | jshint *.js | ||
- | jison grammar.y grammar.l -o grammar.js | ||
- | </code> | ||
- | </hidden> |