Bonsoir,
Je me lance dans la réalisation d'un shell de commandes qui servira a effectuer des calculs mathématiques.
Exemple de fonctionnement :
Et par la suite, je pourrais rajouter en plus de ces simples assignations et opérations de bases, des fonctions arithmétiques et géométrique plus amusantes :pInvite de commandes mathematiques.
> A = 1 saisie utilisateur
> B = 2 saisie utilisateur
> A + B saisie utilisateur
>> 3 un résultat
Voici à quoi ressemble mon main pour l'instant :
Pour l'instant, il ne fait pas grand chose...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 #include <stdio.h> #include <stdlib.h> #include "ed/inc/io.h" #define TAILLE_MAX_COMMANDE 32 int main(int argc, char *argv[]) { printf("Invite de commandes mathematiques.\n\n"); char commande[TAILLE_MAX_COMMANDE] = {0}; int retour = 0; for(;;) { // Affichage du promt printf("> "); fflush(stdout); // Tant que la saisie ne se fait pas sans erreur while ((retour = get_s(commande, sizeof commande)) != IO_OK) { // Si l'erreur est un dépassement de taille du tableau if (retour == IO_ERR_LENGTH) printf("La commande est trop longue et ne sera donc pas traitee.\n"); // Sinon, on n'analyse pas le cas par cas (inintéressant ici) else printf("Erreur indeterminee. La commande ne sera pas traitee.\n"); // Affichage du promt printf("> "); fflush(stdout); } // Si la chaine saisie est "quit", on quitte le programme normalement if (strcmp(commande, "quit") == NULL) return EXIT_SUCCESS; } }
Le premier problème que je me pose : comment reconnaître correctement les commandes saisies ?
En effet, si l'utilisateur entre "A=1", "A= 1", " A = 1", le résultat devra être le même.
J'ai imaginé un début de solution à partir de fonctions que j'ai créées pour un projet précédant :
- lire la saisie
- définir les caractères qui doivent impérativement être "décollés" des autres expressions (ici, c'est =)
- compter le nombre d'espaces manquants, s'il manque des espaces
- allouer dynamiquement une nouvelle chaine avec assez de place pour contenir des espaces en plus
- copier la saisie en rajoutant les espaces manquants
En gros, ce morceau fait ça :
"A=1" devient "A = 1".
Ensuite :
- on peut désormais lire chaque mot indépendamment
- on regarde si ça correspond à un "modèle" (ici LETTRE = VALEUR), et on applique la fonction (je n'ai pas encore mis en place cette partie "reconnaissance de modèle")
Pensez-vous que je parte sur quelque chose de correct ?
Ca me paraît long comme démarche, fastidieux.
Comment feriez-vous pour reconnaître que la saisie appartient à un "modèle" défini ?
Par avance, merci.
Partager