aboutsummaryrefslogtreecommitdiff
path: root/doc/rapport.md
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rapport.md')
-rw-r--r--doc/rapport.md24
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
8Après un `make`, `./tcompil < prog.tpc [-o prog.asm]` 8Après un `make`, `./tcompil < prog.tpc [-o prog.asm]`
9 9
10Pour faciliter les tests, 10Pour faciliter les tests, utiliser `make test FILE_TEST=test_file`
11`make test FILE_TEST=test_file`
12test_file est en réalité un fichier d'extension .tpc placé dans le répertoire res. (exemple: res/test_file.tpc). 11test_file est en réalité un fichier d'extension .tpc placé dans le répertoire res. (exemple: res/test_file.tpc).
13Ceci génère un executable `test_file` dans le répertoire out. 12Ceci 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
88Par exemple : 103Par exemple :
89 104
90``` 105```yacc
91ListExp ',' ListExp ',' ListExp 106ListExp ',' ListExp ',' ListExp
92``` 107```
93 108
@@ -100,7 +115,7 @@ On déclare donc `%left ,` pour l'indiquer à Bison.
100 115
101Le compilateur gère l'analyse sémantique. 116Le compilateur gère l'analyse sémantique.
102Par 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. 117Par 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 118De 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
137Une 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. 152Une 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.
153Cette 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é.