This shows you the differences between two versions of the page.
alf:laboratoare:03_fr_java [2023/03/19 18:57] alexandra.negoita02 |
alf:laboratoare:03_fr_java [2023/04/03 17:37] (current) alexandra.negoita02 [Lexer en ANTLR4] |
||
---|---|---|---|
Line 22: | Line 22: | ||
- Créer 2 fichiers [[https://www.computerhope.com/jargon/b/batchfil.htm|batch]]. | - Créer 2 fichiers [[https://www.computerhope.com/jargon/b/batchfil.htm|batch]]. | ||
- Le fichier ''antlr4.bat'' permet d'utiliser antlr4 dans la ligne de commande depuis n'importe quel fichier. Il doit contenir la commande **java org.antlr.v4.Tool %**. | - Le fichier ''antlr4.bat'' permet d'utiliser antlr4 dans la ligne de commande depuis n'importe quel fichier. Il doit contenir la commande **java org.antlr.v4.Tool %**. | ||
- | - Le fichier ''grun.bat'' est utilisé pour tester le fichier d'entrée et pour afficher l'arbre d'analyse sous des formes différentes. Il doit contenir la commande **java org.antlr.v4.runtime.misc.TestRig %***. {{ :alf:laboratoare:antlr-bat-files.png?550&nolink }} {{ :alf:laboratoare:antlr-javalib-structure.png?400&nolink }} | + | - Le fichier ''grun.bat'' est utilisé pour tester le fichier d'entrée et pour afficher l'arbre d'analyse sous des formes différentes. Il doit contenir la commande **java org.antlr.v4.runtime.misc.TestRig %***. {{ :alf:laboratoare:antlr-bat-files.png?550&nolink }} {{ :alf:laboratoare:antlr-javalib-structure.png?400&nolink }} |
- Ajouter le dossier **C:\Javalib** a la variable d'environnement PATH. {{ :alf:laboratoare:antlr-path-envvar.png?500&nolink }} | - Ajouter le dossier **C:\Javalib** a la variable d'environnement PATH. {{ :alf:laboratoare:antlr-path-envvar.png?500&nolink }} | ||
- Vérifier l'installation en tapant ''antlr4'' dans le Command Prompt. {{ :alf:laboratoare:antlr-cmd-test.png?400&nolink }} | - Vérifier l'installation en tapant ''antlr4'' dans le Command Prompt. {{ :alf:laboratoare:antlr-cmd-test.png?400&nolink }} | ||
Line 34: | Line 34: | ||
- Créer un nouveau projet en Intelij et assurez-vous que c'est un project type 'Maven'. {{ :alf:laboratoare:antlr-intelij-project.png?400&nolink }} | - Créer un nouveau projet en Intelij et assurez-vous que c'est un project type 'Maven'. {{ :alf:laboratoare:antlr-intelij-project.png?400&nolink }} | ||
- Entrez dans 'File > Settings' et assurez-vous que le plugin 'ANTLR v4' est active. {{ :alf:laboratoare:antlr-plugin-enables.png?400&nolink }} | - Entrez dans 'File > Settings' et assurez-vous que le plugin 'ANTLR v4' est active. {{ :alf:laboratoare:antlr-plugin-enables.png?400&nolink }} | ||
- | - Dans le fichier 'pom.xml', ecrivez les lignes suivantes, pour ajouter l'archive ANTLR dans notre projet. | + | - Dans le fichier 'pom.xml', ecrivez les lignes suivantes, pour ajouter l'archive ANTLR dans notre projet. <code> |
- | <code> | + | |
<dependencies> | <dependencies> | ||
<dependency> | <dependency> | ||
Line 44: | Line 43: | ||
</dependencies> | </dependencies> | ||
</code> {{ :alf:laboratoare:antlr-xml.png?400&nolink }} | </code> {{ :alf:laboratoare:antlr-xml.png?400&nolink }} | ||
- | - On doit aussi ajouter le fichier '.jar' dans le project, pour etre reconnu par Intelij. Entrez dans 'File > Project Structure', appuyez sur le menu 'Modules' et puis sur le boutton '+', et ajouter le fichier '.jar' qui est dans le directoire 'C:\Javalib'. Puis, appuyez sur 'Apply' et 'OK'. {{ :alf:laboratoare:antlr-dependencies.png?400&nolink }} {{ :alf:laboratoare:antlr-dependencies2.png?400&nolink }} | + | - On doit aussi ajouter le fichier '.jar' dans le project, pour etre reconnu par Intelij. Entrez dans 'File > Project Structure', appuyez sur le menu 'Modules' et puis sur le boutton '+', et ajouter le fichier '.jar' qui est dans le directoire 'C:\Javalib'. Puis, appuyez sur 'Apply' et 'OK'. {{ :alf:laboratoare:antlr-dependencies.png?400&nolink }} |
+ | - Le resulat sera: {{ :alf:laboratoare:antlr-dependencies2.png?400&nolink }} | ||
===== Lexer ===== | ===== Lexer ===== | ||
Line 59: | Line 59: | ||
==== Rappel - Expressions régulières ==== | ==== Rappel - Expressions régulières ==== | ||
- | === Mathematique === | ||
^ Character ^ Description ^ Exemple ^ | ^ Character ^ Description ^ Exemple ^ | ||
| * | Zéro ou plusieurs fois | a*, (ab)* | | | * | Zéro ou plusieurs fois | a*, (ab)* | | ||
Line 96: | Line 95: | ||
Après avoir créé ce fichier, on peut voir l'arbre generee par ANTLR, dans le menu 'ANTLR Preview'. En gauche, vous pouvez ecrire le texte qui va etre analyse, et en droit est l'arbre avec tokens. | Après avoir créé ce fichier, on peut voir l'arbre generee par ANTLR, dans le menu 'ANTLR Preview'. En gauche, vous pouvez ecrire le texte qui va etre analyse, et en droit est l'arbre avec tokens. | ||
{{ :alf:laboratoare:antlr-tree-preview.png?400&nolink }} | {{ :alf:laboratoare:antlr-tree-preview.png?400&nolink }} | ||
+ | |||
Pour utiliser la grammaire dans un programme, on doit premierement configurer ou sont generees les fichiers necessaires pour l'analyse ANTLR. | Pour utiliser la grammaire dans un programme, on doit premierement configurer ou sont generees les fichiers necessaires pour l'analyse ANTLR. | ||
- Creer un nouveau directoire 'alfLanguage', et marquer le 'Generated Sources Root'. Ce type de directoire signifie qu'il a seulement des fichiers read-only, qui peuvent etre importeed dans Main. {{ :alf:laboratoare:antlr-generated-sources-root.png?400&nolink }} | - Creer un nouveau directoire 'alfLanguage', et marquer le 'Generated Sources Root'. Ce type de directoire signifie qu'il a seulement des fichiers read-only, qui peuvent etre importeed dans Main. {{ :alf:laboratoare:antlr-generated-sources-root.png?400&nolink }} | ||
Line 138: | Line 138: | ||
<note important> | <note important> | ||
- | 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' | + | 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'' |
</note> | </note> | ||
===== Exercices ===== | ===== Exercices ===== | ||
- | - Traitez le tableau ci-dessous a l'aide des **expressions régulières** de sorte que chaque livre devienne un objet de type Book, avec les suivantes propriétés: //titre// (string), //ISBN// (number), et //date de publication// (string). **(1p)** <code javascript> let books_array: string[] = [ | + | - **(Sans ANTLR)** Traitez le tableau ci-dessous a l'aide des **expressions régulières** de sorte que chaque livre devienne un objet de type Book, avec les suivantes propriétés: //titre// (string), //ISBN// (number), et //date de publication// (string). **(1p)** <code java> String[] books_array = {"Engineering a Compiler,9780120884780,7th February 2011", |
- | 'Engineering a Compiler,9780120884780,7th February 2011', | + | "Modern Operating Systems 4,9780133591620,21st March 2014", |
- | 'Modern Operating Systems 4,9780133591620,21st March 2014', | + | "Computer Networks,9332518742,9th January 2010"};</code> |
- | 'Computer Networks,9332518742,9th January 2010' | + | - Installez ANTLR4 globalement, en suivant les étapes du laboratoire. **(1p)** |
- | ];</code> | + | - Créez le programme complet présenté dans le tutoriel de ce TP (fichiers de configuration, fichier Alf.g4, fichier Main.java) et assurez-vous que son exécution est réalisée sans d'erreurs. Faites input string "Hello <votre nom>!"**(1p)** |
- | - Installez ANTLR4 globalement, ainsi que la version pour TypeScript. Attachez une capture d'écran avec l'exécution de la commande ''antlr4'' dans votre Command Prompt et une autre avec le résultat de la commande ''npm run antlr4ts'' dans le Terminal de Visual Studio Code. **(1p)** | + | |
- | - Créez le programme complet présenté dans le tutoriel de ce TP (fichiers de configuration, fichier Alf.g4, fichier main.ts) et assurez-vous que son exécution est réalisée sans d'erreurs. **(1p)** | + | |
- Affichez la liste des tokens: **(1p)** | - Affichez la liste des tokens: **(1p)** | ||
- | - A l'aide des fonctions pour les strings, traitez le fichier ''Alf.tokens'' créé automatiquement par ANTLR et générez un dictionnaire qui ait comme clés l'indice de vos tokens et comme valeurs leur nom. **(0.5p)** <code bash>{ '1': 'NEWLINE', '2': 'INT' }</code> | + | - A l'aide des fonctions pour les strings, traitez le fichier ''Alf.tokens'' créé automatiquement par ANTLR et générez un HashMap qui ait comme clés l'indice de vos tokens et comme valeurs leur nom. **(0.5p)** <code bash>{1='Hello ', 2='!', 3=NAME}</code> |
- Parcourez et affichez la liste des tokens (pour chaque token, affichez son nom et sa valeur comme dans l'exemple. **Indice**: Pour pouvoir afficher la liste des tokens, vous devrez inspecter la classe //BufferedTokenStream// et choisir une méthode qui retourne cette liste. Vous aurez aussi besoin de la fonction **nextToken()** pour parcourir le buffer de données. **(0.5)** <code bash>[{ '10': 'INT', '\n': 'NEWLINE', '20': 'INT' }</code> | - Parcourez et affichez la liste des tokens (pour chaque token, affichez son nom et sa valeur comme dans l'exemple. **Indice**: Pour pouvoir afficher la liste des tokens, vous devrez inspecter la classe //BufferedTokenStream// et choisir une méthode qui retourne cette liste. Vous aurez aussi besoin de la fonction **nextToken()** pour parcourir le buffer de données. **(0.5)** <code bash>[{ '10': 'INT', '\n': 'NEWLINE', '20': 'INT' }</code> | ||
- | - Ajoutez a votre fichier ''Alf.g4'' des expressions régulières pour les jetons suivants: WORD - tout texte contenant uniquement des lettres et PONCTUATION - différents signes de ponctuation. Utilisez le lexer créé dans l'exercice précédent pour afficher la liste des tokens pour le texte: //Bonjour! Le TP d'ALF est de 8 a 10.// **(1p)** | + | - Ajoutez a votre fichier ''Alf.g4'' des expressions régulières pour les jetons suivants: NUMBER - tout texte contenant uniquement des chiffres et PONCTUATION - différents signes de ponctuation. Utilisez le lexer créé dans l'exercice précédent pour afficher la liste des tokens pour le texte: //Bonjour! Le TP d'ALF est de 8 a 10.// **(1p)** |
- Utilisez votre lexer pour analyser les jetons du fichier [[https://github.com/UPB-FILS-ALF/TP/blob/main/TP3/text_and_numbers.txt|text_and_numbers.txt]]. Pour chaque ligne de ce fichier affichez le texte du jeton, le type, et la ligne du fichier ou il a été trouvé. **(1p)** | - Utilisez votre lexer pour analyser les jetons du fichier [[https://github.com/UPB-FILS-ALF/TP/blob/main/TP3/text_and_numbers.txt|text_and_numbers.txt]]. Pour chaque ligne de ce fichier affichez le texte du jeton, le type, et la ligne du fichier ou il a été trouvé. **(1p)** | ||
- Ecrivez un lexer qui reconnaît un sous-ensemble du langage Python. Pour chaque point de cet exercice, utilisez comme exemple une chaîne quelconque correspondant au langage Python, pour voir si votre programme peut: **(3p)** | - Ecrivez un lexer qui reconnaît un sous-ensemble du langage Python. Pour chaque point de cet exercice, utilisez comme exemple une chaîne quelconque correspondant au langage Python, pour voir si votre programme peut: **(3p)** |