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 : A
opérande 2 : B
Exemple de représentation interne de l’expression mathématique :
A + B
pourrait être représenté comme :
opération : +
opérande 1 : A
opérande 2 : B
A * B
pourrait être représenté comme :
opération : *
opérande 1 : A
opérande 2 : B
Le 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 : 2
opérande 2 : 4
La 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.