| # Guide de développement Maya | |
| ## Comment ajouter de nouvelles fonctionnalités | |
| ### Structure du code | |
| Le code Maya est organisé de manière modulaire : | |
| 1. **Déclarations** : Toutes les fonctions sont déclarées en haut du fichier | |
| 2. **Fonctions utilitaires** : `trim()`, `maya_error()`, etc. | |
| 3. **Gestion des variables** : `get_variable_value()`, `set_variable()` | |
| 4. **Handlers** : Une fonction `handle_xxx()` pour chaque type de commande | |
| 5. **Interpréteur principal** : `interpret_line()` qui dispatche vers les handlers | |
| ### Ajouter une nouvelle fonctionnalité | |
| #### Étape 1 : Ajouter le prototype de fonction | |
| ```c | |
| void handle_nouvelle_fonction(char *line); | |
| ``` | |
| #### Étape 2 : Implémenter la fonction | |
| ```c | |
| void handle_nouvelle_fonction(char *line) { | |
| // Votre code ici | |
| // Utilisez maya_error() pour les erreurs | |
| // Utilisez trim() pour nettoyer les chaînes | |
| } | |
| ``` | |
| #### Étape 3 : Ajouter la condition dans interpret_line() | |
| ```c | |
| else if (strstr(line, "my.nouvelle")) { | |
| handle_nouvelle_fonction(line); | |
| } | |
| ``` | |
| ### Exemples de nouvelles fonctionnalités possibles | |
| #### 1. Fonction my.time (afficher l'heure) | |
| ```c | |
| void handle_time(char *line) { | |
| time_t t = time(NULL); | |
| struct tm *tm = localtime(&t); | |
| printf("Heure actuelle: %02d:%02d:%02d\n", | |
| tm->tm_hour, tm->tm_min, tm->tm_sec); | |
| } | |
| ``` | |
| #### 2. Fonction my.random (nombre aléatoire) | |
| ```c | |
| void handle_random(char *line) { | |
| char *start = strchr(line, '('); | |
| char *end = strrchr(line, ')'); | |
| if (!start || !end) { | |
| maya_error("Parenthèses manquantes pour my.random", 0); | |
| return; | |
| } | |
| start++; | |
| *end = '\0'; | |
| int max = evaluate_expression(start); | |
| printf("Nombre aléatoire: %d\n", rand() % max); | |
| } | |
| ``` | |
| #### 3. Fonction my.file (écrire dans un fichier) | |
| ```c | |
| void handle_file_write(char *line) { | |
| // Parser le nom du fichier et le contenu | |
| // Écrire dans le fichier | |
| // Gérer les erreurs | |
| } | |
| ``` | |
| ### Conventions de nommage Maya | |
| - Toutes les fonctions commencent par `my.` | |
| - Les sous-catégories utilisent le point : `my.math.add`, `my.file.write` | |
| - Les noms sont en français pour rester cohérent avec l'esprit du langage | |
| ### Gestion des erreurs | |
| Toujours utiliser `maya_error()` pour signaler les erreurs : | |
| ```c | |
| maya_error("Description de l'erreur", numero_ligne); | |
| ``` | |
| ### Tests | |
| Testez vos nouvelles fonctionnalités en : | |
| 1. Ajoutant des exemples dans `test.my` | |
| 2. Testant en mode interactif | |
| 3. Vérifiant la gestion d'erreurs | |
| ### Compilation et test | |
| ```bash | |
| make clean | |
| make | |
| ./main test.my | |
| ``` | |