Exploration de l’interpréteur de commandes: Comprendre le fonctionnement de l’interpréteur de commandes et tester ses fonctionnalités.
Améliorer l’interpréteur de commandes: Ajouter de nouvelles fonctionnalités.
Ajouter le support des commandes en français: Permettre l’utilisation de commandes en français et gérer les accents et les caractères spéciaux.
Réaliser un évaluateur pour l’interpréteur: Créer un tokenizeur, un parseur et un évaluateur pour les expressions mathématiques pour évaluer les expressions arithmétiques.
L’objectif du premier exercice est de comprendre le fonctionnement de l’interpréteur de commandes et de tester ses fonctionnalités.
Étapes :
repl.c en utilisant un compilateur C (par exemple, gcc).>. Tapez une commande et appuyez sur Entrée.echo Hello World : devrait afficher “Echo: Hello World”.echo Bonjour à tous : devrait afficher “Echo: Bonjour à tous” avec des sauts de ligne entre les mots.foo : devrait afficher “Commande non reconnue…”.quit : devrait arrêter le programme.date, qui affiche la date actuelle.Questions à réfléchir :
echo avec des arguments?Conseils pour la modification du code :
main() pour traiter la nouvelle commande.if/else if/else) pour traiter les différentes commandes.Ajouter de nouvelles fonctionnalités à l’interpréteur de commandes, incluant les commandes aide et version, ainsi que des fonctions pour les traiter.
Tâches :
version :
afficher_version() qui affiche la version de l’interpréteur de commandes.version et appeler la fonction afficher_version() lorsque cette commande est saisie.help :
afficher_aide() qui affiche les commandes disponibles et leur utilisation.help et appeler la fonction afficher_aide() lorsque cette commande est saisie.echo :
traiter_echo() qui traite la commande echo et affiche le texte saisi par l’utilisateur.traiter_echo() lorsque la commande echo est saisie.quit :
traiter_quit() qui traite la commande quit et ferme l’interpréteur de commandes.traiter_quit() lorsque la commande quit est saisie.N’oubliez pas de tester votre code pour vous assurer qu’il fonctionne correctement.
Ajouter le support des commandes en français à l’interpréteur de commandes, en plus des commandes en anglais.
Tâches :
aide pour afficher les commandes disponibles et leur utilisation (équivalent à help)quitter pour fermer l’interpréteur de commandes (équivalent à quit)version pour afficher la version de l’interpréteur de commandes (déjà existant)traiter_echo(), traiter_quit(), afficher_version() et afficher_aide() pour supporter les commandes en français.Assurez-vous de tester votre code pour vous assurer qu’il fonctionne correctement.
Pour le dernier exercice, vous devrez réaliser un évaluateur pour l’interpréteur. Cela implique de créer un tokenizeur, un parseur et un évaluateur capable d’évaluer des expressions arithmétiques (A opération B).
Tâche 1 : Réaliser un tokenizeur (lexer) pour les expressions mathématiques
lexer.c, lexer.h) qui prend en entrée une chaîne de caractères représentant une expression mathématique et renvoie une liste de jetons (tokens) représentant les éléments de l’expression, tels que :
Tâche 2 : Réaliser un parseur pour les expressions mathématiques
parseur.c, parseur.h) qui prend en entrée la liste de jetons (tokens) générée par le tokenizeur et renvoie une représentation interne de l’expression mathématique, telle que :
opération : +, -, \*, /opérande 1 : Aopérande 2 : BExemple de représentation interne de l’expression mathématique :
A + B pourrait être représenté comme :
opération : +opérande 1 : Aopérande 2 : BA * B pourrait être représenté comme :
opération : *opérande 1 : Aopérande 2 : BLe parseur devra ensuite passer cette représentation interne à une fonction d’évaluation (tâche suivante) pour obtenir le résultat final.
Tâche 3 : Évaluer les expressions mathématiques
evaluation.c (et evaluation.h) qui prend en entrée la représentation interne de l’expression mathématique générée par le parseur et évalue l’expression en renvoyant le résultat.Exemple d’évaluation :
opération : +opérande 1 : 2opérande 2 : 4La fonction devra renvoyer le résultat 6.
Remarque : la fonction devra être capable de gérer les expressions avec des nombres réels et des entiers.
Note : Vous pouvez utiliser des structures de données simples pour représenter la représentation interne de l’expression mathématique.
> 2 + 3
5
> 1.2 * 4.0
4.8
Testez votre interpréteur pour vous assurer qu’il fonctionne correctement avec les expressions mathématiques.