diff options
-rw-r--r-- | doc/rapport.md | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/doc/rapport.md b/doc/rapport.md index 28f8446..1728fee 100644 --- a/doc/rapport.md +++ b/doc/rapport.md | |||
@@ -7,11 +7,26 @@ date: 2018-02-20 | |||
7 | # Usage | 7 | # Usage |
8 | Après un `make`, `./tcompil < prog.tpc [-o prog.asm]` | 8 | Après un `make`, `./tcompil < prog.tpc [-o prog.asm]` |
9 | 9 | ||
10 | Pour faciliter les tests, | 10 | Pour faciliter les tests, utiliser `make test FILE_TEST=test_file` |
11 | `make test FILE_TEST=test_file` | ||
12 | test_file est en réalité un fichier d'extension .tpc placé dans le répertoire res. (exemple: res/test_file.tpc). | 11 | test_file est en réalité un fichier d'extension .tpc placé dans le répertoire res. (exemple: res/test_file.tpc). |
13 | Ceci génère un executable `test_file` dans le répertoire out. | 12 | Ceci génère un executable `test_file` dans le répertoire out. |
14 | 13 | ||
14 | # Fonctions fournies par le langage | ||
15 | |||
16 | ## Fonctions de lecture | ||
17 | |||
18 | - `reade(entier e)` | ||
19 | |||
20 | Fonction de lecture sur l'entrée standard de valeur de type `entier`. On passe en paramètre un `entier` a l'adresse duquel sera stocké l'entier lu. | ||
21 | |||
22 | - `readc(caractere c)` | ||
23 | |||
24 | Fonction de lecture sur l'entrée standard de valeur de type `caractere`. On passe en paramètre un `caractere` a l'adresse duquel sera stocké le caractere lu. | ||
25 | |||
26 | ## Fonction d'écriture | ||
27 | - `print(<entier|caractere> exp)` | ||
28 | |||
29 | Fonction d'écriture sur la sortie standard qui se charge d'identifier le type de l'expression passée en paramètre. | ||
15 | 30 | ||
16 | # Analyse lexicale | 31 | # Analyse lexicale |
17 | 32 | ||
@@ -87,7 +102,7 @@ ListExp : ListExp ',' Exp | |||
87 | 102 | ||
88 | Par exemple : | 103 | Par exemple : |
89 | 104 | ||
90 | ``` | 105 | ```yacc |
91 | ListExp ',' ListExp ',' ListExp | 106 | ListExp ',' ListExp ',' ListExp |
92 | ``` | 107 | ``` |
93 | 108 | ||
@@ -100,7 +115,7 @@ On déclare donc `%left ,` pour l'indiquer à Bison. | |||
100 | 115 | ||
101 | Le compilateur gère l'analyse sémantique. | 116 | Le compilateur gère l'analyse sémantique. |
102 | Par exemple l'opération `tab[1] * 3` est légale mais `'a' * 'b'` ne l'est pas. La grammaire l'accepte, mais l'analyse sémantique à parti des attributs interdits. | 117 | Par exemple l'opération `tab[1] * 3` est légale mais `'a' * 'b'` ne l'est pas. La grammaire l'accepte, mais l'analyse sémantique à parti des attributs interdits. |
103 | 118 | De la même manière des caractères ne peuvent pas être des booléens. | |
104 | 119 | ||
105 | 120 | ||
106 | # Génération de code cible | 121 | # Génération de code cible |
@@ -135,3 +150,4 @@ Il est possible de réaliser ceci en modifiant le code de `yyerror()` par exempl | |||
135 | ## Suppression du code partiellement généré | 150 | ## Suppression du code partiellement généré |
136 | 151 | ||
137 | Une erreur de compilation entraîne l'arrêt de la génération de code, pouvant laisser un fichier de sortie partiellement généré. Il serait préférable de le supprimer en cas d'erreur. | 152 | Une erreur de compilation entraîne l'arrêt de la génération de code, pouvant laisser un fichier de sortie partiellement généré. Il serait préférable de le supprimer en cas d'erreur. |
153 | Cette gestion s'appuierait sur `yyerror()` et le retour de la fonction `yyparse()`. Lorsque le code de retour du compilateur est identifiable à une erreur, on supprimerait le .asm généré afin de ne pas fournir à l'utilisateur un programme assembleur frelaté. | ||